Skip to content

Conversation

@danieldk
Copy link

@danieldk danieldk commented Nov 28, 2025

Suppose that we have a file add.py in a package:

import cutlass.cute as cute

from . import hello

@cute.jit
def add(a, b):
return a + b

and then in a file in the same directory we have import this function
and compile it:

import cutlass.cute as cute
from .add import add
jit_executor = cute.compile(add, 1, 2)

The compilation will fail with:

    jit_executor = cute.compile(add, 1, 2)
                   ^^^^^^^^^^^^^^^^^^^^^^^

File "[...]/nvidia_cutlass_dsl/python_packages/cutlass/base_dsl/ast_preprocessor.py", line 378, in exec_imports
raise ImportError(
ImportError: Failed to import mypkg.None: No module named 'mypkg.None'

I debugged ast_processor.py and found that the issue is with the relative import in the first file (from . import hello), where the package is set correctly, but the module name is None. This seems correct, because the function is exposed at the top-level. This small patch handles this case.

I have tested this both with a toy example and with flash-attention 4, where I have replaced all the absolute imports to relative imports.

I could not find a good existing place to put a test (if necessary).

Suppose that we have a file add.py in a package:

import cutlass.cute as cute

from . import hello

@cute.jit
def add(a, b):
    return a + b

and then in a file in the same directory we have import this function
and compile it:

import cutlass.cute as cute
from .add import add
jit_executor = cute.compile(add, 1, 2)

The compilation will fail with:

    jit_executor = cute.compile(add, 1, 2)
                   ^^^^^^^^^^^^^^^^^^^^^^^
  File "[...]/nvidia_cutlass_dsl/python_packages/cutlass/base_dsl/ast_preprocessor.py", line 378, in exec_imports
    raise ImportError(
ImportError: Failed to import mypkg.None: No module named 'mypkg.None'

I debugged `ast_processor.py` and found that the issue is with the
relative import in the first file (`from . import hello`), where the
package is set correctly, but the module name is `None`. This seems
correct, because the function is exposed at the top-level. This small
patch handles this case.

I have tested this both with a toy example and with flash-attention 4,
where I have replaced all the absolute imports to relative imports.
@danieldk
Copy link
Author

@hwu36 @Junkai-Wu Any chance this (or another fix for this issue) could be merged soon? It is blocking us to support CuTe DSL kernels through https://huggingface.co/docs/kernels/

@github-actions
Copy link

This PR has been labeled inactive-30d due to no recent activity in the past 30 days. Please close this PR if it is no longer required. Otherwise, please respond with a comment indicating any updates. This PR will be labeled inactive-90d if there is no activity in the next 60 days.

@danieldk
Copy link
Author

This is still relevant.

@Junkai-Wu
Copy link
Collaborator

@fengxie @brandon-yujie-sun to help review.

@brandon-yujie-sun
Copy link
Collaborator

Thanks for proposing the change. This has been adopted and fixed in 4.4.0.dev0, thanks!

@danieldk
Copy link
Author

Awesome, thanks!

@danieldk danieldk closed this Jan 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants