> > I just upgraded my numpy and started to received a TypeError from one of > > my codes that relied on the old, less strict, casting behaviour. The error > > message, however, left me scratching my head when trying to debug something > > like this: > > > > >>> a = array([0],dtype=uint64) > > >>> a += array([1],dtype=int64) > > TypeError: Cannot cast ufunc add output from dtype('float64') to > > dtype('uint64') with casting rule 'same_kind' > > > > Where does the 'float64' come from?!?! > > > > The combination of uint64 and int64 leads to promotion to float64 as the > best option for the combination of signed and unsigned. To fix things, you > can either use `np.add` with an output argument and `casting='unsafe'` or > just be careful about using unsigned types.
Thanks for the quick response. I understand there are reasons for the promotion to float64 (although my expectation would usually be that Numpy is going to follow C conventions), however the I found the error a little unhelpful. In particular Numpy is complaining about a dtype (float64) that it silently promoted to, rather than the dtype that the user provided, which generally seems like a bad idea. Could Numpy somehow complain about the original dtypes in this case? Or at least give a warning about the first promotion (e.g. loss of precision)? Peter _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion