numpy/numpy-dtypes

Python 3.10 support?

astrojuanlu opened this issue · 1 comments

Hi! Not sure what's the status of this repository, but I'm trying to install it in a Python 3.10 environment, without success. This is the error I see:

$ pip install "numpy==1.21.4"
Collecting numpy==1.21.4
  Using cached numpy-1.21.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB)
Installing collected packages: numpy
Successfully installed numpy-1.21.4
$ pip install git+https://github.com/numpy/numpy-dtypes.git
Collecting git+https://github.com/numpy/numpy-dtypes.git
  Cloning https://github.com/numpy/numpy-dtypes.git to /tmp/pip-req-build-5qobkhf3
  Running command git clone --filter=blob:none -q https://github.com/numpy/numpy-dtypes.git /tmp/pip-req-build-5qobkhf3
  Resolved https://github.com/numpy/numpy-dtypes.git to commit 3ae1e733814c9a3d4f5dc6464c1f0d3714f5e96c
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Using legacy 'setup.py install' for npytypes, since package 'wheel' is not installed.
Installing collected packages: npytypes
    Running setup.py install for npytypes: started
    Running setup.py install for npytypes: finished with status 'error'
    ERROR: Command errored out with exit status 1:
     command: /home/juanlu/Projects/Other/fastunits/.venv310/bin/python3.10 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-5qobkhf3/setup.py'"'"'; __file__='"'"'/tmp/pip-req-build-5qobkhf3/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-b0r7l0f6/install-record.txt --single-version-externally-managed --compile --install-headers /home/juanlu/Projects/Other/fastunits/.venv310/include/site/python3.10/npytypes
         cwd: /tmp/pip-req-build-5qobkhf3/
    Complete output (943 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.10
    creating build/lib.linux-x86_64-3.10/npytypes
    copying npytypes/__init__.py -> build/lib.linux-x86_64-3.10/npytypes
    creating build/lib.linux-x86_64-3.10/npytypes/quaternion
    copying npytypes/quaternion/__init__.py -> build/lib.linux-x86_64-3.10/npytypes/quaternion
    copying npytypes/quaternion/info.py -> build/lib.linux-x86_64-3.10/npytypes/quaternion
    creating build/lib.linux-x86_64-3.10/npytypes/rational
    copying npytypes/rational/__init__.py -> build/lib.linux-x86_64-3.10/npytypes/rational
    copying npytypes/rational/info.py -> build/lib.linux-x86_64-3.10/npytypes/rational
    copying npytypes/rational/test_rational.py -> build/lib.linux-x86_64-3.10/npytypes/rational
    running build_ext
    building 'npytypes.rational.rational' extension
    creating build/temp.linux-x86_64-3.10
    creating build/temp.linux-x86_64-3.10/npytypes
    creating build/temp.linux-x86_64-3.10/npytypes/rational
    x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/home/juanlu/Projects/Other/fastunits/.venv310/lib/python3.10/site-packages/numpy/core/include -I/home/juanlu/Projects/Other/fastunits/.venv310/include -I/usr/include/python3.10 -c npytypes/rational/rational.c -o build/temp.linux-x86_64-3.10/npytypes/rational/rational.o
    npytypes/rational/rational.c:592:5: warning: initialization of ‘int (*)(PyObject *)’ {aka ‘int (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} [-Wincompatible-pointer-types]
      592 |     pyrational_absolute,     /* nb_absolute */
          |     ^~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:592:5: note: (near initialization for ‘pyrational_as_number.nb_bool’)
    npytypes/rational/rational.c:593:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *)’ {aka ‘int (*)(struct _object *)’} [-Wincompatible-pointer-types]
      593 |     pyrational_nonzero,      /* nb_nonzero */
          |     ^~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:593:5: note: (near initialization for ‘pyrational_as_number.nb_invert’)
    npytypes/rational/rational.c:602:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} [-Wincompatible-pointer-types]
      602 |     pyrational_int,          /* nb_long */
          |     ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:602:5: note: (near initialization for ‘pyrational_as_number.nb_inplace_add’)
    npytypes/rational/rational.c:603:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} [-Wincompatible-pointer-types]
      603 |     pyrational_float,        /* nb_float */
          |     ^~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:603:5: note: (near initialization for ‘pyrational_as_number.nb_inplace_subtract’)
    npytypes/rational/rational.c:621:5: warning: excess elements in struct initializer
      621 |     0,                       /* nb_inplace_floor_divide */
          |     ^
    npytypes/rational/rational.c:621:5: note: (near initialization for ‘pyrational_as_number’)
    npytypes/rational/rational.c:622:5: warning: excess elements in struct initializer
      622 |     0,                       /* nb_inplace_true_divide */
          |     ^
    npytypes/rational/rational.c:622:5: note: (near initialization for ‘pyrational_as_number’)
    npytypes/rational/rational.c:623:5: warning: excess elements in struct initializer
      623 |     0,                       /* nb_index */
          |     ^
    npytypes/rational/rational.c:623:5: note: (near initialization for ‘pyrational_as_number’)
    npytypes/rational/rational.c:938:53: warning: initialization of ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} from incompatible pointer type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’} [-Wincompatible-pointer-types]
      938 | PyUFuncGenericFunction rational_ufunc_true_divide = rational_ufunc_divide;
          |                                                     ^~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c: In function ‘PyInit_rational’:
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1157:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1157 |     REGISTER_UFUNC_BINARY_RATIONAL(add)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1157:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1157 |     REGISTER_UFUNC_BINARY_RATIONAL(add)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1158:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1158 |     REGISTER_UFUNC_BINARY_RATIONAL(subtract)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1158:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1158 |     REGISTER_UFUNC_BINARY_RATIONAL(subtract)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1159:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1159 |     REGISTER_UFUNC_BINARY_RATIONAL(multiply)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1159:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1159 |     REGISTER_UFUNC_BINARY_RATIONAL(multiply)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1160:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1160 |     REGISTER_UFUNC_BINARY_RATIONAL(divide)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1160:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1160 |     REGISTER_UFUNC_BINARY_RATIONAL(divide)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1161:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1161 |     REGISTER_UFUNC_BINARY_RATIONAL(remainder)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1161:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1161 |     REGISTER_UFUNC_BINARY_RATIONAL(remainder)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1163:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1163 |     REGISTER_UFUNC_BINARY_RATIONAL(floor_divide)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1163:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1163 |     REGISTER_UFUNC_BINARY_RATIONAL(floor_divide)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1164:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1164 |     REGISTER_UFUNC_BINARY_RATIONAL(minimum)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1164:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1164 |     REGISTER_UFUNC_BINARY_RATIONAL(minimum)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1165:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1165 |     REGISTER_UFUNC_BINARY_RATIONAL(maximum)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1153:50: note: in expansion of macro ‘REGISTER_UFUNC’
     1153 |     #define REGISTER_UFUNC_BINARY_RATIONAL(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,npy_rational})
          |                                                  ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1165:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_RATIONAL’
     1165 |     REGISTER_UFUNC_BINARY_RATIONAL(maximum)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1167:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1167 |     REGISTER_UFUNC_BINARY_COMPARE(equal)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1167:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1167 |     REGISTER_UFUNC_BINARY_COMPARE(equal)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1168:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1168 |     REGISTER_UFUNC_BINARY_COMPARE(not_equal)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1168:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1168 |     REGISTER_UFUNC_BINARY_COMPARE(not_equal)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1169:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1169 |     REGISTER_UFUNC_BINARY_COMPARE(less)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1169:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1169 |     REGISTER_UFUNC_BINARY_COMPARE(less)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1170:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1170 |     REGISTER_UFUNC_BINARY_COMPARE(greater)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1170:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1170 |     REGISTER_UFUNC_BINARY_COMPARE(greater)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1171:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1171 |     REGISTER_UFUNC_BINARY_COMPARE(less_equal)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1171:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1171 |     REGISTER_UFUNC_BINARY_COMPARE(less_equal)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1172:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1172 |     REGISTER_UFUNC_BINARY_COMPARE(greater_equal)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1154:49: note: in expansion of macro ‘REGISTER_UFUNC’
     1154 |     #define REGISTER_UFUNC_BINARY_COMPARE(name) REGISTER_UFUNC(name,{npy_rational,npy_rational,NPY_BOOL})
          |                                                 ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1172:5: note: in expansion of macro ‘REGISTER_UFUNC_BINARY_COMPARE’
     1172 |     REGISTER_UFUNC_BINARY_COMPARE(greater_equal)
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1174:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1174 |     REGISTER_UFUNC_UNARY(negative)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1174:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1174 |     REGISTER_UFUNC_UNARY(negative)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1175:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1175 |     REGISTER_UFUNC_UNARY(absolute)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1175:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1175 |     REGISTER_UFUNC_UNARY(absolute)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1176:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1176 |     REGISTER_UFUNC_UNARY(floor)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1176:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1176 |     REGISTER_UFUNC_UNARY(floor)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1177:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1177 |     REGISTER_UFUNC_UNARY(ceil)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1177:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1177 |     REGISTER_UFUNC_UNARY(ceil)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1178:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1178 |     REGISTER_UFUNC_UNARY(trunc)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1178:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1178 |     REGISTER_UFUNC_UNARY(trunc)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1179:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1179 |     REGISTER_UFUNC_UNARY(rint)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1179:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1179 |     REGISTER_UFUNC_UNARY(rint)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1180:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1180 |     REGISTER_UFUNC_UNARY(square)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1180:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1180 |     REGISTER_UFUNC_UNARY(square)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1181:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1181 |     REGISTER_UFUNC_UNARY(reciprocal)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1181:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1181 |     REGISTER_UFUNC_UNARY(reciprocal)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1182:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1182 |     REGISTER_UFUNC_UNARY(sign)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1149:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1149 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,_types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1155:40: note: in expansion of macro ‘REGISTER_UFUNC’
     1155 |     #define REGISTER_UFUNC_UNARY(name) REGISTER_UFUNC(name,{npy_rational,npy_rational})
          |                                        ^~~~~~~~~~~~~~
    npytypes/rational/rational.c:1182:5: note: in expansion of macro ‘REGISTER_UFUNC_UNARY’
     1182 |     REGISTER_UFUNC_UNARY(sign)
          |     ^~~~~~~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1205:73: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1205 |     if (PyUFunc_RegisterLoopForType((PyUFuncObject*)gufunc,npy_rational,rational_gufunc_matrix_multiply,types2,0) < 0) {
          |                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          |                                                                         |
          |                                                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1205:73: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
    npytypes/rational/rational.c:1217:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1217 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1222:5: note: in expansion of macro ‘NEW_UNARY_UFUNC’
     1222 |     NEW_UNARY_UFUNC(numerator,NPY_INT64,"rational number numerator");
          |     ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1217:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1217 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1222:5: note: in expansion of macro ‘NEW_UNARY_UFUNC’
     1222 |     NEW_UNARY_UFUNC(numerator,NPY_INT64,"rational number numerator");
          |     ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1217:76: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
     1217 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
          |                                                                            |
          |                                                                            void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/rational/rational.c:1223:5: note: in expansion of macro ‘NEW_UNARY_UFUNC’
     1223 |     NEW_UNARY_UFUNC(denominator,NPY_INT64,"rational number denominator");
          |     ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1217:76: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
     1217 |         if (PyUFunc_RegisterLoopForType((PyUFuncObject*)ufunc,npy_rational,rational_ufunc_##name,types,0)<0) { \
          |                                                                            ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1223:5: note: in expansion of macro ‘NEW_UNARY_UFUNC’
     1223 |     NEW_UNARY_UFUNC(denominator,NPY_INT64,"rational number denominator");
          |     ^~~~~~~~~~~~~~~
    npytypes/rational/rational.c:1236:19: warning: initialization of ‘void (*)(char **, const npy_intp *, const npy_intp *, void *)’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} from incompatible pointer type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’} [-Wincompatible-pointer-types]
     1236 |     GCD_LCM_UFUNC(gcd,NPY_INT64,"greatest common denominator of two integers");
          |                   ^~~
    npytypes/rational/rational.c:1227:56: note: in definition of macro ‘GCD_LCM_UFUNC’
     1227 |         static const PyUFuncGenericFunction func[1] = {name##_ufunc}; \
          |                                                        ^~~~
    npytypes/rational/rational.c:1236:19: note: (near initialization for ‘func[0]’)
     1236 |     GCD_LCM_UFUNC(gcd,NPY_INT64,"greatest common denominator of two integers");
          |                   ^~~
    npytypes/rational/rational.c:1227:56: note: in definition of macro ‘GCD_LCM_UFUNC’
     1227 |         static const PyUFuncGenericFunction func[1] = {name##_ufunc}; \
          |                                                        ^~~~
    npytypes/rational/rational.c:1237:19: warning: initialization of ‘void (*)(char **, const npy_intp *, const npy_intp *, void *)’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} from incompatible pointer type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’} [-Wincompatible-pointer-types]
     1237 |     GCD_LCM_UFUNC(lcm,NPY_INT64,"least common multiple of two integers");
          |                   ^~~
    npytypes/rational/rational.c:1227:56: note: in definition of macro ‘GCD_LCM_UFUNC’
     1227 |         static const PyUFuncGenericFunction func[1] = {name##_ufunc}; \
          |                                                        ^~~~
    npytypes/rational/rational.c:1237:19: note: (near initialization for ‘func[0]’)
     1237 |     GCD_LCM_UFUNC(lcm,NPY_INT64,"least common multiple of two integers");
          |                   ^~~
    npytypes/rational/rational.c:1227:56: note: in definition of macro ‘GCD_LCM_UFUNC’
     1227 |         static const PyUFuncGenericFunction func[1] = {name##_ufunc}; \
          |                                                        ^~~~
    x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.10/npytypes/rational/rational.o -o build/lib.linux-x86_64-3.10/npytypes/rational/rational.cpython-310-x86_64-linux-gnu.so
    building 'npytypes.quaternion.numpy_quaternion' extension
    creating build/temp.linux-x86_64-3.10/npytypes/quaternion
    x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/home/juanlu/Projects/Other/fastunits/.venv310/lib/python3.10/site-packages/numpy/core/include -I/home/juanlu/Projects/Other/fastunits/.venv310/include -I/usr/include/python3.10 -c npytypes/quaternion/numpy_quaternion.c -o build/temp.linux-x86_64-3.10/npytypes/quaternion/numpy_quaternion.o -std=c99
    npytypes/quaternion/numpy_quaternion.c: In function ‘quaternion_arrtype_hash’:
    npytypes/quaternion/numpy_quaternion.c:411:50: error: incompatible type for argument 1 of ‘_Py_HashDouble’
      411 |     value = (10000004 * value) ^ _Py_HashDouble(q.w);
          |                                                 ~^~
          |                                                  |
          |                                                  double
    In file included from /usr/include/python3.10/Python.h:77,
                     from npytypes/quaternion/numpy_quaternion.c:32:
    /usr/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’
       10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double);
          |                                      ^~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:411:34: error: too few arguments to function ‘_Py_HashDouble’
      411 |     value = (10000004 * value) ^ _Py_HashDouble(q.w);
          |                                  ^~~~~~~~~~~~~~
    In file included from /usr/include/python3.10/Python.h:77,
                     from npytypes/quaternion/numpy_quaternion.c:32:
    /usr/include/python3.10/pyhash.h:10:23: note: declared here
       10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double);
          |                       ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:412:50: error: incompatible type for argument 1 of ‘_Py_HashDouble’
      412 |     value = (10000004 * value) ^ _Py_HashDouble(q.x);
          |                                                 ~^~
          |                                                  |
          |                                                  double
    In file included from /usr/include/python3.10/Python.h:77,
                     from npytypes/quaternion/numpy_quaternion.c:32:
    /usr/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’
       10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double);
          |                                      ^~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:412:34: error: too few arguments to function ‘_Py_HashDouble’
      412 |     value = (10000004 * value) ^ _Py_HashDouble(q.x);
          |                                  ^~~~~~~~~~~~~~
    In file included from /usr/include/python3.10/Python.h:77,
                     from npytypes/quaternion/numpy_quaternion.c:32:
    /usr/include/python3.10/pyhash.h:10:23: note: declared here
       10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double);
          |                       ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:413:50: error: incompatible type for argument 1 of ‘_Py_HashDouble’
      413 |     value = (10000004 * value) ^ _Py_HashDouble(q.y);
          |                                                 ~^~
          |                                                  |
          |                                                  double
    In file included from /usr/include/python3.10/Python.h:77,
                     from npytypes/quaternion/numpy_quaternion.c:32:
    /usr/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’
       10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double);
          |                                      ^~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:413:34: error: too few arguments to function ‘_Py_HashDouble’
      413 |     value = (10000004 * value) ^ _Py_HashDouble(q.y);
          |                                  ^~~~~~~~~~~~~~
    In file included from /usr/include/python3.10/Python.h:77,
                     from npytypes/quaternion/numpy_quaternion.c:32:
    /usr/include/python3.10/pyhash.h:10:23: note: declared here
       10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double);
          |                       ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:414:50: error: incompatible type for argument 1 of ‘_Py_HashDouble’
      414 |     value = (10000004 * value) ^ _Py_HashDouble(q.z);
          |                                                 ~^~
          |                                                  |
          |                                                  double
    In file included from /usr/include/python3.10/Python.h:77,
                     from npytypes/quaternion/numpy_quaternion.c:32:
    /usr/include/python3.10/pyhash.h:10:38: note: expected ‘PyObject *’ {aka ‘struct _object *’} but argument is of type ‘double’
       10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double);
          |                                      ^~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:414:34: error: too few arguments to function ‘_Py_HashDouble’
      414 |     value = (10000004 * value) ^ _Py_HashDouble(q.z);
          |                                  ^~~~~~~~~~~~~~
    In file included from /usr/include/python3.10/Python.h:77,
                     from npytypes/quaternion/numpy_quaternion.c:32:
    /usr/include/python3.10/pyhash.h:10:23: note: declared here
       10 | PyAPI_FUNC(Py_hash_t) _Py_HashDouble(PyObject *, double);
          |                       ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c: In function ‘PyInit_numpy_quaternion’:
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:615:5: note: in expansion of macro ‘REGISTER_UFUNC’
      615 |     REGISTER_UFUNC(isnan);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:615:5: note: in expansion of macro ‘REGISTER_UFUNC’
      615 |     REGISTER_UFUNC(isnan);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:616:5: note: in expansion of macro ‘REGISTER_UFUNC’
      616 |     REGISTER_UFUNC(isinf);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:616:5: note: in expansion of macro ‘REGISTER_UFUNC’
      616 |     REGISTER_UFUNC(isinf);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:617:5: note: in expansion of macro ‘REGISTER_UFUNC’
      617 |     REGISTER_UFUNC(isfinite);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:617:5: note: in expansion of macro ‘REGISTER_UFUNC’
      617 |     REGISTER_UFUNC(isfinite);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:621:5: note: in expansion of macro ‘REGISTER_UFUNC’
      621 |     REGISTER_UFUNC(absolute);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:621:5: note: in expansion of macro ‘REGISTER_UFUNC’
      621 |     REGISTER_UFUNC(absolute);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:626:5: note: in expansion of macro ‘REGISTER_UFUNC’
      626 |     REGISTER_UFUNC(log);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:626:5: note: in expansion of macro ‘REGISTER_UFUNC’
      626 |     REGISTER_UFUNC(log);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:627:5: note: in expansion of macro ‘REGISTER_UFUNC’
      627 |     REGISTER_UFUNC(exp);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:627:5: note: in expansion of macro ‘REGISTER_UFUNC’
      627 |     REGISTER_UFUNC(exp);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:628:5: note: in expansion of macro ‘REGISTER_UFUNC’
      628 |     REGISTER_UFUNC(negative);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:628:5: note: in expansion of macro ‘REGISTER_UFUNC’
      628 |     REGISTER_UFUNC(negative);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:629:5: note: in expansion of macro ‘REGISTER_UFUNC’
      629 |     REGISTER_UFUNC(conjugate);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:629:5: note: in expansion of macro ‘REGISTER_UFUNC’
      629 |     REGISTER_UFUNC(conjugate);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:635:5: note: in expansion of macro ‘REGISTER_UFUNC’
      635 |     REGISTER_UFUNC(equal);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:635:5: note: in expansion of macro ‘REGISTER_UFUNC’
      635 |     REGISTER_UFUNC(equal);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:636:5: note: in expansion of macro ‘REGISTER_UFUNC’
      636 |     REGISTER_UFUNC(not_equal);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:636:5: note: in expansion of macro ‘REGISTER_UFUNC’
      636 |     REGISTER_UFUNC(not_equal);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:637:5: note: in expansion of macro ‘REGISTER_UFUNC’
      637 |     REGISTER_UFUNC(less);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:637:5: note: in expansion of macro ‘REGISTER_UFUNC’
      637 |     REGISTER_UFUNC(less);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:638:5: note: in expansion of macro ‘REGISTER_UFUNC’
      638 |     REGISTER_UFUNC(less_equal);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:638:5: note: in expansion of macro ‘REGISTER_UFUNC’
      638 |     REGISTER_UFUNC(less_equal);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:609:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      609 |             quaternion_descr->type_num, quaternion_##name##_scalar_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:645:5: note: in expansion of macro ‘REGISTER_SCALAR_UFUNC’
      645 |     REGISTER_SCALAR_UFUNC(multiply);
          |     ^~~~~~~~~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:609:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      609 |             quaternion_descr->type_num, quaternion_##name##_scalar_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:645:5: note: in expansion of macro ‘REGISTER_SCALAR_UFUNC’
      645 |     REGISTER_SCALAR_UFUNC(multiply);
          |     ^~~~~~~~~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:609:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      609 |             quaternion_descr->type_num, quaternion_##name##_scalar_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:646:5: note: in expansion of macro ‘REGISTER_SCALAR_UFUNC’
      646 |     REGISTER_SCALAR_UFUNC(divide);
          |     ^~~~~~~~~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:609:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      609 |             quaternion_descr->type_num, quaternion_##name##_scalar_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:646:5: note: in expansion of macro ‘REGISTER_SCALAR_UFUNC’
      646 |     REGISTER_SCALAR_UFUNC(divide);
          |     ^~~~~~~~~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:609:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      609 |             quaternion_descr->type_num, quaternion_##name##_scalar_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:647:5: note: in expansion of macro ‘REGISTER_SCALAR_UFUNC’
      647 |     REGISTER_SCALAR_UFUNC(power);
          |     ^~~~~~~~~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:609:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      609 |             quaternion_descr->type_num, quaternion_##name##_scalar_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:647:5: note: in expansion of macro ‘REGISTER_SCALAR_UFUNC’
      647 |     REGISTER_SCALAR_UFUNC(power);
          |     ^~~~~~~~~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:653:5: note: in expansion of macro ‘REGISTER_UFUNC’
      653 |     REGISTER_UFUNC(add);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:653:5: note: in expansion of macro ‘REGISTER_UFUNC’
      653 |     REGISTER_UFUNC(add);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:654:5: note: in expansion of macro ‘REGISTER_UFUNC’
      654 |     REGISTER_UFUNC(subtract);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:654:5: note: in expansion of macro ‘REGISTER_UFUNC’
      654 |     REGISTER_UFUNC(subtract);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:655:5: note: in expansion of macro ‘REGISTER_UFUNC’
      655 |     REGISTER_UFUNC(multiply);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:655:5: note: in expansion of macro ‘REGISTER_UFUNC’
      655 |     REGISTER_UFUNC(multiply);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:656:5: note: in expansion of macro ‘REGISTER_UFUNC’
      656 |     REGISTER_UFUNC(divide);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:656:5: note: in expansion of macro ‘REGISTER_UFUNC’
      656 |     REGISTER_UFUNC(divide);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:657:5: note: in expansion of macro ‘REGISTER_UFUNC’
      657 |     REGISTER_UFUNC(power);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:657:5: note: in expansion of macro ‘REGISTER_UFUNC’
      657 |     REGISTER_UFUNC(power);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: warning: passing argument 3 of ‘(int (*)(PyUFuncObject *, int,  void (*)(char **, const npy_intp *, const npy_intp *, void *), const int *, void *))*(PyUFunc_API + 16)’ from incompatible pointer type [-Wincompatible-pointer-types]
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
          |                                         |
          |                                         void (*)(char **, npy_intp *, npy_intp *, void *) {aka void (*)(char **, long int *, long int *, void *)}
    npytypes/quaternion/numpy_quaternion.c:658:5: note: in expansion of macro ‘REGISTER_UFUNC’
      658 |     REGISTER_UFUNC(copysign);
          |     ^~~~~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:605:41: note: expected ‘PyUFuncGenericFunction’ {aka ‘void (*)(char **, const long int *, const long int *, void *)’} but argument is of type ‘void (*)(char **, npy_intp *, npy_intp *, void *)’ {aka ‘void (*)(char **, long int *, long int *, void *)’}
      605 |             quaternion_descr->type_num, quaternion_##name##_ufunc, arg_types, NULL)
          |                                         ^~~~~~~~~~~
    npytypes/quaternion/numpy_quaternion.c:658:5: note: in expansion of macro ‘REGISTER_UFUNC’
      658 |     REGISTER_UFUNC(copysign);
          |     ^~~~~~~~~~~~~~
    error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /home/juanlu/Projects/Other/fastunits/.venv310/bin/python3.10 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-5qobkhf3/setup.py'"'"'; __file__='"'"'/tmp/pip-req-build-5qobkhf3/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-b0r7l0f6/install-record.txt --single-version-externally-managed --compile --install-headers /home/juanlu/Projects/Other/fastunits/.venv310/include/site/python3.10/npytypes Check the logs for full command output.

I am going to archive this repository. We have new-style DTypes and this has been inactive for many years. At this point development from the NumPy side should go towards new ones.

(There will be a new repository to start examples using the new DType API.)