[Numpy-discussion] dtype comparison, hash

Andreas Kloeckner lists at informa.tiker.net
Fri Dec 30 13:57:39 EST 2011


Hi Robert,

On Tue, 27 Dec 2011 10:17:41 +0000, Robert Kern <robert.kern at gmail.com> wrote:
> On Tue, Dec 27, 2011 at 01:22, Andreas Kloeckner
> <lists at informa.tiker.net> wrote:
> > Hi all,
> >
> > Two questions:
> >
> > - Are dtypes supposed to be comparable (i.e. implement '==', '!=')?
> 
> Yes.
> 
> > - Are dtypes supposed to be hashable?
> 
> Yes, with caveats. Strictly speaking, we violate the condition that
> objects that equal each other should hash equal since we define == to
> be rather free. Namely,
> 
>   np.dtype(x) == x
> 
> for all objects x that can be converted to a dtype.
> 
>   np.dtype(float) == np.dtype('float')
>   np.dtype(float) == float
>   np.dtype(float) == 'float'
> 
> Since hash(float) != hash('float') we cannot implement
> np.dtype.__hash__() to follow the stricture that objects that compare
> equal should hash equal.
> 
> However, if you restrict the domain of objects to just dtypes (i.e.
> only consider dicts that use only actual dtype objects as keys instead
> of arbitrary mixtures of objects), then the stricture is obeyed. This
> is a useful domain that is used internally in numpy.
> 
> Is this the problem that you found?

Thanks for the reply.

It doesn't seem like this is our issue--instead, we're encountering two
different dtype objects that claim to be float64, compare as equal, but
don't hash to the same value.

I've asked the user who encountered the user to investigate, and I'll
be back with more detail in a bit.

Andreas

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20111230/a4160159/attachment.sig>


More information about the NumPy-Discussion mailing list