Skip to content

Allow coercion of Julia types to NumPy dtypes #737

Closed

Description

@hameerabbasi

Is your feature request related to a problem? Please describe.
We're using Julia types as dtypes, but a third-party library does np.dtype(jl_type). Maybe there's a way to support this as an upstream feature for everyone.

Describe the solution you'd like
Ideally, I'd like something like an implementation of the __numpy_dtype__ protocol or supported Julia types. This could even be implemented on some kinds of structs.

Describe alternatives you've considered
Maybe we could solve this upstream by converting back and forth, but a simple conversion is always helpful.

Additional context
Originally reported by @ilan-gold and @amalia-k510 in pydata/sparse#915

Activity

  1. cjdoris commented on Jan 22, 2026

    @cjdoris
    Member

    TIL about __numpy_dtype__, it looks like a recent addition. We could certainly implement it for Julia types (jl.Int64.__numpy_dtype__ being np.int64 etc).

  2. hameerabbasi commented on Jan 23, 2026

    @hameerabbasi
    Author

    That'd be great! I'm not super well-versed in Julia; but if the relevant code is in Python, I'm happy to make a PR.

    Also small correction: jl.Int64.__numpy_dtype__() would be np.dtype(np.int64)

    This has two minor differences:

    1. The return must be a dtype instance, not a type like np.int64.
    2. The protocol requires a callable, not an attribute directly.
  3. cjdoris commented on Jan 23, 2026

    @cjdoris
    Member

    It's OK I've done it (#738) - it was surprisingly simple because I could re-use existing type-conversion machinery from the array interface code. This means we can support struct types for free. It also means that doing np.dtype(eltype(julia_array)) should be consistent with np.array(julia_array).dtype in all cases.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions