Yes, it looks buggy to me, see

In [12]: arr = pa.array([-1, -2, -3], type='int32')

In [13]: arr.cast('uint8')
---------------------------------------------------------------------------
ArrowInvalid                              Traceback (most recent call last)
<ipython-input-13-114e7eb1dc7b> in <module>()
----> 1 arr.cast('uint8')

~/code/arrow/python/pyarrow/array.pxi in pyarrow.lib.Array.cast()

~/code/arrow/python/pyarrow/error.pxi in pyarrow.lib.check_status()

ArrowInvalid: ../src/arrow/compute/kernels/cast.cc:1196 code:
Cast(ctx, Datum(array.data()), out_type, options, &datum_out)
../src/arrow/compute/kernels/cast.cc:1186 code:
detail::InvokeUnaryArrayKernel(ctx, func.get(), value, &result)
../src/arrow/compute/kernels/util-internal.cc:40 code:
kernel->Call(ctx, value, &output)
Integer value out of bounds

In [14]: arr.cast('uint16')
---------------------------------------------------------------------------
ArrowInvalid                              Traceback (most recent call last)
<ipython-input-14-17fcf02f6c1c> in <module>()
----> 1 arr.cast('uint16')

~/code/arrow/python/pyarrow/array.pxi in pyarrow.lib.Array.cast()

~/code/arrow/python/pyarrow/error.pxi in pyarrow.lib.check_status()

ArrowInvalid: ../src/arrow/compute/kernels/cast.cc:1196 code:
Cast(ctx, Datum(array.data()), out_type, options, &datum_out)
../src/arrow/compute/kernels/cast.cc:1186 code:
detail::InvokeUnaryArrayKernel(ctx, func.get(), value, &result)
../src/arrow/compute/kernels/util-internal.cc:40 code:
kernel->Call(ctx, value, &output)
Integer value out of bounds

In [15]: arr.cast('uint32')
Out[15]:
<pyarrow.lib.UInt32Array object at 0x7fc61eca3778>
[
  4294967295,
  4294967294,
  4294967293
]
On Wed, Nov 14, 2018 at 6:10 AM Romain Francois <rom...@purrple.cat> wrote:
>
> I'm implementing Array$cast() in the R package, i.e. 
> https://issues.apache.org/jira/browse/ARROW-3741?filter=12344983
>
> I'm seeing some weird results when casting from int32 to uint32 and uint64 
> (I'm expecting errors here as it's supposed to be safe
>
> https://github.com/apache/arrow/pull/2959#issuecomment-438606974
>
> a <- array(-(1:3))
> a$cast(uint16())
> #> Error in Array__cast(self, target_type, options): Invalid: Integer value 
> out of bounds
> a$cast(uint16())
> #> Error in Array__cast(self, target_type, options): Invalid: Integer value 
> out of bounds
> a$cast(uint32())
> #> arrow::Array
> #> [
> #>   4294967295,
> #>   4294967294,
> #>   4294967293
> #> ]
> a$cast(uint32())$type()
> #> arrow::UInt32
> #> uint32
>
> a$cast(uint64())
> #> arrow::Array
> #> [
> #>   -1,
> #>   -2,
> #>   -3
> #> ]
> a$cast(uint64())$type()
> #> arrow::UInt64
> #> uint64
>
> I don't think this is an R issue.
>
> Can someone using other front ends to the C++ library check if they get the 
> same problem ?
>
>
>

Reply via email to