Skip to content

Conversation

@SwayamInSync
Copy link
Member

closes #233

@SwayamInSync
Copy link
Member Author

@seberg also here, yesterday I saw the email of new protocol (and replied too but might be in moderation right now)
here I implemented the .dtype inside scalar, I think new protocol isn't up yet so maybe we can keep this PR open or you think this is enough then that also works

quad_ld = QuadPrecision("1e100", backend="longdouble")
quad_sleef = QuadPrecision("1e100", backend="sleef")
assert quad_ld.dtype == QuadPrecDType(backend='longdouble')
assert np.dtype(quad_ld) == QuadPrecDType(backend='longdouble')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Of course scalar.dtype should work and I guess since you are parametric you have to make it work.

Butt the protocol is the exact opposite of this assert. It specifically wants to disable this in the future because it makes no sense to say np.ones(..., dtype=scalar), the user should write dtype=scalar.dtype.

So in other words: The attribute is right, the __numpy_dtype__ protocol is just unrelated.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh I see, so we don't have to implement __numpy_dtype__
I misinterpret that, I thought in future had to expose both .dtype and __numpy_dtype__

In current scenarios atleast for testing, I just set np.longdouble = QuadPrecision #(scalar) as we have different names for scalar and dtype and this works correctly.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What we could try to have is a function to map from the scalar type to the DType class cleanly, I guess (this exists in C, but not Python).
I used to want np.dtype[scalar_type] for this, but while what typing does is conceptually the same, it's not compatible :(.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can always add np.dtype.from_scalar.

@ngoldbaum
Copy link
Member

This all seems correct to me as-is. I'd say merge this now and hold off on __numpy_dtype__ - no code in the real world uses it yet.

@seberg
Copy link
Member

seberg commented Nov 25, 2025

hold off on __numpy_dtype__ - no code in the real world uses it yet.

Just be overly clear onc emore: It isn't even correct to implement it! Scalars should not be convertible to dtypes via that mechanism.

@ngoldbaum
Copy link
Member

Just be overly clear onc emore: It isn't even correct to implement it! Scalars should not be convertible to dtypes via that mechanism.

Thanks! I haven't been following closely. So this PR is fine as-is.

@SwayamInSync
Copy link
Member Author

SwayamInSync commented Nov 25, 2025

Merging this in!
Thanks all

@SwayamInSync SwayamInSync merged commit 345b596 into numpy:main Nov 25, 2025
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

QuadPrecision Scalar is not exposing dtype correctly

3 participants