Skip to content

Fix broken dtype set-membership check in pandas_transform_data - #12511

Open
Nityahapani wants to merge 1 commit into
dmlc:masterfrom
Nityahapani:fix/dtype-set-membership-hash-mismatch
Open

Fix broken dtype set-membership check in pandas_transform_data#12511
Nityahapani wants to merge 1 commit into
dmlc:masterfrom
Nityahapani:fix/dtype-set-membership-hash-mismatch

Conversation

@Nityahapani

Copy link
Copy Markdown
Contributor

np.dtype('float32') == np.float32 is True, but they hash differently, so 'dtype in {np.float32, np.float64}' is always False for real pandas float32/float64 columns. Masked in practice by the 'npdtypes' isinstance check on the same line via 'or', except on numpy <= 1.25.0 where that flag is always False -- there, every native float32/ float64 column silently takes the slower na_value-explicit path instead of the fast one the code comment describes.

Fix: wrap the set values in np.dtype() so hashing is consistent.

Verified against real pandas: float32/float64 now correctly match, int64 correctly still doesn't.

np.dtype('float32') == np.float32 is True, but they hash differently,
so 'dtype in {np.float32, np.float64}' is always False for real
pandas float32/float64 columns. Masked in practice by the 'npdtypes'
isinstance check on the same line via 'or', except on numpy <= 1.25.0
where that flag is always False -- there, every native float32/
float64 column silently takes the slower na_value-explicit path
instead of the fast one the code comment describes.

Fix: wrap the set values in np.dtype() so hashing is consistent.

Verified against real pandas: float32/float64 now correctly match,
int64 correctly still doesn't.
@trivialfis

Copy link
Copy Markdown
Member

I will look into this

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.

2 participants