Re: PyArrow on PyPy: PyDateTime_CAPI question (getting cpyext to work) in c++

Matti Picus <[email protected]>
Newsgroups gmane.comp.python.pypy
Message-ID <[email protected]>
Thse changes seems to compile for me, but I did not run the tests.

https://gist.github.com/mattip/c9c8398b58721ae5893dc8134c353f28

Matti


On 9/11/20 1:01 PM, Niklas B wrote:
> The PyMemoryView_GetContiguous errors are all gone - good work!
>
> It didn’t really like my butchering of datetime.cc 
> <http://datetime.cc> 
> https://github.com/apache/arrow/blob/apache-arrow-1.0.1/cpp/src/arrow/python/datetime.cc#L37
>
> Added:
> #include <datetime.h>
>
> And
> PyDateTime_IMPORT
>
>
>
> Then changed:
> datetime_api =
>
> 	reinterpret_cast<PyDateTime_CAPI*>(PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0));
>
>
> To:
>
>   datetime_api = PyDateTimeAPI;
>
> They do some PyDateTimeAPI voodoo at 
> https://github.com/apache/arrow/blob/apache-arrow-1.0.1/cpp/src/arrow/python/datetime.h#L29 which 
> might be a culprit as well.
>
>
>
>
>
>
>
>
>
> Gives the following outputs:
> /arrow/cpp/src/arrow/python/datetime.h:34: warning: "PyDateTimeAPI" 
> redefined
>  #define PyDateTimeAPI ::arrow::py::internal::datetime_api
>
> In file included from /opt/pypy/include/Python.h:144,
>                  from /arrow/cpp/src/arrow/python/platform.h:23,
>                  from /arrow/cpp/src/arrow/python/pyarrow.h:20,
>                  from /arrow/cpp/src/arrow/python/common.h:24,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:24 
> <http://datetime.cc:24>:
> /opt/pypy/include/pypy_decl.h:1121: note: this is the location of the 
> previous definition
>  #define PyDateTimeAPI PyPyDateTimeAPI
>
> In file included from /opt/pypy/include/datetime.h:7,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:22 
> <http://datetime.cc:22>:
> /opt/pypy/include/cpyext_datetime.h:4:5: error: ‘PyTypeObject’ does 
> not name a type; did you mean ‘PyType_Check’?
>      PyTypeObject *DateType;
>      ^~~~~~~~~~~~
>      PyType_Check
> /opt/pypy/include/cpyext_datetime.h:5:5: error: ‘PyTypeObject’ does 
> not name a type; did you mean ‘PyType_Check’?
>      PyTypeObject *DateTimeType;
>      ^~~~~~~~~~~~
>      PyType_Check
> /opt/pypy/include/cpyext_datetime.h:6:5: error: ‘PyTypeObject’ does 
> not name a type; did you mean ‘PyType_Check’?
>      PyTypeObject *TimeType;
>      ^~~~~~~~~~~~
>      PyType_Check
> /opt/pypy/include/cpyext_datetime.h:7:5: error: ‘PyTypeObject’ does 
> not name a type; did you mean ‘PyType_Check’?
>      PyTypeObject *DeltaType;
>      ^~~~~~~~~~~~
>      PyType_Check
> /opt/pypy/include/cpyext_datetime.h:8:5: error: ‘PyTypeObject’ does 
> not name a type; did you mean ‘PyType_Check’?
>      PyTypeObject *TZInfoType;
>      ^~~~~~~~~~~~
>      PyType_Check
> /opt/pypy/include/cpyext_datetime.h:11:5: error: ‘PyObject’ does not 
> name a type; did you mean ‘PyObject_New’?
>      PyObject *(*Date_FromDate)(int, int, int, PyTypeObject*);
>      ^~~~~~~~
>      PyObject_New
> /opt/pypy/include/cpyext_datetime.h:12:5: error: ‘PyObject’ does not 
> name a type; did you mean ‘PyObject_New’?
>      PyObject *(*DateTime_FromDateAndTime)(int, int, int, int, int, 
> int, int,
>      ^~~~~~~~
>      PyObject_New
> /opt/pypy/include/cpyext_datetime.h:14:5: error: ‘PyObject’ does not 
> name a type; did you mean ‘PyObject_New’?
>      PyObject *(*Time_FromTime)(int, int, int, int, PyObject*, 
> PyTypeObject*);
>      ^~~~~~~~
>      PyObject_New
> /opt/pypy/include/cpyext_datetime.h:15:5: error: ‘PyObject’ does not 
> name a type; did you mean ‘PyObject_New’?
>      PyObject *(*Delta_FromDelta)(int, int, int, int, PyTypeObject*);
>      ^~~~~~~~
>      PyObject_New
> /opt/pypy/include/cpyext_datetime.h:18:5: error: ‘PyObject’ does not 
> name a type; did you mean ‘PyObject_New’?
>      PyObject *(*DateTime_FromTimestamp)(PyObject*, PyObject*, PyObject*);
>      ^~~~~~~~
>      PyObject_New
> /opt/pypy/include/cpyext_datetime.h:19:5: error: ‘PyObject’ does not 
> name a type; did you mean ‘PyObject_New’?
>      PyObject *(*Date_FromTimestamp)(PyObject*, PyObject*);
>      ^~~~~~~~
>      PyObject_New
> /opt/pypy/include/cpyext_datetime.h:24:5: error: ‘PyObject_HEAD’ does 
> not name a type
>      PyObject_HEAD
>      ^~~~~~~~~~~~~
> /opt/pypy/include/cpyext_datetime.h:24:5: note: the macro 
> ‘PyObject_HEAD’ had not yet been defined
> In file included from /opt/pypy/include/object.h:10,
>                  from /opt/pypy/include/Python.h:79,
>                  from /arrow/cpp/src/arrow/python/platform.h:23,
>                  from /arrow/cpp/src/arrow/python/pyarrow.h:20,
>                  from /arrow/cpp/src/arrow/python/common.h:24,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:24 
> <http://datetime.cc:24>:
> /opt/pypy/include/cpyext_object.h:5: note: it was later defined here
>  #define PyObject_HEAD  \
>
> In file included from /opt/pypy/include/datetime.h:7,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:22 
> <http://datetime.cc:22>:
> /opt/pypy/include/cpyext_datetime.h:35:5: error: ‘PyObject_HEAD’ does 
> not name a type
>      PyObject_HEAD
>      ^~~~~~~~~~~~~
> /opt/pypy/include/cpyext_datetime.h:35:5: note: the macro 
> ‘PyObject_HEAD’ had not yet been defined
> In file included from /opt/pypy/include/object.h:10,
>                  from /opt/pypy/include/Python.h:79,
>                  from /arrow/cpp/src/arrow/python/platform.h:23,
>                  from /arrow/cpp/src/arrow/python/pyarrow.h:20,
>                  from /arrow/cpp/src/arrow/python/common.h:24,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:24 
> <http://datetime.cc:24>:
> /opt/pypy/include/cpyext_object.h:5: note: it was later defined here
>  #define PyObject_HEAD  \
>
> In file included from /opt/pypy/include/datetime.h:7,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:22 
> <http://datetime.cc:22>:
> /opt/pypy/include/cpyext_datetime.h:37:5: error: ‘PyObject’ does not 
> name a type; did you mean ‘PyObject_New’?
>      PyObject *tzinfo;
>      ^~~~~~~~
>      PyObject_New
> /opt/pypy/include/cpyext_datetime.h:42:5: error: ‘PyObject_HEAD’ does 
> not name a type
>      PyObject_HEAD
>      ^~~~~~~~~~~~~
> /opt/pypy/include/cpyext_datetime.h:42:5: note: the macro 
> ‘PyObject_HEAD’ had not yet been defined
> In file included from /opt/pypy/include/object.h:10,
>                  from /opt/pypy/include/Python.h:79,
>                  from /arrow/cpp/src/arrow/python/platform.h:23,
>                  from /arrow/cpp/src/arrow/python/pyarrow.h:20,
>                  from /arrow/cpp/src/arrow/python/common.h:24,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:24 
> <http://datetime.cc:24>:
> /opt/pypy/include/cpyext_object.h:5: note: it was later defined here
>  #define PyObject_HEAD  \
>
> In file included from /opt/pypy/include/datetime.h:7,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:22 
> <http://datetime.cc:22>:
> /opt/pypy/include/cpyext_datetime.h:44:5: error: ‘PyObject’ does not 
> name a type; did you mean ‘PyObject_New’?
>      PyObject *tzinfo;
>      ^~~~~~~~
>      PyObject_New
> /opt/pypy/include/cpyext_datetime.h:49:5: error: ‘PyObject_HEAD’ does 
> not name a type
>      PyObject_HEAD
>      ^~~~~~~~~~~~~
> /opt/pypy/include/cpyext_datetime.h:49:5: note: the macro 
> ‘PyObject_HEAD’ had not yet been defined
> In file included from /opt/pypy/include/object.h:10,
>                  from /opt/pypy/include/Python.h:79,
>                  from /arrow/cpp/src/arrow/python/platform.h:23,
>                  from /arrow/cpp/src/arrow/python/pyarrow.h:20,
>                  from /arrow/cpp/src/arrow/python/common.h:24,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:24 
> <http://datetime.cc:24>:
> /opt/pypy/include/cpyext_object.h:5: note: it was later defined here
>  #define PyObject_HEAD  \
>
> In file included from /opt/pypy/include/datetime.h:7,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:22 
> <http://datetime.cc:22>:
> /opt/pypy/include/cpyext_datetime.h:54:5: error: ‘PyObject_HEAD’ does 
> not name a type
>      PyObject_HEAD
>      ^~~~~~~~~~~~~
> /opt/pypy/include/cpyext_datetime.h:54:5: note: the macro 
> ‘PyObject_HEAD’ had not yet been defined
> In file included from /opt/pypy/include/object.h:10,
>                  from /opt/pypy/include/Python.h:79,
>                  from /arrow/cpp/src/arrow/python/platform.h:23,
>                  from /arrow/cpp/src/arrow/python/pyarrow.h:20,
>                  from /arrow/cpp/src/arrow/python/common.h:24,
>                  from /arrow/cpp/src/arrow/python/datetime.cc:24 
> <http://datetime.cc:24>:
> /opt/pypy/include/cpyext_object.h:5: note: it was later defined here
>  #define PyObject_HEAD  \
>
> In file included from /arrow/cpp/src/arrow/python/datetime.cc:22 
> <http://datetime.cc:22>:
> /opt/pypy/include/datetime.h:9:30: error: expected constructor, 
> destructor, or type conversion before ‘PyDateTimeAPI’
>  PyAPI_DATA(PyDateTime_CAPI*) PyDateTimeAPI;
>                               ^~~~~~~~~~~~~
> /arrow/cpp/src/arrow/python/datetime.cc:37 <http://datetime.cc:37>:1: 
> error: expected ‘)’ before ‘=’ token
>  PyDateTime_IMPORT
>  ^~~~~~~~~~~~~~~~~
> /arrow/cpp/src/arrow/python/datetime.cc <http://datetime.cc>: In 
> function ‘arrow::Status arrow::py::internal::PyTime_from_int(int64_t, 
> arrow::TimeUnit::type, PyObject**)’:
> /arrow/cpp/src/arrow/python/datetime.cc:237 
> <http://datetime.cc:237>:10: error: ‘struct PyDateTime_CAPI’ has no 
> member named ‘Time_FromTime’
>    *out = PyTime_FromTime(static_cast<int32_t>(hour), 
> static_cast<int32_t>(minute),
>           ^~~~~~~~~~~~~~~
> /arrow/cpp/src/arrow/python/datetime.cc:237 
> <http://datetime.cc:237>:10: error: ‘struct PyDateTime_CAPI’ has no 
> member named ‘TimeType’
>    *out = PyTime_FromTime(static_cast<int32_t>(hour), 
> static_cast<int32_t>(minute),
>           ^~~~~~~~~~~~~~~
> /arrow/cpp/src/arrow/python/datetime.cc <http://datetime.cc>: In 
> function ‘arrow::Status arrow::py::internal::PyDate_from_int(int64_t, 
> arrow::DateUnit, PyObject**)’:
> /arrow/cpp/src/arrow/python/datetime.cc:245 
> <http://datetime.cc:245>:10: error: ‘struct PyDateTime_CAPI’ has no 
> member named ‘Date_FromDate’
>    *out = PyDate_FromDate(static_cast<int32_t>(year), 
> static_cast<int32_t>(month),
>           ^~~~~~~~~~~~~~~
> /arrow/cpp/src/arrow/python/datetime.cc:245 
> <http://datetime.cc:245>:10: error: ‘struct PyDateTime_CAPI’ has no 
> member named ‘DateType’
>    *out = PyDate_FromDate(static_cast<int32_t>(year), 
> static_cast<int32_t>(month),
>           ^~~~~~~~~~~~~~~
> /arrow/cpp/src/arrow/python/datetime.cc <http://datetime.cc>: In 
> function ‘arrow::Status 
> arrow::py::internal::PyDateTime_from_int(int64_t, 
> arrow::TimeUnit::type, PyObject**)’:
> /arrow/cpp/src/arrow/python/datetime.cc:257 
> <http://datetime.cc:257>:10: error: ‘struct PyDateTime_CAPI’ has no 
> member named ‘DateTime_FromDateAndTime’
>    *out = PyDateTime_FromDateAndTime(
>           ^~~~~~~~~~~~~~~~~~~~~~~~~~
> /arrow/cpp/src/arrow/python/datetime.cc:257 
> <http://datetime.cc:257>:10: error: ‘struct PyDateTime_CAPI’ has no 
> member named ‘DateTimeType’
>    *out = PyDateTime_FromDateAndTime(
>           ^~~~~~~~~~~~~~~~~~~~~~~~~~
> make[2]: *** 
> [src/arrow/python/CMakeFiles/arrow_python_objlib.dir/build.make:121: 
> src/arrow/python/CMakeFiles/arrow_python_objlib.dir/datetime.cc.o] Error 1
> make[1]: *** [CMakeFiles/Makefile2:1628: 
> src/arrow/python/CMakeFiles/arrow_python_objlib.dir/all] Error
>
>
>
>> On 10 Sep 2020, at 13:30, Niklas B <[email protected] 
>> <mailto:[email protected]>> wrote:
>>
>> That’s what I figured, cool, I will try it!
>>
>>> On 10 Sep 2020, at 13:28, Matti Picus <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>>
>>>
>>
>
_______________________________________________
pypy-dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.