From 41aaeabb2beea24628b2364c8d85ac4e40a020a6 Mon Sep 17 00:00:00 2001 From: Joost van Zwieten Date: Thu, 21 Nov 2024 11:14:35 +0100 Subject: [PATCH] disallow truncation in types.arraydata If `types.arraydata` is passed a `numpy.array` with dtype `numpy.int64` and the platform default int type is 32 bit, then `types.arraydata` truncates the array to `numpy.int32` without warning. This behavior is inherited from `numpy.astype`. Since this may lead to unexpected behavior, this patch disallows truncation by passing `casting='safe'` to `numpy.astype`. Deliberate truncation should now be done before passing the array to `types.arraydata`. --- nutils/types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nutils/types.py b/nutils/types.py index f69fb8d43..9ba09006a 100644 --- a/nutils/types.py +++ b/nutils/types.py @@ -389,7 +389,7 @@ def __new__(cls, arg): return arg array = numpy.asarray(arg) dtype = dict(b=bool, u=int, i=int, f=float, c=complex)[array.dtype.kind] - return super().__new__(cls, dtype, array.shape, array.astype(dtype, copy=False).tobytes()) + return super().__new__(cls, dtype, array.shape, array.astype(dtype, copy=False, casting='safe').tobytes()) def reshape(self, *shape): if numpy.prod(shape) != numpy.prod(self.shape):