You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@arrow.apache.org by Cedric Yau <ce...@gmail.com> on 2022/05/29 20:44:43 UTC

[Python/Cython] Object of type 'CResult[shared_ptr[CScalar]]' has no attribute 'ValueOrDie'

I am trying to add a second function to the example at (
https://arrow.apache.org/docs/python/integration/extending.html), and am
getting a compilation error message.  I can't tell if I'm trying to access
ValueOrDie() improperly or if I might be missing a modification to setup.py
from the example.

The function is as follows:

def print_array(obj):
    # Just an example function accessing both the pyarrow Cython API
    # and the Arrow C++ API
    cdef shared_ptr[CArray] arr = pyarrow_unwrap_array(obj)
    if arr.get() == NULL:
        raise TypeError("not an array")
    cdef arr_len =  arr.get().length()
    cdef int i
    cdef CResult[shared_ptr[CScalar]] r
    for i in range(arr_len):
        r = arr.get().GetScalar(i)
        if r.ok():
            print(i, r.ValueOrDie())

And produces an error on compilation:

Error compiling Cython file:
------------------------------------------------------------
...
    cdef int i
    cdef CResult[shared_ptr[CScalar]] r
    for i in range(arr_len):
        r = arr.get().GetScalar(i)
        if r.ok():
            print(i, r.ValueOrDie())
                     ^
------------------------------------------------------------

example.pyx:26:22: Object of type 'CResult[shared_ptr[CScalar]]' has no
attribute 'ValueOrDie'
Traceback (most recent call last):
  File "/home/ubuntu/repos/LbdInternal/PyarrowCython/setup.py", line 12, in
<module>
    ext_modules = cythonize("example.pyx")
  File
"/home/ubuntu/miniconda3/envs/lbdenv/lib/python3.10/site-packages/Cython/Build/Dependencies.py",
line 1127, in cythonize
    cythonize_one(*args)
  File
"/home/ubuntu/miniconda3/envs/lbdenv/lib/python3.10/site-packages/Cython/Build/Dependencies.py",
line 1250, in cythonize_one
    raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: example.pyx

Environment is as follows:

Ubuntu 20.04/x86
Python 3.10.4
cython 0.29.30
pyarrow 8.0.0

Any help would be appreciated.

Thanks,
Cedric

Re: [Python/Cython] Object of type 'CResult[shared_ptr[CScalar]]' has no attribute 'ValueOrDie'

Posted by Cedric Yau <ce...@gmail.com>.
Cool.  Thanks Niranda.  That worked. :)

On Sun, May 29, 2022 at 3:25 PM Niranda Perera <ni...@gmail.com>
wrote:

> Hi Cedric,
>
> I think you can use this `GetResultValue(...)`
>
> https://github.com/apache/arrow/blob/master/python/pyarrow/includes/common.pxd#L131
>
>
>
>
> On Sun, May 29, 2022 at 4:45 PM Cedric Yau <ce...@gmail.com> wrote:
>
>> I am trying to add a second function to the example at (
>> https://arrow.apache.org/docs/python/integration/extending.html), and am
>> getting a compilation error message.  I can't tell if I'm trying to access
>> ValueOrDie() improperly or if I might be missing a modification to setup.py
>> from the example.
>>
>> The function is as follows:
>>
>> def print_array(obj):
>>     # Just an example function accessing both the pyarrow Cython API
>>     # and the Arrow C++ API
>>     cdef shared_ptr[CArray] arr = pyarrow_unwrap_array(obj)
>>     if arr.get() == NULL:
>>         raise TypeError("not an array")
>>     cdef arr_len =  arr.get().length()
>>     cdef int i
>>     cdef CResult[shared_ptr[CScalar]] r
>>     for i in range(arr_len):
>>         r = arr.get().GetScalar(i)
>>         if r.ok():
>>             print(i, r.ValueOrDie())
>>
>> And produces an error on compilation:
>>
>> Error compiling Cython file:
>> ------------------------------------------------------------
>> ...
>>     cdef int i
>>     cdef CResult[shared_ptr[CScalar]] r
>>     for i in range(arr_len):
>>         r = arr.get().GetScalar(i)
>>         if r.ok():
>>             print(i, r.ValueOrDie())
>>                      ^
>> ------------------------------------------------------------
>>
>> example.pyx:26:22: Object of type 'CResult[shared_ptr[CScalar]]' has no
>> attribute 'ValueOrDie'
>> Traceback (most recent call last):
>>   File "/home/ubuntu/repos/LbdInternal/PyarrowCython/setup.py", line 12,
>> in <module>
>>     ext_modules = cythonize("example.pyx")
>>   File
>> "/home/ubuntu/miniconda3/envs/lbdenv/lib/python3.10/site-packages/Cython/Build/Dependencies.py",
>> line 1127, in cythonize
>>     cythonize_one(*args)
>>   File
>> "/home/ubuntu/miniconda3/envs/lbdenv/lib/python3.10/site-packages/Cython/Build/Dependencies.py",
>> line 1250, in cythonize_one
>>     raise CompileError(None, pyx_file)
>> Cython.Compiler.Errors.CompileError: example.pyx
>>
>> Environment is as follows:
>>
>> Ubuntu 20.04/x86
>> Python 3.10.4
>> cython 0.29.30
>> pyarrow 8.0.0
>>
>> Any help would be appreciated.
>>
>> Thanks,
>> Cedric
>>
>>
>
> --
> Niranda Perera
> https://niranda.dev/
> @n1r44 <https://twitter.com/N1R44>
>
>

-- 
Cedric Yau
cedricyau@gmail.com

Re: [Python/Cython] Object of type 'CResult[shared_ptr[CScalar]]' has no attribute 'ValueOrDie'

Posted by Niranda Perera <ni...@gmail.com>.
Hi Cedric,

I think you can use this `GetResultValue(...)`
https://github.com/apache/arrow/blob/master/python/pyarrow/includes/common.pxd#L131




On Sun, May 29, 2022 at 4:45 PM Cedric Yau <ce...@gmail.com> wrote:

> I am trying to add a second function to the example at (
> https://arrow.apache.org/docs/python/integration/extending.html), and am
> getting a compilation error message.  I can't tell if I'm trying to access
> ValueOrDie() improperly or if I might be missing a modification to setup.py
> from the example.
>
> The function is as follows:
>
> def print_array(obj):
>     # Just an example function accessing both the pyarrow Cython API
>     # and the Arrow C++ API
>     cdef shared_ptr[CArray] arr = pyarrow_unwrap_array(obj)
>     if arr.get() == NULL:
>         raise TypeError("not an array")
>     cdef arr_len =  arr.get().length()
>     cdef int i
>     cdef CResult[shared_ptr[CScalar]] r
>     for i in range(arr_len):
>         r = arr.get().GetScalar(i)
>         if r.ok():
>             print(i, r.ValueOrDie())
>
> And produces an error on compilation:
>
> Error compiling Cython file:
> ------------------------------------------------------------
> ...
>     cdef int i
>     cdef CResult[shared_ptr[CScalar]] r
>     for i in range(arr_len):
>         r = arr.get().GetScalar(i)
>         if r.ok():
>             print(i, r.ValueOrDie())
>                      ^
> ------------------------------------------------------------
>
> example.pyx:26:22: Object of type 'CResult[shared_ptr[CScalar]]' has no
> attribute 'ValueOrDie'
> Traceback (most recent call last):
>   File "/home/ubuntu/repos/LbdInternal/PyarrowCython/setup.py", line 12,
> in <module>
>     ext_modules = cythonize("example.pyx")
>   File
> "/home/ubuntu/miniconda3/envs/lbdenv/lib/python3.10/site-packages/Cython/Build/Dependencies.py",
> line 1127, in cythonize
>     cythonize_one(*args)
>   File
> "/home/ubuntu/miniconda3/envs/lbdenv/lib/python3.10/site-packages/Cython/Build/Dependencies.py",
> line 1250, in cythonize_one
>     raise CompileError(None, pyx_file)
> Cython.Compiler.Errors.CompileError: example.pyx
>
> Environment is as follows:
>
> Ubuntu 20.04/x86
> Python 3.10.4
> cython 0.29.30
> pyarrow 8.0.0
>
> Any help would be appreciated.
>
> Thanks,
> Cedric
>
>

-- 
Niranda Perera
https://niranda.dev/
@n1r44 <https://twitter.com/N1R44>