From 0d3c923d0e65e45dcdea2e078442b26580c9aba3 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Tue, 18 Jan 2022 13:26:08 +0530 Subject: [PATCH 01/18] v0.4.2 --- .github/ISSUE_TEMPLATE/user_story.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/user_story.yaml b/.github/ISSUE_TEMPLATE/user_story.yaml index ab3e87e..659ac6b 100644 --- a/.github/ISSUE_TEMPLATE/user_story.yaml +++ b/.github/ISSUE_TEMPLATE/user_story.yaml @@ -1,7 +1,7 @@ name: User story description: A valuable increment of functionality, testable by the users title: "[User story]: " -labels: ["1: story"] +labels: ["story"] assignees: - octocat body: From 21197d95e96ad0916e2d7f3d83f53bbab93eac14 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Tue, 18 Jan 2022 13:26:31 +0530 Subject: [PATCH 02/18] v0.4.2 --- .github/ISSUE_TEMPLATE/maintenance_request.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/maintenance_request.yaml b/.github/ISSUE_TEMPLATE/maintenance_request.yaml index 69e6460..07edf8f 100644 --- a/.github/ISSUE_TEMPLATE/maintenance_request.yaml +++ b/.github/ISSUE_TEMPLATE/maintenance_request.yaml @@ -1,7 +1,7 @@ name: Maintenance request description: Describe the technical debt or runtime updates title: "[Maintenance]: " -labels: ["1: maintenance"] +labels: ["maintenance"] assignees: - octocat body: From e89827df192836b6610a3fa91dba9b5324bd148e Mon Sep 17 00:00:00 2001 From: Diptesh Date: Tue, 18 Jan 2022 13:26:55 +0530 Subject: [PATCH 03/18] v0.4.2 --- .github/ISSUE_TEMPLATE/feature_request.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index c936b91..0449782 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -1,7 +1,7 @@ name: Feature request description: Request a feature addition title: "[Feature]: " -labels: ["1: feature", "2: tests"] +labels: ["feature", "tests"] assignees: - octocat body: From cb1724397785559658bfcd8cac8071974eec3f67 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Tue, 18 Jan 2022 13:27:14 +0530 Subject: [PATCH 04/18] v0.4.2 --- .github/ISSUE_TEMPLATE/eda_request.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/eda_request.yaml b/.github/ISSUE_TEMPLATE/eda_request.yaml index 563bdf3..3000186 100644 --- a/.github/ISSUE_TEMPLATE/eda_request.yaml +++ b/.github/ISSUE_TEMPLATE/eda_request.yaml @@ -1,7 +1,7 @@ name: EDA request description: Request an EDA request title: "[EDA]: " -labels: ["1: eda"] +labels: ["eda"] assignees: - octocat body: From 8ea63299d5c715c2e07215bfd2f3d596753ef1b1 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Tue, 18 Jan 2022 13:27:39 +0530 Subject: [PATCH 05/18] v0.4.2 --- .github/ISSUE_TEMPLATE/bug_report.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 8515c30..17cb5fd 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -1,7 +1,7 @@ name: Bug Report description: File a bug report title: "[Bug]: " -labels: ["1: bug", "2: tests"] +labels: ["bug", "tests"] assignees: - octocat body: From 229d3e50fa872103f2aef59a5db8c898e44f14cd Mon Sep 17 00:00:00 2001 From: Diptesh Date: Tue, 18 Jan 2022 13:32:20 +0530 Subject: [PATCH 06/18] v0.4.2 --- .github/PULL_REQUEST_TEMPLATE.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 9652cab..10650a1 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -12,6 +12,7 @@ Please select option(s) that are relevant. - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) +- [ ] Maintenance requests - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] This change requires a documentation update From ce7f4a4fbefec4e5e54cb25bd1b8a942600de1a3 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Sun, 11 Feb 2024 20:04:41 +0100 Subject: [PATCH 07/18] v0.4.2 --- bin/metrics/build.sh | 0 .../metrics.cpython-37m-x86_64-linux-gnu.so | Bin 209552 -> 0 bytes .../metrics.cpython-310-x86_64-linux-gnu.so | Bin 0 -> 72056 bytes .../build/temp.linux-x86_64-3.7/metrics.o | Bin 453048 -> 0 bytes .../temp.linux-x86_64-cpython-310/metrics.o | Bin 0 -> 78664 bytes bin/metrics/metrics.c | 6272 +++++++++++++---- bin/metrics/metrics.so | Bin 209552 -> 72056 bytes bin/programs.sh | 0 bin/run_tests.sh | 0 install.sh | 0 logs/cov.out | 20 +- logs/pip.out | 2 +- logs/pylint/lib-model-py.out | 8 +- logs/pylint/tests-test_metrics-py.out | 7 + mllib/lib/cfg.py | 4 +- mllib/lib/cluster.py | 23 +- mllib/lib/metrics.so | Bin 209552 -> 72056 bytes mllib/lib/model.py | 5 +- mllib/lib/opt.py | 4 +- mllib/lib/tree.py | 3 +- mllib/lib/utils.py | 2 +- requirements.txt | 21 +- tests/test_metrics.py | 2 +- tests/test_timeseries.py | 2 +- tests/test_tree.py | 1 + 25 files changed, 5103 insertions(+), 1273 deletions(-) mode change 100644 => 100755 bin/metrics/build.sh delete mode 100644 bin/metrics/build/lib.linux-x86_64-3.7/metrics.cpython-37m-x86_64-linux-gnu.so create mode 100755 bin/metrics/build/lib.linux-x86_64-cpython-310/metrics.cpython-310-x86_64-linux-gnu.so delete mode 100644 bin/metrics/build/temp.linux-x86_64-3.7/metrics.o create mode 100644 bin/metrics/build/temp.linux-x86_64-cpython-310/metrics.o mode change 100644 => 100755 bin/metrics/metrics.so mode change 100644 => 100755 bin/programs.sh mode change 100644 => 100755 bin/run_tests.sh mode change 100644 => 100755 install.sh mode change 100644 => 100755 mllib/lib/metrics.so diff --git a/bin/metrics/build.sh b/bin/metrics/build.sh old mode 100644 new mode 100755 diff --git a/bin/metrics/build/lib.linux-x86_64-3.7/metrics.cpython-37m-x86_64-linux-gnu.so b/bin/metrics/build/lib.linux-x86_64-3.7/metrics.cpython-37m-x86_64-linux-gnu.so deleted file mode 100644 index eaf4b30532107c8e39818496dc34fc8ad97bf7fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209552 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 z 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 diff --git a/bin/metrics/build/lib.linux-x86_64-cpython-310/metrics.cpython-310-x86_64-linux-gnu.so b/bin/metrics/build/lib.linux-x86_64-cpython-310/metrics.cpython-310-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..a09aa5098906ee4886ce047ca7fd35b7ef95f465 GIT binary patch literal 72056 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 literal 0 HcmV?d00001 diff --git a/bin/metrics/build/temp.linux-x86_64-3.7/metrics.o b/bin/metrics/build/temp.linux-x86_64-3.7/metrics.o deleted file mode 100644 index bffd605c549a809a4ab43f87b9ecc568d52133ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453048 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

g?EKQCkr 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

08L$tAK28;XTB01P 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 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" #else -#define CYTHON_ABI "0_29_15" -#define CYTHON_HEX_VERSION 0x001D0FF0 -#define CYTHON_FUTURE_DIVISION 0 +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_6" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x030006F0 +#define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif -#if !defined(WIN32) && !defined(MS_WINDOWS) +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif @@ -46,9 +65,7 @@ END: Cython Metadata */ #endif #define __PYX_COMMA , #ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif + #define HAVE_LONG_LONG #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG @@ -56,12 +73,19 @@ END: Cython Metadata */ #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif -#ifdef PYPY_VERSION - #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 #undef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #if PY_VERSION_HEX < 0x03050000 @@ -86,27 +110,164 @@ END: Cython Metadata */ #define CYTHON_UNPACK_METHODS 0 #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 #undef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 0 #undef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 -#elif defined(PYSTON_VERSION) + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -129,25 +290,29 @@ END: Cython Metadata */ #define CYTHON_FAST_THREAD_STATE 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif #undef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 #else #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 1 #endif #if PY_MAJOR_VERSION < 3 @@ -156,10 +321,7 @@ END: Cython Metadata */ #elif !defined(CYTHON_USE_ASYNC_SLOTS) #define CYTHON_USE_ASYNC_SLOTS 1 #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #ifndef CYTHON_USE_PYLONG_INTERNALS #define CYTHON_USE_PYLONG_INTERNALS 1 #endif #ifndef CYTHON_USE_PYLIST_INTERNALS @@ -168,7 +330,7 @@ END: Cython Metadata */ #ifndef CYTHON_USE_UNICODE_INTERNALS #define CYTHON_USE_UNICODE_INTERNALS 1 #endif - #if PY_VERSION_HEX < 0x030300F0 + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 #elif !defined(CYTHON_USE_UNICODE_WRITER) @@ -186,27 +348,60 @@ END: Cython Metadata */ #ifndef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 1 #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif #ifndef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 1 #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 #endif - #ifndef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) #endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif #undef SHIFT #undef BASE #undef MASK @@ -231,6 +426,17 @@ END: Cython Metadata */ #define CYTHON_RESTRICT #endif #endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) @@ -244,13 +450,16 @@ END: Cython Metadata */ # define CYTHON_UNUSED # endif #endif -#ifndef CYTHON_MAYBE_UNUSED_VAR +#ifndef CYTHON_UNUSED_VAR # if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } + template void CYTHON_UNUSED_VAR( const T& ) { } # else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# define CYTHON_UNUSED_VAR(x) (void)(x) # endif #endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif #ifndef CYTHON_NCP_UNUSED # if CYTHON_COMPILING_IN_CPYTHON # define CYTHON_NCP_UNUSED @@ -258,28 +467,59 @@ END: Cython Metadata */ # define CYTHON_NCP_UNUSED CYTHON_UNUSED # endif #endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif #define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) #ifdef _MSC_VER #ifndef _MSC_STDINT_H_ #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; + typedef unsigned __int32 __pyx_uintptr_t; #endif #endif #else - #include + #include + typedef uintptr_t __pyx_uintptr_t; #endif #ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif #endif #endif #ifndef CYTHON_FALLTHROUGH @@ -289,13 +529,26 @@ END: Cython Metadata */ #define CYTHON_FALLTHROUGH #endif #endif - #if defined(__clang__ ) && defined(__apple_build_version__) + #if defined(__clang__) && defined(__apple_build_version__) #if __apple_build_version__ < 7000000 #undef CYTHON_FALLTHROUGH #define CYTHON_FALLTHROUGH #endif #endif #endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) #ifndef CYTHON_INLINE #if defined(__clang__) @@ -311,26 +564,145 @@ END: Cython Metadata */ #endif #endif -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define Py_OptimizeFlag 0 -#endif #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; // borrowed + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; // we don't yet need to distinguish between versions > 11 + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); // we don't have access to __pyx_empty_bytes here + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif - #define __Pyx_DefaultClassType PyType_Type +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 #endif #ifndef Py_TPFLAGS_CHECKTYPES #define Py_TPFLAGS_CHECKTYPES 0 @@ -344,6 +716,12 @@ END: Cython Metadata */ #ifndef Py_TPFLAGS_HAVE_FINALIZE #define Py_TPFLAGS_HAVE_FINALIZE 0 #endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif #ifndef METH_STACKLESS #define METH_STACKLESS 0 #endif @@ -358,31 +736,81 @@ END: Cython Metadata */ #define __Pyx_PyCFunctionFast _PyCFunctionFast #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords #endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) #else -#define __Pyx_PyFastCFunction_Check(func) 0 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 #endif #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) #define PyObject_Malloc(s) PyMem_Malloc(s) #define PyObject_Free(p) PyMem_Free(p) #define PyObject_Realloc(p) PyMem_Realloc(p) #endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) #else #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) #endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() #elif PY_VERSION_HEX >= 0x03060000 #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() #elif PY_VERSION_HEX >= 0x03000000 @@ -390,6 +818,22 @@ END: Cython Metadata */ #else #define __Pyx_PyThreadState_Current _PyThreadState_Current #endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif #if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) #include "pythread.h" #define Py_tss_NEEDS_INIT 0 @@ -420,7 +864,29 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { return PyThread_get_key_value(*key); } #endif -#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) #define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) #else #define __Pyx_PyDict_NewPresized(n) PyDict_New() @@ -432,23 +898,92 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} #else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) #endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif #else #define CYTHON_PEP393_ENABLED 0 #define PyUnicode_1BYTE_KIND 1 @@ -457,11 +992,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) #endif #if CYTHON_COMPILING_IN_PYPY @@ -472,14 +1007,20 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) #endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif #endif #define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) #define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) @@ -497,8 +1038,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define PyString_Type PyUnicode_Type #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode #define PyObject_Unicode PyObject_Str #endif +#endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) @@ -506,19 +1049,59 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) #endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif #ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) #endif #if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) #else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } #endif #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong @@ -530,6 +1113,9 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject @@ -542,15 +1128,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #if PY_VERSION_HEX < 0x030200A4 typedef long Py_hash_t; #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t #else #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t #endif #if CYTHON_USE_ASYNC_SLOTS #if PY_VERSION_HEX >= 0x030500B1 @@ -570,8 +1151,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { } __Pyx_PyAsyncMethodsStruct; #endif -#if defined(WIN32) || defined(MS_WINDOWS) - #define _USE_MATH_DEFINES +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif #endif #include #ifdef NAN @@ -589,13 +1172,21 @@ static CYTHON_INLINE float __PYX_NAN() { #define __Pyx_truncl truncl #endif - +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } #define __PYX_ERR(f_index, lineno, Ln_error) \ -{ \ - __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \ -} - -#ifndef __PYX_EXTERN_C + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else @@ -655,9 +1246,10 @@ static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { #else #define __Pyx_sst_abs(value) ((value<0) ? -value : value) #endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); #define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize @@ -675,9 +1267,9 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) @@ -685,14 +1277,25 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) #define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { - const Py_UNICODE *u_end = u; +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const wchar_t *u) +{ + const wchar_t *u_end = u; while (*u_end++) ; return (size_t)(u_end - u - 1); } -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#else +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) +{ + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#endif +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) #define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); @@ -703,6 +1306,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); #if CYTHON_ASSUME_SAFE_MACROS #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #else @@ -714,8 +1318,54 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); #else #define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) #endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else // Py < 3.12 + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params(void) { PyObject* sys; @@ -736,7 +1386,7 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { - ascii_chars[c] = c; + ascii_chars[c] = (char) c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); @@ -766,6 +1416,7 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { #else #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include static char* __PYX_DEFAULT_STRING_ENCODING; static int __Pyx_init_sys_getdefaultencoding_params(void) { PyObject* sys; @@ -801,22 +1452,28 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { #endif /* __GNUC__ */ static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } +#if !CYTHON_USE_MODULE_STATE static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; +#endif static int __pyx_lineno; static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; +static const char * __pyx_cfilenm = __FILE__; static const char *__pyx_filename; +/* #### Code section: filename_table ### */ static const char *__pyx_f[] = { "metrics.pyx", }; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ /*--- Type declarations ---*/ struct __pyx_opt_args_7metrics_aic; @@ -832,6 +1489,7 @@ struct __pyx_opt_args_7metrics_aic { int __pyx_n; PyObject *method; }; +/* #### Code section: utility_code_proto ### */ /* --- Runtime support code (head) --- */ /* Refnanny.proto */ @@ -840,11 +1498,11 @@ struct __pyx_opt_args_7metrics_aic { #endif #if CYTHON_REFNANNY typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; @@ -854,28 +1512,40 @@ struct __pyx_opt_args_7metrics_aic { #define __Pyx_RefNannySetupContext(name, acquire_gil)\ if (acquire_gil) {\ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ PyGILState_Release(__pyx_gilstate_save);\ } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() #endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } #define __Pyx_RefNannyFinishContext()\ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) @@ -886,6 +1556,10 @@ struct __pyx_opt_args_7metrics_aic { #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) #define __Pyx_XDECREF_SET(r, v) do {\ PyObject *tmp = (PyObject *) r;\ r = v; __Pyx_XDECREF(tmp);\ @@ -897,6 +1571,57 @@ struct __pyx_opt_args_7metrics_aic { #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + /* PyObjectGetAttrStr.proto */ #if CYTHON_USE_TYPE_SLOTS static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); @@ -904,6 +1629,9 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + /* GetBuiltinName.proto */ static PyObject *__Pyx_GetBuiltinName(PyObject *name); @@ -929,6 +1657,69 @@ static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, int wraparound, int boundscheck); +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg // no-op + #define __Pyx_Arg_XDECREF_VARARGS(arg) // no-op - arg is borrowed +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg // no-op, __Pyx_Arg_FASTCALL is direct and this needs + #define __Pyx_Arg_XDECREF_FASTCALL(arg) // no-op - arg was returned from array +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + /* RaiseArgTupleInvalid.proto */ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); @@ -937,25 +1728,17 @@ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /* ArgTypeTest.proto */ #define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ - ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ __Pyx__ArgTypeTest(obj, type, name, exact)) static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); -/* IncludeStringH.proto */ -#include - -/* BytesEquals.proto */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); - -/* UnicodeEquals.proto */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); - /* StrEquals.proto */ #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals @@ -963,49 +1746,162 @@ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int #define __Pyx_PyString_Equals __Pyx_PyBytes_Equals #endif -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); #endif -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); #endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); #else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New #endif -/* WriteUnraisableException.proto */ -static void __Pyx_WriteUnraisable(const char *name, int clineno, - int lineno, const char *filename, - int full_traceback, int nogil); +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif -/* Import.proto */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; // used by FusedFunction for copying defaults + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); /* PyDictVersioning.proto */ #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS @@ -1041,6 +1937,7 @@ static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); #endif /* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API typedef struct { PyCodeObject* code_object; int code_line; @@ -1054,66 +1951,101 @@ static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif /* AddTraceback.proto */ static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename); +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); -/* None.proto */ -static CYTHON_INLINE long __Pyx_pow_long(long, long); +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); -/* CIntFromPy.proto */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif /* FastTypeChecks.proto */ #if CYTHON_COMPILING_IN_CPYTHON #define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); #else #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) #define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) #define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) #endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) #define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) /* CheckBinaryVersion.proto */ -static int __Pyx_check_binary_version(void); +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); /* InitStrings.proto */ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); +/* #### Code section: module_declarations ### */ -/* Module declarations from 'libc.math' */ +/* Module declarations from "libc.math" */ -/* Module declarations from 'metrics' */ +/* Module declarations from "metrics" */ static PyObject *__pyx_f_7metrics_rsq(PyObject *, PyObject *, int __pyx_skip_dispatch); /*proto*/ static PyObject *__pyx_f_7metrics_mse(PyObject *, PyObject *, int __pyx_skip_dispatch); /*proto*/ static PyObject *__pyx_f_7metrics_rmse(PyObject *, PyObject *, int __pyx_skip_dispatch); /*proto*/ static PyObject *__pyx_f_7metrics_mae(PyObject *, PyObject *, int __pyx_skip_dispatch); /*proto*/ static PyObject *__pyx_f_7metrics_mape(PyObject *, PyObject *, int __pyx_skip_dispatch); /*proto*/ static double __pyx_f_7metrics_aic(PyObject *, PyObject *, int, int __pyx_skip_dispatch, struct __pyx_opt_args_7metrics_aic *__pyx_optional_args); /*proto*/ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ #define __Pyx_MODULE_NAME "metrics" extern int __pyx_module_is_main_metrics; int __pyx_module_is_main_metrics = 0; -/* Implementation of 'metrics' */ +/* Implementation of "metrics" */ +/* #### Code section: global_var ### */ static PyObject *__pyx_builtin_range; +/* #### Code section: string_decls ### */ +static const char __pyx_k_[] = "*"; static const char __pyx_k_k[] = "k"; static const char __pyx_k_y[] = "y"; static const char __pyx_k_np[] = "_np"; +static const char __pyx_k__11[] = "?"; +static const char __pyx_k_aic[] = "aic"; +static const char __pyx_k_mae[] = "mae"; +static const char __pyx_k_mse[] = "mse"; +static const char __pyx_k_rsq[] = "rsq"; static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mape[] = "mape"; static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_rmse[] = "rmse"; +static const char __pyx_k_spec[] = "__spec__"; static const char __pyx_k_test[] = "__test__"; static const char __pyx_k_numpy[] = "numpy"; static const char __pyx_k_range[] = "range"; @@ -1121,29 +2053,294 @@ static const char __pyx_k_y_hat[] = "y_hat"; static const char __pyx_k_import[] = "__import__"; static const char __pyx_k_linear[] = "linear"; static const char __pyx_k_method[] = "method"; +static const char __pyx_k_metrics[] = "metrics"; +static const char __pyx_k_metrics_pyx[] = "metrics.pyx"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; static const char __pyx_k_Common_metrics_required_in_mach[] = "\nCommon metrics required in machine learning modules.\n\n**Available functions:**\n - ``rsq``: R-Squared\n - ``mse``: Mean squared error\n - ``rmse``: Root mean squared error\n - ``mae``: Mean absolute error\n - ``mape``: Mean absolute percentage error\n - ``aic``: Akaike information criterion\n\nCredits\n-------\n::\n\n Authors:\n - Diptesh\n\n Date: Dec 19, 2021\n"; -static PyObject *__pyx_n_s_cline_in_traceback; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_k; -static PyObject *__pyx_n_s_linear; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_method; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_np; -static PyObject *__pyx_n_s_numpy; -static PyObject *__pyx_n_s_range; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_y; -static PyObject *__pyx_n_s_y_hat; +/* #### Code section: decls ### */ static PyObject *__pyx_pf_7metrics_rsq(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat); /* proto */ static PyObject *__pyx_pf_7metrics_2mse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat); /* proto */ static PyObject *__pyx_pf_7metrics_4rmse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat); /* proto */ static PyObject *__pyx_pf_7metrics_6mae(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat); /* proto */ static PyObject *__pyx_pf_7metrics_8mape(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat); /* proto */ static PyObject *__pyx_pf_7metrics_10aic(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, int __pyx_v_k, PyObject *__pyx_v_method); /* proto */ -static PyObject *__pyx_float_0_5; -/* Late includes */ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyObject *__pyx_n_s_; + PyObject *__pyx_n_s__11; + PyObject *__pyx_n_s_aic; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_k; + PyObject *__pyx_n_s_linear; + PyObject *__pyx_n_s_mae; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_mape; + PyObject *__pyx_n_s_method; + PyObject *__pyx_n_s_metrics; + PyObject *__pyx_kp_s_metrics_pyx; + PyObject *__pyx_n_s_mse; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_np; + PyObject *__pyx_n_s_numpy; + PyObject *__pyx_n_s_range; + PyObject *__pyx_n_s_rmse; + PyObject *__pyx_n_s_rsq; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_y; + PyObject *__pyx_n_s_y_hat; + PyObject *__pyx_float_0_5; + PyObject *__pyx_tuple__2; + PyObject *__pyx_tuple__8; + PyObject *__pyx_tuple__10; + PyObject *__pyx_codeobj__3; + PyObject *__pyx_codeobj__4; + PyObject *__pyx_codeobj__5; + PyObject *__pyx_codeobj__6; + PyObject *__pyx_codeobj__7; + PyObject *__pyx_codeobj__9; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_n_s_); + Py_CLEAR(clear_module_state->__pyx_n_s__11); + Py_CLEAR(clear_module_state->__pyx_n_s_aic); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_k); + Py_CLEAR(clear_module_state->__pyx_n_s_linear); + Py_CLEAR(clear_module_state->__pyx_n_s_mae); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_mape); + Py_CLEAR(clear_module_state->__pyx_n_s_method); + Py_CLEAR(clear_module_state->__pyx_n_s_metrics); + Py_CLEAR(clear_module_state->__pyx_kp_s_metrics_pyx); + Py_CLEAR(clear_module_state->__pyx_n_s_mse); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_np); + Py_CLEAR(clear_module_state->__pyx_n_s_numpy); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_rmse); + Py_CLEAR(clear_module_state->__pyx_n_s_rsq); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_y); + Py_CLEAR(clear_module_state->__pyx_n_s_y_hat); + Py_CLEAR(clear_module_state->__pyx_float_0_5); + Py_CLEAR(clear_module_state->__pyx_tuple__2); + Py_CLEAR(clear_module_state->__pyx_tuple__8); + Py_CLEAR(clear_module_state->__pyx_tuple__10); + Py_CLEAR(clear_module_state->__pyx_codeobj__3); + Py_CLEAR(clear_module_state->__pyx_codeobj__4); + Py_CLEAR(clear_module_state->__pyx_codeobj__5); + Py_CLEAR(clear_module_state->__pyx_codeobj__6); + Py_CLEAR(clear_module_state->__pyx_codeobj__7); + Py_CLEAR(clear_module_state->__pyx_codeobj__9); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_n_s_); + Py_VISIT(traverse_module_state->__pyx_n_s__11); + Py_VISIT(traverse_module_state->__pyx_n_s_aic); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_k); + Py_VISIT(traverse_module_state->__pyx_n_s_linear); + Py_VISIT(traverse_module_state->__pyx_n_s_mae); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_mape); + Py_VISIT(traverse_module_state->__pyx_n_s_method); + Py_VISIT(traverse_module_state->__pyx_n_s_metrics); + Py_VISIT(traverse_module_state->__pyx_kp_s_metrics_pyx); + Py_VISIT(traverse_module_state->__pyx_n_s_mse); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_np); + Py_VISIT(traverse_module_state->__pyx_n_s_numpy); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_rmse); + Py_VISIT(traverse_module_state->__pyx_n_s_rsq); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_y); + Py_VISIT(traverse_module_state->__pyx_n_s_y_hat); + Py_VISIT(traverse_module_state->__pyx_float_0_5); + Py_VISIT(traverse_module_state->__pyx_tuple__2); + Py_VISIT(traverse_module_state->__pyx_tuple__8); + Py_VISIT(traverse_module_state->__pyx_tuple__10); + Py_VISIT(traverse_module_state->__pyx_codeobj__3); + Py_VISIT(traverse_module_state->__pyx_codeobj__4); + Py_VISIT(traverse_module_state->__pyx_codeobj__5); + Py_VISIT(traverse_module_state->__pyx_codeobj__6); + Py_VISIT(traverse_module_state->__pyx_codeobj__7); + Py_VISIT(traverse_module_state->__pyx_codeobj__9); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_n_s_ __pyx_mstate_global->__pyx_n_s_ +#define __pyx_n_s__11 __pyx_mstate_global->__pyx_n_s__11 +#define __pyx_n_s_aic __pyx_mstate_global->__pyx_n_s_aic +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_k __pyx_mstate_global->__pyx_n_s_k +#define __pyx_n_s_linear __pyx_mstate_global->__pyx_n_s_linear +#define __pyx_n_s_mae __pyx_mstate_global->__pyx_n_s_mae +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_mape __pyx_mstate_global->__pyx_n_s_mape +#define __pyx_n_s_method __pyx_mstate_global->__pyx_n_s_method +#define __pyx_n_s_metrics __pyx_mstate_global->__pyx_n_s_metrics +#define __pyx_kp_s_metrics_pyx __pyx_mstate_global->__pyx_kp_s_metrics_pyx +#define __pyx_n_s_mse __pyx_mstate_global->__pyx_n_s_mse +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_np __pyx_mstate_global->__pyx_n_s_np +#define __pyx_n_s_numpy __pyx_mstate_global->__pyx_n_s_numpy +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_rmse __pyx_mstate_global->__pyx_n_s_rmse +#define __pyx_n_s_rsq __pyx_mstate_global->__pyx_n_s_rsq +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_y __pyx_mstate_global->__pyx_n_s_y +#define __pyx_n_s_y_hat __pyx_mstate_global->__pyx_n_s_y_hat +#define __pyx_float_0_5 __pyx_mstate_global->__pyx_float_0_5 +#define __pyx_tuple__2 __pyx_mstate_global->__pyx_tuple__2 +#define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8 +#define __pyx_tuple__10 __pyx_mstate_global->__pyx_tuple__10 +#define __pyx_codeobj__3 __pyx_mstate_global->__pyx_codeobj__3 +#define __pyx_codeobj__4 __pyx_mstate_global->__pyx_codeobj__4 +#define __pyx_codeobj__5 __pyx_mstate_global->__pyx_codeobj__5 +#define __pyx_codeobj__6 __pyx_mstate_global->__pyx_codeobj__6 +#define __pyx_codeobj__7 __pyx_mstate_global->__pyx_codeobj__7 +#define __pyx_codeobj__9 __pyx_mstate_global->__pyx_codeobj__9 +/* #### Code section: module_code ### */ /* "metrics.pyx":31 * @@ -1153,7 +2350,13 @@ static PyObject *__pyx_float_0_5; * Compute `Coefficient of determination */ -static PyObject *__pyx_pw_7metrics_1rsq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7metrics_1rsq(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ static PyObject *__pyx_f_7metrics_rsq(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, CYTHON_UNUSED int __pyx_skip_dispatch) { int __pyx_v_i; int __pyx_v_arr_len; @@ -1173,7 +2376,10 @@ static PyObject *__pyx_f_7metrics_rsq(PyObject *__pyx_v_y, PyObject *__pyx_v_y_h PyObject *__pyx_t_5 = NULL; double __pyx_t_6; int __pyx_t_7; - __Pyx_RefNannySetupContext("rsq", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("rsq", 1); /* "metrics.pyx":54 * @@ -1267,7 +2473,7 @@ static PyObject *__pyx_f_7metrics_rsq(PyObject *__pyx_v_y, PyObject *__pyx_v_y_h PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 63, __pyx_L1_error) } - __pyx_t_1 = PyList_GET_SIZE(__pyx_v_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 63, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 63, __pyx_L1_error) __pyx_v_arr_len = __pyx_t_1; /* "metrics.pyx":64 @@ -1390,7 +2596,7 @@ static PyObject *__pyx_f_7metrics_rsq(PyObject *__pyx_v_y, PyObject *__pyx_v_y_h * op = 1 - (num * den ** -1.0) * return op */ - __pyx_t_7 = ((__pyx_v_den != 0.0) != 0); + __pyx_t_7 = (__pyx_v_den != 0.0); if (__pyx_t_7) { /* "metrics.pyx":74 @@ -1445,56 +2651,100 @@ static PyObject *__pyx_f_7metrics_rsq(PyObject *__pyx_v_y, PyObject *__pyx_v_y_h } /* Python wrapper */ -static PyObject *__pyx_pw_7metrics_1rsq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_7metrics_rsq[] = "\n Compute `Coefficient of determination\n `_\n or R-Squared.\n\n Parameters\n ----------\n y : list\n\n Actual values.\n\n y_hat : list\n\n Predicted values.\n\n Returns\n -------\n op : float\n\n R-Squared value.\n\n "; -static PyObject *__pyx_pw_7metrics_1rsq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_7metrics_1rsq(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_7metrics_rsq, "\n Compute `Coefficient of determination\n `_\n or R-Squared.\n\n Parameters\n ----------\n y : list\n\n Actual values.\n\n y_hat : list\n\n Predicted values.\n\n Returns\n -------\n op : float\n\n R-Squared value.\n\n "); +static PyMethodDef __pyx_mdef_7metrics_1rsq = {"rsq", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7metrics_1rsq, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7metrics_rsq}; +static PyObject *__pyx_pw_7metrics_1rsq(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_y = 0; PyObject *__pyx_v_y_hat = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("rsq (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 31, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y_hat)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y_hat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 31, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("rsq", 1, 2, 2, 1); __PYX_ERR(0, 31, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rsq") < 0)) __PYX_ERR(0, 31, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rsq") < 0)) __PYX_ERR(0, 31, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } __pyx_v_y = ((PyObject*)values[0]); __pyx_v_y_hat = ((PyObject*)values[1]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rsq", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 31, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rsq", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 31, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("metrics.rsq", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -1508,6 +2758,12 @@ static PyObject *__pyx_pw_7metrics_1rsq(PyObject *__pyx_self, PyObject *__pyx_ar __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -1516,7 +2772,10 @@ static PyObject *__pyx_pf_7metrics_rsq(CYTHON_UNUSED PyObject *__pyx_self, PyObj PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("rsq", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("rsq", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_7metrics_rsq(__pyx_v_y, __pyx_v_y_hat, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -1543,7 +2802,13 @@ static PyObject *__pyx_pf_7metrics_rsq(CYTHON_UNUSED PyObject *__pyx_self, PyObj * Compute `Mean squared error */ -static PyObject *__pyx_pw_7metrics_3mse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7metrics_3mse(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ static PyObject *__pyx_f_7metrics_mse(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, CYTHON_UNUSED int __pyx_skip_dispatch) { int __pyx_v_i; int __pyx_v_arr_len; @@ -1558,7 +2823,10 @@ static PyObject *__pyx_f_7metrics_mse(PyObject *__pyx_v_y, PyObject *__pyx_v_y_h int __pyx_t_4; PyObject *__pyx_t_5 = NULL; double __pyx_t_6; - __Pyx_RefNannySetupContext("mse", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("mse", 1); /* "metrics.pyx":104 * cdef double a @@ -1580,7 +2848,7 @@ static PyObject *__pyx_f_7metrics_mse(PyObject *__pyx_v_y, PyObject *__pyx_v_y_h PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 105, __pyx_L1_error) } - __pyx_t_1 = PyList_GET_SIZE(__pyx_v_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 105, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 105, __pyx_L1_error) __pyx_v_arr_len = __pyx_t_1; /* "metrics.pyx":106 @@ -1682,56 +2950,100 @@ static PyObject *__pyx_f_7metrics_mse(PyObject *__pyx_v_y, PyObject *__pyx_v_y_h } /* Python wrapper */ -static PyObject *__pyx_pw_7metrics_3mse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_7metrics_2mse[] = "\n Compute `Mean squared error\n `_.\n\n Parameters\n ----------\n :y: list\n\n Actual values.\n\n :y_hat: list\n\n Predicted values.\n\n Returns\n -------\n :op: float\n\n Mean squared error.\n\n "; -static PyObject *__pyx_pw_7metrics_3mse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_7metrics_3mse(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_7metrics_2mse, "\n Compute `Mean squared error\n `_.\n\n Parameters\n ----------\n :y: list\n\n Actual values.\n\n :y_hat: list\n\n Predicted values.\n\n Returns\n -------\n :op: float\n\n Mean squared error.\n\n "); +static PyMethodDef __pyx_mdef_7metrics_3mse = {"mse", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7metrics_3mse, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7metrics_2mse}; +static PyObject *__pyx_pw_7metrics_3mse(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_y = 0; PyObject *__pyx_v_y_hat = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mse (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y_hat)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y_hat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 78, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("mse", 1, 2, 2, 1); __PYX_ERR(0, 78, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mse") < 0)) __PYX_ERR(0, 78, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "mse") < 0)) __PYX_ERR(0, 78, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } __pyx_v_y = ((PyObject*)values[0]); __pyx_v_y_hat = ((PyObject*)values[1]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("mse", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 78, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("mse", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 78, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("metrics.mse", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -1745,6 +3057,12 @@ static PyObject *__pyx_pw_7metrics_3mse(PyObject *__pyx_self, PyObject *__pyx_ar __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -1753,7 +3071,10 @@ static PyObject *__pyx_pf_7metrics_2mse(CYTHON_UNUSED PyObject *__pyx_self, PyOb PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("mse", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("mse", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_7metrics_mse(__pyx_v_y, __pyx_v_y_hat, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -1780,13 +3101,22 @@ static PyObject *__pyx_pf_7metrics_2mse(CYTHON_UNUSED PyObject *__pyx_self, PyOb * Compute `Root mean square error */ -static PyObject *__pyx_pw_7metrics_5rmse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7metrics_5rmse(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ static PyObject *__pyx_f_7metrics_rmse(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, CYTHON_UNUSED int __pyx_skip_dispatch) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; - __Pyx_RefNannySetupContext("rmse", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("rmse", 1); /* "metrics.pyx":135 * @@ -1826,56 +3156,100 @@ static PyObject *__pyx_f_7metrics_rmse(PyObject *__pyx_v_y, PyObject *__pyx_v_y_ } /* Python wrapper */ -static PyObject *__pyx_pw_7metrics_5rmse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_7metrics_4rmse[] = "\n Compute `Root mean square error\n `_.\n\n Parameters\n ----------\n y : list\n\n Actual values.\n\n y_hat : list\n\n Predicted values.\n\n Returns\n -------\n op : float\n\n Root mean square error.\n\n "; -static PyObject *__pyx_pw_7metrics_5rmse(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_7metrics_5rmse(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_7metrics_4rmse, "\n Compute `Root mean square error\n `_.\n\n Parameters\n ----------\n y : list\n\n Actual values.\n\n y_hat : list\n\n Predicted values.\n\n Returns\n -------\n op : float\n\n Root mean square error.\n\n "); +static PyMethodDef __pyx_mdef_7metrics_5rmse = {"rmse", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7metrics_5rmse, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7metrics_4rmse}; +static PyObject *__pyx_pw_7metrics_5rmse(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_y = 0; PyObject *__pyx_v_y_hat = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("rmse (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y_hat)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y_hat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("rmse", 1, 2, 2, 1); __PYX_ERR(0, 113, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rmse") < 0)) __PYX_ERR(0, 113, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "rmse") < 0)) __PYX_ERR(0, 113, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } __pyx_v_y = ((PyObject*)values[0]); __pyx_v_y_hat = ((PyObject*)values[1]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("rmse", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 113, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("rmse", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 113, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("metrics.rmse", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -1889,6 +3263,12 @@ static PyObject *__pyx_pw_7metrics_5rmse(PyObject *__pyx_self, PyObject *__pyx_a __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -1897,7 +3277,10 @@ static PyObject *__pyx_pf_7metrics_4rmse(CYTHON_UNUSED PyObject *__pyx_self, PyO PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("rmse", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("rmse", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_7metrics_rmse(__pyx_v_y, __pyx_v_y_hat, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -1924,7 +3307,13 @@ static PyObject *__pyx_pf_7metrics_4rmse(CYTHON_UNUSED PyObject *__pyx_self, PyO * Compute `Mean absolute error */ -static PyObject *__pyx_pw_7metrics_7mae(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7metrics_7mae(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ static PyObject *__pyx_f_7metrics_mae(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, CYTHON_UNUSED int __pyx_skip_dispatch) { int __pyx_v_i; int __pyx_v_arr_len; @@ -1939,7 +3328,10 @@ static PyObject *__pyx_f_7metrics_mae(PyObject *__pyx_v_y, PyObject *__pyx_v_y_h int __pyx_t_4; PyObject *__pyx_t_5 = NULL; double __pyx_t_6; - __Pyx_RefNannySetupContext("mae", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("mae", 1); /* "metrics.pyx":164 * cdef double a @@ -1961,7 +3353,7 @@ static PyObject *__pyx_f_7metrics_mae(PyObject *__pyx_v_y, PyObject *__pyx_v_y_h PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 165, __pyx_L1_error) } - __pyx_t_1 = PyList_GET_SIZE(__pyx_v_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 165, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 165, __pyx_L1_error) __pyx_v_arr_len = __pyx_t_1; /* "metrics.pyx":166 @@ -2063,56 +3455,100 @@ static PyObject *__pyx_f_7metrics_mae(PyObject *__pyx_v_y, PyObject *__pyx_v_y_h } /* Python wrapper */ -static PyObject *__pyx_pw_7metrics_7mae(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_7metrics_6mae[] = "\n Compute `Mean absolute error\n `_.\n\n Parameters\n ----------\n y : list\n\n Actual values.\n\n y_hat : list\n\n Predicted values.\n\n Returns\n -------\n op : float\n\n Mean absolute error.\n\n "; -static PyObject *__pyx_pw_7metrics_7mae(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_7metrics_7mae(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_7metrics_6mae, "\n Compute `Mean absolute error\n `_.\n\n Parameters\n ----------\n y : list\n\n Actual values.\n\n y_hat : list\n\n Predicted values.\n\n Returns\n -------\n op : float\n\n Mean absolute error.\n\n "); +static PyMethodDef __pyx_mdef_7metrics_7mae = {"mae", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7metrics_7mae, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7metrics_6mae}; +static PyObject *__pyx_pw_7metrics_7mae(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_y = 0; PyObject *__pyx_v_y_hat = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mae (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y_hat)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y_hat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 138, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("mae", 1, 2, 2, 1); __PYX_ERR(0, 138, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mae") < 0)) __PYX_ERR(0, 138, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "mae") < 0)) __PYX_ERR(0, 138, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } __pyx_v_y = ((PyObject*)values[0]); __pyx_v_y_hat = ((PyObject*)values[1]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("mae", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 138, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("mae", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 138, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("metrics.mae", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -2126,6 +3562,12 @@ static PyObject *__pyx_pw_7metrics_7mae(PyObject *__pyx_self, PyObject *__pyx_ar __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -2134,7 +3576,10 @@ static PyObject *__pyx_pf_7metrics_6mae(CYTHON_UNUSED PyObject *__pyx_self, PyOb PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("mae", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("mae", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_7metrics_mae(__pyx_v_y, __pyx_v_y_hat, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -2161,7 +3606,13 @@ static PyObject *__pyx_pf_7metrics_6mae(CYTHON_UNUSED PyObject *__pyx_self, PyOb * Compute `Mean absolute percentage error */ -static PyObject *__pyx_pw_7metrics_9mape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7metrics_9mape(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ static PyObject *__pyx_f_7metrics_mape(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, CYTHON_UNUSED int __pyx_skip_dispatch) { int __pyx_v_i; int __pyx_v_arr_len; @@ -2177,7 +3628,10 @@ static PyObject *__pyx_f_7metrics_mape(PyObject *__pyx_v_y, PyObject *__pyx_v_y_ PyObject *__pyx_t_5 = NULL; double __pyx_t_6; int __pyx_t_7; - __Pyx_RefNannySetupContext("mape", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("mape", 1); /* "metrics.pyx":200 * cdef double a @@ -2199,7 +3653,7 @@ static PyObject *__pyx_f_7metrics_mape(PyObject *__pyx_v_y, PyObject *__pyx_v_y_ PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 201, __pyx_L1_error) } - __pyx_t_1 = PyList_GET_SIZE(__pyx_v_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 201, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 201, __pyx_L1_error) __pyx_v_arr_len = __pyx_t_1; /* "metrics.pyx":202 @@ -2255,7 +3709,7 @@ static PyObject *__pyx_f_7metrics_mape(PyObject *__pyx_v_y, PyObject *__pyx_v_y_ * op += abs(1 - (b * a ** -1.0)) * op = op * arr_len ** -1.0 */ - __pyx_t_7 = ((__pyx_v_a != 0.0) != 0); + __pyx_t_7 = (__pyx_v_a != 0.0); if (__pyx_t_7) { /* "metrics.pyx":206 @@ -2320,56 +3774,100 @@ static PyObject *__pyx_f_7metrics_mape(PyObject *__pyx_v_y, PyObject *__pyx_v_y_ } /* Python wrapper */ -static PyObject *__pyx_pw_7metrics_9mape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_7metrics_8mape[] = "\n Compute `Mean absolute percentage error\n `_.\n\n Parameters\n ----------\n y : list\n\n Actual values.\n\n y_hat : list\n\n Predicted values.\n\n Returns\n -------\n op : float\n\n Mean absolute percentage error.\n\n "; -static PyObject *__pyx_pw_7metrics_9mape(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_7metrics_9mape(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_7metrics_8mape, "\n Compute `Mean absolute percentage error\n `_.\n\n Parameters\n ----------\n y : list\n\n Actual values.\n\n y_hat : list\n\n Predicted values.\n\n Returns\n -------\n op : float\n\n Mean absolute percentage error.\n\n "); +static PyMethodDef __pyx_mdef_7metrics_9mape = {"mape", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7metrics_9mape, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7metrics_8mape}; +static PyObject *__pyx_pw_7metrics_9mape(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_y = 0; PyObject *__pyx_v_y_hat = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("mape (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 174, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y_hat)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y_hat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 174, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("mape", 1, 2, 2, 1); __PYX_ERR(0, 174, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mape") < 0)) __PYX_ERR(0, 174, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "mape") < 0)) __PYX_ERR(0, 174, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } __pyx_v_y = ((PyObject*)values[0]); __pyx_v_y_hat = ((PyObject*)values[1]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("mape", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 174, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("mape", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 174, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("metrics.mape", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -2383,6 +3881,12 @@ static PyObject *__pyx_pw_7metrics_9mape(PyObject *__pyx_self, PyObject *__pyx_a __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -2391,7 +3895,10 @@ static PyObject *__pyx_pf_7metrics_8mape(CYTHON_UNUSED PyObject *__pyx_self, PyO PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("mape", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("mape", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_7metrics_mape(__pyx_v_y, __pyx_v_y_hat, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -2418,7 +3925,13 @@ static PyObject *__pyx_pf_7metrics_8mape(CYTHON_UNUSED PyObject *__pyx_self, PyO * Compute `Akaike information criterion */ -static PyObject *__pyx_pw_7metrics_11aic(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7metrics_11aic(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, int __pyx_v_k, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_7metrics_aic *__pyx_optional_args) { PyObject *__pyx_v_method = ((PyObject*)__pyx_n_s_linear); double __pyx_v_op; @@ -2434,11 +3947,13 @@ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; - int __pyx_t_5; - long __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - double __pyx_t_8; - __Pyx_RefNannySetupContext("aic", 0); + long __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + double __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("aic", 1); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_method = __pyx_optional_args->method; @@ -2506,7 +4021,7 @@ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, * arr_len = len(y) * if method == "linear": */ - __pyx_v_small_sample = (__pyx_v_arr_len * __Pyx_pow_long(((long)__pyx_v_k), -1L)); + __pyx_v_small_sample = (__pyx_v_arr_len * pow(((double)__pyx_v_k), -1.0)); /* "metrics.pyx":248 * cdef double small_sample = 0.0 @@ -2519,7 +4034,7 @@ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 248, __pyx_L1_error) } - __pyx_t_1 = PyList_GET_SIZE(__pyx_v_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 248, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_y); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 248, __pyx_L1_error) __pyx_v_arr_len = __pyx_t_1; /* "metrics.pyx":249 @@ -2529,9 +4044,8 @@ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, * for i in range(0, arr_len, 1): * a = y[i] */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_linear, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 249, __pyx_L1_error) - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_linear, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 249, __pyx_L1_error) + if (__pyx_t_2) { /* "metrics.pyx":250 * arr_len = len(y) @@ -2540,10 +4054,10 @@ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, * a = y[i] * b = y_hat[i] */ - __pyx_t_4 = __pyx_v_arr_len; - __pyx_t_5 = __pyx_t_4; - for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { - __pyx_v_i = __pyx_t_6; + __pyx_t_3 = __pyx_v_arr_len; + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; /* "metrics.pyx":251 * if method == "linear": @@ -2556,11 +4070,11 @@ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 251, __pyx_L1_error) } - __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_v_y, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 251, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 251, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_a = __pyx_t_8; + __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_y, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 251, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_a = __pyx_t_7; /* "metrics.pyx":252 * for i in range(0, arr_len, 1): @@ -2573,11 +4087,11 @@ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 252, __pyx_L1_error) } - __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_v_y_hat, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 252, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_b = __pyx_t_8; + __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_y_hat, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 252, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_b = __pyx_t_7; /* "metrics.pyx":253 * a = y[i] @@ -2605,8 +4119,8 @@ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, * op += (2 * k * (k + 1)) * (arr_len - k - 1) ** -1 * return op */ - __pyx_t_3 = ((__pyx_v_small_sample <= 40.0) != 0); - if (__pyx_t_3) { + __pyx_t_2 = (__pyx_v_small_sample <= 40.0); + if (__pyx_t_2) { /* "metrics.pyx":256 * op = 2 * k - 2 * log(sse) @@ -2614,7 +4128,7 @@ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, * op += (2 * k * (k + 1)) * (arr_len - k - 1) ** -1 # <<<<<<<<<<<<<< * return op */ - __pyx_v_op = (__pyx_v_op + (((2 * __pyx_v_k) * (__pyx_v_k + 1)) * __Pyx_pow_long(((__pyx_v_arr_len - __pyx_v_k) - 1), -1L))); + __pyx_v_op = (__pyx_v_op + (((2 * __pyx_v_k) * (__pyx_v_k + 1)) * pow(((double)((__pyx_v_arr_len - __pyx_v_k) - 1)), -1.0))); /* "metrics.pyx":255 * sse += (a - b) ** 2 @@ -2652,78 +4166,119 @@ static double __pyx_f_7metrics_aic(PyObject *__pyx_v_y, PyObject *__pyx_v_y_hat, /* function exit code */ __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_7); - __Pyx_WriteUnraisable("metrics.aic", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_r = 0; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("metrics.aic", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ -static PyObject *__pyx_pw_7metrics_11aic(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_7metrics_10aic[] = "\n Compute `Akaike information criterion\n `_.\n\n Parameters\n ----------\n y : list\n\n Actual values.\n\n y_hat : list\n\n Predicted values.\n\n k : int\n\n Number of parameters.\n\n method : str, optional\n\n Type of regression (the default is linear).\n\n Returns\n -------\n op : float\n\n Akaike information criterion.\n\n "; -static PyObject *__pyx_pw_7metrics_11aic(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_7metrics_11aic(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_7metrics_10aic, "\n Compute `Akaike information criterion\n `_.\n\n Parameters\n ----------\n y : list\n\n Actual values.\n\n y_hat : list\n\n Predicted values.\n\n k : int\n\n Number of parameters.\n\n method : str, optional\n\n Type of regression (the default is linear).\n\n Returns\n -------\n op : float\n\n Akaike information criterion.\n\n "); +static PyMethodDef __pyx_mdef_7metrics_11aic = {"aic", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7metrics_11aic, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7metrics_10aic}; +static PyObject *__pyx_pw_7metrics_11aic(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_y = 0; PyObject *__pyx_v_y_hat = 0; int __pyx_v_k; PyObject *__pyx_v_method = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[4] = {0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("aic (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,&__pyx_n_s_k,&__pyx_n_s_method,0}; - PyObject* values[4] = {0,0,0,0}; - values[3] = ((PyObject*)__pyx_n_s_linear); - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_y_hat,&__pyx_n_s_k,&__pyx_n_s_method,0}; + values[3] = __Pyx_Arg_NewRef_FASTCALL(((PyObject*)__pyx_n_s_linear)); + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y_hat)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_y_hat)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("aic", 0, 3, 4, 1); __PYX_ERR(0, 211, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_k)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_k)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("aic", 0, 3, 4, 2); __PYX_ERR(0, 211, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method); - if (value) { values[3] = value; kw_args--; } + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_method); + if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "aic") < 0)) __PYX_ERR(0, 211, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "aic") < 0)) __PYX_ERR(0, 211, __pyx_L3_error) } } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } @@ -2733,10 +4288,18 @@ static PyObject *__pyx_pw_7metrics_11aic(PyObject *__pyx_self, PyObject *__pyx_a __pyx_v_k = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) __pyx_v_method = ((PyObject*)values[3]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("aic", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 211, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("aic", 0, 3, 4, __pyx_nargs); __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("metrics.aic", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -2751,6 +4314,12 @@ static PyObject *__pyx_pw_7metrics_11aic(PyObject *__pyx_self, PyObject *__pyx_a __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -2761,11 +4330,14 @@ static PyObject *__pyx_pf_7metrics_10aic(CYTHON_UNUSED PyObject *__pyx_self, PyO double __pyx_t_1; struct __pyx_opt_args_7metrics_aic __pyx_t_2; PyObject *__pyx_t_3 = NULL; - __Pyx_RefNannySetupContext("aic", 0); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("aic", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_2.__pyx_n = 1; __pyx_t_2.method = __pyx_v_method; - __pyx_t_1 = __pyx_f_7metrics_aic(__pyx_v_y, __pyx_v_y_hat, __pyx_v_k, 0, &__pyx_t_2); + __pyx_t_1 = __pyx_f_7metrics_aic(__pyx_v_y, __pyx_v_y_hat, __pyx_v_k, 0, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L1_error) __pyx_t_3 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; @@ -2784,46 +4356,8 @@ static PyObject *__pyx_pf_7metrics_10aic(CYTHON_UNUSED PyObject *__pyx_self, PyO } static PyMethodDef __pyx_methods[] = { - {"rsq", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7metrics_1rsq, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7metrics_rsq}, - {"mse", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7metrics_3mse, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7metrics_2mse}, - {"rmse", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7metrics_5rmse, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7metrics_4rmse}, - {"mae", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7metrics_7mae, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7metrics_6mae}, - {"mape", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7metrics_9mape, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7metrics_8mape}, - {"aic", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7metrics_11aic, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7metrics_10aic}, {0, 0, 0, 0} }; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec_metrics(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec_metrics}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "metrics", - __pyx_k_Common_metrics_required_in_mach, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif #ifndef CYTHON_SMALL_CODE #if defined(__clang__) #define CYTHON_SMALL_CODE @@ -2833,44 +4367,137 @@ static struct PyModuleDef __pyx_moduledef = { #define CYTHON_SMALL_CODE #endif #endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, - {&__pyx_n_s_linear, __pyx_k_linear, sizeof(__pyx_k_linear), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, - {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, - {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1}, - {&__pyx_n_s_y_hat, __pyx_k_y_hat, sizeof(__pyx_k_y_hat), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 1}, + {&__pyx_n_s__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 0, 1, 1}, + {&__pyx_n_s_aic, __pyx_k_aic, sizeof(__pyx_k_aic), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, + {&__pyx_n_s_linear, __pyx_k_linear, sizeof(__pyx_k_linear), 0, 0, 1, 1}, + {&__pyx_n_s_mae, __pyx_k_mae, sizeof(__pyx_k_mae), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_mape, __pyx_k_mape, sizeof(__pyx_k_mape), 0, 0, 1, 1}, + {&__pyx_n_s_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 0, 1, 1}, + {&__pyx_n_s_metrics, __pyx_k_metrics, sizeof(__pyx_k_metrics), 0, 0, 1, 1}, + {&__pyx_kp_s_metrics_pyx, __pyx_k_metrics_pyx, sizeof(__pyx_k_metrics_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_mse, __pyx_k_mse, sizeof(__pyx_k_mse), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_rmse, __pyx_k_rmse, sizeof(__pyx_k_rmse), 0, 0, 1, 1}, + {&__pyx_n_s_rsq, __pyx_k_rsq, sizeof(__pyx_k_rsq), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1}, + {&__pyx_n_s_y_hat, __pyx_k_y_hat, sizeof(__pyx_k_y_hat), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 64, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; } +/* #### Code section: cached_constants ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "metrics.pyx":31 + * + * + * cpdef rsq(list y, list y_hat): # <<<<<<<<<<<<<< + * """ + * Compute `Coefficient of determination + */ + __pyx_tuple__2 = PyTuple_Pack(2, __pyx_n_s_y, __pyx_n_s_y_hat); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + __pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_metrics_pyx, __pyx_n_s_rsq, 31, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(0, 31, __pyx_L1_error) + + /* "metrics.pyx":78 + * + * + * cpdef mse(list y, list y_hat): # <<<<<<<<<<<<<< + * """ + * Compute `Mean squared error + */ + __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_metrics_pyx, __pyx_n_s_mse, 78, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 78, __pyx_L1_error) + + /* "metrics.pyx":113 + * return op + * + * cpdef rmse(list y, list y_hat): # <<<<<<<<<<<<<< + * """ + * Compute `Root mean square error + */ + __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_metrics_pyx, __pyx_n_s_rmse, 113, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 113, __pyx_L1_error) + + /* "metrics.pyx":138 + * + * + * cpdef mae(list y, list y_hat): # <<<<<<<<<<<<<< + * """ + * Compute `Mean absolute error + */ + __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_metrics_pyx, __pyx_n_s_mae, 138, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) __PYX_ERR(0, 138, __pyx_L1_error) + + /* "metrics.pyx":174 + * + * + * cpdef mape(list y, list y_hat): # <<<<<<<<<<<<<< + * """ + * Compute `Mean absolute percentage error + */ + __pyx_codeobj__7 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_metrics_pyx, __pyx_n_s_mape, 174, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__7)) __PYX_ERR(0, 174, __pyx_L1_error) + + /* "metrics.pyx":211 + * + * + * cpdef double aic(list y, list y_hat, int k, str method="linear"): # <<<<<<<<<<<<<< + * """ + * Compute `Akaike information criterion + */ + __pyx_tuple__8 = PyTuple_Pack(4, __pyx_n_s_y, __pyx_n_s_y_hat, __pyx_n_s_k, __pyx_n_s_method); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + __pyx_codeobj__9 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__8, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_metrics_pyx, __pyx_n_s_aic, 211, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__9)) __PYX_ERR(0, 211, __pyx_L1_error) + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_n_s_linear); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); __Pyx_RefNannyFinishContext(); return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; } +/* #### Code section: init_constants ### */ -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); __pyx_float_0_5 = PyFloat_FromDouble(0.5); if (unlikely(!__pyx_float_0_5)) __PYX_ERR(0, 1, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; } +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ @@ -2937,17 +4564,68 @@ static int __Pyx_modinit_function_import_code(void) { } -#if PY_MAJOR_VERSION < 3 -#ifdef CYTHON_NO_PYINIT_EXPORT -#define __Pyx_PyMODINIT_FUNC void -#else +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_metrics(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_metrics}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "metrics", + __pyx_k_Common_metrics_required_in_mach, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void #endif #else -#ifdef CYTHON_NO_PYINIT_EXPORT -#define __Pyx_PyMODINIT_FUNC PyObject * +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * #else -#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#define __Pyx_PyMODINIT_FUNC PyObject * #endif #endif @@ -2985,12 +4663,21 @@ static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { } return 0; } -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ PyObject *value = PyObject_GetAttrString(spec, from_name); int result = 0; if (likely(value)) { if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else result = PyDict_SetItemString(moddict, to_name, value); +#endif } Py_DECREF(value); } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { @@ -3000,8 +4687,9 @@ static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject } return result; } -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); if (__Pyx_check_single_interpreter()) return NULL; if (__pyx_m) @@ -3011,8 +4699,12 @@ static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNU module = PyModule_NewObject(modname); Py_DECREF(modname); if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else moddict = PyModule_GetDict(module); if (unlikely(!moddict)) goto bad; +#endif if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; @@ -3028,7 +4720,15 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_metrics(PyObject *__pyx_pyinit_mod #endif #endif { + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; __Pyx_RefNannyDeclarations #if CYTHON_PEP489_MULTI_PHASE_INIT if (__pyx_m) { @@ -3039,6 +4739,33 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_metrics(PyObject *__pyx_pyinit_mod #elif PY_MAJOR_VERSION >= 3 if (__pyx_m) return __Pyx_NewRef(__pyx_m); #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("metrics", __pyx_methods, __pyx_k_Common_metrics_required_in_mach, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to metrics pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { @@ -3049,7 +4776,7 @@ if (!__Pyx_RefNanny) { } #endif __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_metrics(void)", 0); - if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #ifdef __Pxy_PyFrame_Initialize_Offsets __Pxy_PyFrame_Initialize_Offsets(); #endif @@ -3057,50 +4784,31 @@ if (!__Pyx_RefNanny) { __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS PyEval_InitThreads(); #endif - #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("metrics", __pyx_methods, __pyx_k_Common_metrics_required_in_mach, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) @@ -3112,14 +4820,14 @@ if (!__Pyx_RefNanny) { { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) if (!PyDict_GetItemString(modules, "metrics")) { - if (unlikely(PyDict_SetItemString(modules, "metrics", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((PyDict_SetItemString(modules, "metrics", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) } } #endif /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error; + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error; + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) /*--- Global type/function init code ---*/ (void)__Pyx_modinit_global_init_code(); (void)__Pyx_modinit_variable_export_code(); @@ -3140,44 +4848,143 @@ if (!__Pyx_RefNanny) { * * from libc.math cimport log */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_2) < 0) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "metrics.pyx":1 - * """ # <<<<<<<<<<<<<< - * Common metrics required in machine learning modules. + /* "metrics.pyx":31 * + * + * cpdef rsq(list y, list y_hat): # <<<<<<<<<<<<<< + * """ + * Compute `Coefficient of determination */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7metrics_1rsq, 0, __pyx_n_s_rsq, NULL, __pyx_n_s_metrics, __pyx_d, ((PyObject *)__pyx_codeobj__3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rsq, __pyx_t_2) < 0) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /*--- Wrapped vars code ---*/ + /* "metrics.pyx":78 + * + * + * cpdef mse(list y, list y_hat): # <<<<<<<<<<<<<< + * """ + * Compute `Mean squared error + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7metrics_3mse, 0, __pyx_n_s_mse, NULL, __pyx_n_s_metrics, __pyx_d, ((PyObject *)__pyx_codeobj__4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_mse, __pyx_t_2) < 0) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init metrics", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - Py_CLEAR(__pyx_m); - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init metrics"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if CYTHON_PEP489_MULTI_PHASE_INIT - return (__pyx_m != NULL) ? 0 : -1; - #elif PY_MAJOR_VERSION >= 3 - return __pyx_m; - #else - return; + /* "metrics.pyx":113 + * return op + * + * cpdef rmse(list y, list y_hat): # <<<<<<<<<<<<<< + * """ + * Compute `Root mean square error + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7metrics_5rmse, 0, __pyx_n_s_rmse, NULL, __pyx_n_s_metrics, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rmse, __pyx_t_2) < 0) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "metrics.pyx":138 + * + * + * cpdef mae(list y, list y_hat): # <<<<<<<<<<<<<< + * """ + * Compute `Mean absolute error + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7metrics_7mae, 0, __pyx_n_s_mae, NULL, __pyx_n_s_metrics, __pyx_d, ((PyObject *)__pyx_codeobj__6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_mae, __pyx_t_2) < 0) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "metrics.pyx":174 + * + * + * cpdef mape(list y, list y_hat): # <<<<<<<<<<<<<< + * """ + * Compute `Mean absolute percentage error + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7metrics_9mape, 0, __pyx_n_s_mape, NULL, __pyx_n_s_metrics, __pyx_d, ((PyObject *)__pyx_codeobj__7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_mape, __pyx_t_2) < 0) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "metrics.pyx":211 + * + * + * cpdef double aic(list y, list y_hat, int k, str method="linear"): # <<<<<<<<<<<<<< + * """ + * Compute `Akaike information criterion + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7metrics_11aic, 0, __pyx_n_s_aic, NULL, __pyx_n_s_metrics, __pyx_d, ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__10); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_aic, __pyx_t_2) < 0) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "metrics.pyx":1 + * """ # <<<<<<<<<<<<<< + * Common metrics required in machine learning modules. + * + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init metrics", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init metrics"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; #endif } +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ /* --- Runtime support code --- */ /* Refnanny */ @@ -3197,6 +5004,108 @@ static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { } #endif +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + /* PyObjectGetAttrStr */ #if CYTHON_USE_TYPE_SLOTS static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { @@ -3211,10 +5120,39 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject } #endif +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + /* GetBuiltinName */ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 "name '%U' is not defined", name); @@ -3228,7 +5166,7 @@ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { /* GetItemInt */ static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { PyObject *r; - if (!j) return NULL; + if (unlikely(!j)) return NULL; r = PyObject_GetItem(o, j); Py_DECREF(j); return r; @@ -3289,10 +5227,18 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, return r; } } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); if (likely(l >= 0)) { i += l; } else { @@ -3301,206 +5247,80 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, PyErr_Clear(); } } - return m->sq_item(o, i); + return sm->sq_item(o, i); } } #else - if (is_list || PySequence_Check(o)) { + if (is_list || !PyMapping_Check(o)) { return PySequence_GetItem(o, i); } #endif return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); } -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); } - if (exact) { - more_or_less = "exactly"; +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; } - -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) { - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; } +#endif -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -/* ArgTypeTest */ -static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) -{ - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - else if (exact) { - #if PY_MAJOR_VERSION == 2 - if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; - #endif - } - else { - if (likely(__Pyx_TypeCheck(obj, type))) return 1; - } - PyErr_Format(PyExc_TypeError, - "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", - name, type->tp_name, Py_TYPE(obj)->tp_name); - return 0; -} - -/* BytesEquals */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result; -#if CYTHON_USE_UNICODE_INTERNALS - Py_hash_t hash1, hash2; - hash1 = ((PyBytesObject*)s1)->ob_shash; - hash2 = ((PyBytesObject*)s2)->ob_shash; - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - return (equals == Py_NE); +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); } #endif result = memcmp(ps1, ps2, (size_t)length); @@ -3524,7 +5344,7 @@ static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int eq /* UnicodeEquals */ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API return PyObject_RichCompareBool(s1, s2, equals); #else #if PY_MAJOR_VERSION < 3 @@ -3623,136 +5443,1703 @@ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int return (equals == Py_NE); #endif } - -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; // error + return kwvalues[i]; + } + } + return NULL; // not found (no exception set) +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); // transfer ownership of value to values + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; // ownership transferred to values +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; // ownership transferred to values +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + __Pyx_TypeName type_name; + __Pyx_TypeName obj_type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + type_name = __Pyx_PyType_GetName(type); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME + ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); + __Pyx_DECREF_TypeName(type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s_; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* PyVectorcallFastCallDict */ +#if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); } -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); } #endif - -/* WriteUnraisableException */ -static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, - CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename, - int full_traceback, CYTHON_UNUSED int nogil) { - PyObject *old_exc, *old_val, *old_tb; - PyObject *ctx; - __Pyx_PyThreadState_declare -#ifdef WITH_THREAD - PyGILState_STATE state; - if (nogil) - state = PyGILState_Ensure(); -#ifdef _MSC_VER - else state = (PyGILState_STATE)-1; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), #endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, #endif - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); - if (full_traceback) { - Py_XINCREF(old_exc); - Py_XINCREF(old_val); - Py_XINCREF(old_tb); - __Pyx_ErrRestore(old_exc, old_val, old_tb); - PyErr_PrintEx(1); - } - #if PY_MAJOR_VERSION < 3 - ctx = PyString_FromString(name); - #else - ctx = PyUnicode_FromString(name); - #endif - __Pyx_ErrRestore(old_exc, old_val, old_tb); - if (!ctx) { - PyErr_WriteUnraisable(Py_None); - } else { - PyErr_WriteUnraisable(ctx); - Py_DECREF(ctx); - } -#ifdef WITH_THREAD - if (nogil) - PyGILState_Release(state); +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); #endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); } -/* Import */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_MAJOR_VERSION < 3 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_MAJOR_VERSION < 3 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } +/* CythonFunction */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); } -bad: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; + return op; } /* PyDictVersioning */ @@ -3789,6 +7176,7 @@ static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { #if CYTHON_COMPILING_IN_CPYTHON PyObject **cython_runtime_dict; #endif + CYTHON_MAYBE_UNUSED_VAR(tstate); if (unlikely(!__pyx_cython_runtime)) { return c_line; } @@ -3802,7 +7190,7 @@ static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { } else #endif { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); if (use_cline_obj) { use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; Py_DECREF(use_cline_obj); @@ -3813,7 +7201,7 @@ static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { } if (!use_cline) { c_line = 0; - PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); } else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { c_line = 0; @@ -3824,6 +7212,7 @@ static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { #endif /* CodeObjectCache */ +#if !CYTHON_COMPILING_IN_LIMITED_API static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { @@ -3887,7 +7276,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { if (__pyx_code_cache.count == __pyx_code_cache.max_count) { int new_max = __pyx_code_cache.max_count + 64; entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); if (unlikely(!entries)) { return; } @@ -3902,44 +7291,136 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { __pyx_code_cache.count++; Py_INCREF(code_object); } +#endif /* AddTraceback */ #include "compile.h" #include "frameobject.h" #include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif if (!py_srcfile) goto bad; + #endif if (c_line) { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; #else py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; #endif } else { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); + if (!py_funcname) goto bad; #endif } - if (!py_funcname) goto bad; + #if PY_MAJOR_VERSION < 3 py_code = __Pyx_PyCode_New( 0, 0, 0, 0, 0, + 0, __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ @@ -3952,11 +7433,16 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( __pyx_empty_bytes /*PyObject *lnotab*/ ); Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline return py_code; bad: - Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif return NULL; } static void __Pyx_AddTraceback(const char *funcname, int c_line, @@ -3964,148 +7450,77 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line, PyCodeObject *py_code = 0; PyFrameObject *py_frame = 0; PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; if (c_line) { c_line = __Pyx_CLineForTraceback(tstate, c_line); } py_code = __pyx_find_code_object(c_line ? -c_line : py_line); if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); py_code = __Pyx_CreateCodeObjectForTraceback( funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); - } - py_frame = PyFrame_New( - tstate, /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - __pyx_d, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - __Pyx_PyFrame_SetLineNumber(py_frame, py_line); - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -/* CIntFromPyVerify */ -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) -#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) -#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ - {\ - func_type value = func_value;\ - if (sizeof(target_type) < sizeof(func_type)) {\ - if (unlikely(value != (func_type) (target_type) value)) {\ - func_type zero = 0;\ - if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ - return (target_type) -1;\ - if (is_unsigned && unlikely(value < zero))\ - goto raise_neg_overflow;\ - else\ - goto raise_overflow;\ - }\ - }\ - return (target_type) value;\ - } - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(int) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(int) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(int), - little, !is_unsigned); - } -} - -/* None */ -static CYTHON_INLINE long __Pyx_pow_long(long b, long e) { - long t = b; - switch (e) { - case 3: - t *= b; - CYTHON_FALLTHROUGH; - case 2: - t *= b; - CYTHON_FALLTHROUGH; - case 1: - return t; - case 0: - return 1; - } - #if 1 - if (unlikely(e<0)) return 0; - #endif - t = 1; - while (likely(e)) { - t *= (b * (e&1)) | ((~e)&1); - b *= b; - e >>= 1; - } - return t; -} - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); } +#endif + +/* CIntFromPyVerify */ +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } /* CIntFromPy */ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { + if ((sizeof(int) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -4119,40 +7534,45 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; + break; + } } #endif -#if CYTHON_COMPILING_IN_CPYTHON +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 if (unlikely(Py_SIZE(x) < 0)) { goto raise_neg_overflow; } @@ -4165,109 +7585,181 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { goto raise_neg_overflow; } #endif - if (sizeof(int) <= sizeof(unsigned long)) { + if ((sizeof(int) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(int) <= sizeof(long)) { + if ((sizeof(int) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else int val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (int) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (int) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((int) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (int) -1; } } else { @@ -4288,13 +7780,84 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { return (int) -1; } +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); +#else + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + /* CIntFromPy */ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { + if ((sizeof(long) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -4308,40 +7871,45 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; + break; + } } #endif -#if CYTHON_COMPILING_IN_CPYTHON +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 if (unlikely(Py_SIZE(x) < 0)) { goto raise_neg_overflow; } @@ -4354,109 +7922,181 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { goto raise_neg_overflow; } #endif - if (sizeof(long) <= sizeof(unsigned long)) { + if ((sizeof(long) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(long) <= sizeof(long)) { + if ((sizeof(long) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else long val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (long) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (long) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((long) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (long) -1; } } else { @@ -4477,11 +8117,91 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { return (long) -1; } +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ +#if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__11); + } + return name; +} +#endif + /* FastTypeChecks */ #if CYTHON_COMPILING_IN_CPYTHON static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { while (a) { - a = a->tp_base; + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); if (a == b) return 1; } @@ -4502,6 +8222,22 @@ static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { } return __Pyx_InBases(a, b); } +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} #if PY_MAJOR_VERSION == 2 static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { PyObject *exception, *value, *tb; @@ -4526,11 +8262,11 @@ static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc } #else static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); } - return res; } #endif static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { @@ -4578,25 +8314,78 @@ static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObj #endif /* CheckBinaryVersion */ -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { +static unsigned long __Pyx_get_runtime_version(void) { +#if __PYX_LIMITED_VERSION_HEX >= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { char message[200]; PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); return PyErr_WarnEx(NULL, message, 1); } - return 0; } /* InitStrings */ +#if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { - #if PY_MAJOR_VERSION < 3 + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { @@ -4604,30 +8393,34 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif if (!*t->p) return -1; if (PyObject_Hash(*t->p) == -1) return -1; + #endif ++t; } return 0; } +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); } static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; @@ -4682,7 +8475,7 @@ static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ return __Pyx_PyUnicode_AsStringAndSize(o, length); } else #endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) if (PyByteArray_Check(o)) { *length = PyByteArray_GET_SIZE(o); return PyByteArray_AS_STRING(o); @@ -4711,22 +8504,26 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { return retval; } static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); #if PY_MAJOR_VERSION >= 3 if (PyLong_Check(result)) { if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); Py_DECREF(result); return NULL; } + __Pyx_DECREF_TypeName(result_type_name); return result; } #endif PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); Py_DECREF(result); return NULL; } @@ -4792,13 +8589,11 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { #endif if (likely(PyLong_CheckExact(b))) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); switch (size) { case 2: if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { @@ -4841,6 +8636,23 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_DECREF(x); return ival; } +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); } @@ -4849,4 +8661,12 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { } +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ #endif /* Py_PYTHON_H */ diff --git a/bin/metrics/metrics.so b/bin/metrics/metrics.so old mode 100644 new mode 100755 index eaf4b30532107c8e39818496dc34fc8ad97bf7fe..a09aa5098906ee4886ce047ca7fd35b7ef95f465 GIT binary patch literal 72056 zcmeFa30Pc3);HcjNH7bH3l1*Pb|fQe5+TYAWKlW+ayvE=vnXm52s8o1CUhI3QBj(h zwnZ67ov5P|opH>#O&s@VknGFo7^Bh5sAJr3i!m{3jB9_tUsc`Pmn-c!^S;mjd%owN z_90d0)TvYFoH})?>fGDyRYl(7#DoNg@kw%=?ubDSM}cbCe{c+2;K*|fL(4Iak%D%R z(RqM!#V;h%C>?1MCbwi(vn6aV@4j5(jndjrjJHDdvz669mw2PJ_8W|*+Bao;?XLc1 z#&8Mm86iufUm`&EYg7H&R6nEKs?1`PDXKeV z{FDv8=#;DWY%@TKwEX)8>V_^BwBzUCG7$dHaqt`C@EHTa2I3QmLr+>4{_LMSq1-@x z`k?SY_~&83f$#}K2F4G?L<~f~Fba^54*vW&esWwKIj6_rQyoXnQ{(Vi7-!tPICkrcGp-(o|Lbw){h2s+ zyD^UZ_r~FKO&mUxstyVEl7CbHG|0`De$$zZ(btKpg+^#KFH7$3DM~!+$UEhd5Fl>t;wLjJ3HN{10{< z;aK*S#6x}gDKDSb(9~Go>aT3^mzO)rJ+n&6t9>oLd3CLRU(2kLDfLZ_zFC!X>wU6q z;Fj{Lw#xFFy2i@-y30UVy0CmYy3O>r1giXw(uIX}RsQnnz6Gdy8k(ChlDoRPq^UXp zuB8i0eE!;|YSliwv97AA+E?yr#PE&9ElmyJQr9>SbVY4d<+Bzx`-)mxnpz0Aw3HV& zwKP<62sX}K2$>tK%`<&|v%3&tCgm$#XpBPsiUox(^i|f^H&ub)thpEaAoEn8-|hFe z*m(H-9*komIW(#2<_7%zghPX`*sK1IS=1%?wk zweC`1<3NUk1!e>q{dEn#b1PdKl}Dfhp`teQR=kQ^eB>3=YIdWcm%<7ApX;lfKf_nU zIf;=L`s#)A7FX7{#=O^yrO@AdLm-&cUDUv*41Dw-3VhDQzA5O@HJF5 zG{+>EQCC$vrKzF0vc;l-rVk|4!C?f$I)MQc4=}ka1wNNqBYK^{@x+=8>X@LP7&aLy;3Wo=QbxF-`#G0#` z@2lq8vUV2BqtwqOs2EOfqAJBLl?^^M(R3N#WO}TIU>KuBK;cpc!Z3@wb@r^{JRqhp zY(cf6hGsvtpnjMt5l}F^Fd9UmS<26BY+BGL7KWTS<=Mu(DY4XGW}sn|ILFu0ius~M zGs{~Wn-LrRHI7z)OG{O)2r5`g99DQpaeY&zU#!i-rho|H<;@G*${R%FEw5`WZ>X$m zEN}23c2#jDsNjrYq;IP@VinyKhW<7k1~X)qQ(Gz{h+zxPO=(l>S&j7z-7WJ58UmvV z_Rv*1j96~UOQiz+0C%g>rM`)7FBXA_KCKAt<(x;;OALn^oS=z?Ulgvc0n1z#H%m8-D2%l5UR;zoJ^=Gd}Cj zr?gDM1vY$pqr|t_@Qzs$-)_fqTJc$K!&iJR@hfcjWeWe44ewy$3!kkveCat7Z}2nh zaLZE?U#s{T_}=p*-WbQgFH`i!I0pU!g-=oA8~A3$C(Vw(Nb=9J;U80cvTb;SPo5pG z_>|i4&niA;Hhi;T2OGY$T*}jC!*5W0+HH7)&k`Hn;Iqtze^K#SZo@B|DaT!5!}ltA zHreoRC_Y_ndj$3QPXDfNy zZTO26pCvZ@*4dIzw+-K`^j&VlH!40WZ1|lj-e&EW{0u)Fsr)C~hObyH=?ZN4-mfHH zv*Ftnyu^lIGG5Xzwc#HvlK5U5{`99Lev=Jfut?%}*zn7gzB_IBa>Ylt;k&PueD>S$ z70*b#L+NMOr(W?%vEj3s*uf{mhF|uq#JgGN#(-c=G`V8gd5KAH_* zal521v*8`jNqmJ3|7*pk)`s7CkECz2;a$BFukDs4(iP&_l!P3PQVU)kDMVA51#j4t z4HXvr(FPNgwHEyG7JRb>pJ~CjS@5S?@a-1-X%_qv3;vfDe76OkXTdME;A<@SWfuGy z7W{GxUb(nvU17m%7W$_w_-Ph=uLXaW1;5FHKih)eYQd`%l4#vw!OyhN@3i30vEX$J z{yYnQj|Hznn`qr{!K)A>@ELn#XZk{dtcrhK7Ccg9<|oU7M@rEAWLxk^g_)l`3!c7c zde47QIX2G{x z@CRG)ODy<9Eck8<{!j~ksRe(S1;5OKPq*NgTkwZl@GC6%pIPuvS@0Pae6Iz6gayCJ zftEch%7{zMBt+k!vIg3q(yPqyF-EO_SJjgMx*k1>!aOD*`Z z7JQine~JZPVZmox@U<3vjs@Rr!H=`x+bsB83%=cg|CI&5#DdSa;JYn&b<_~8OD*^b z7W!ot{6q_WxdlJTf?r|5pKifFWx*F%@Vyqi+k)R@!B4i}w_5O1EchK3e4z!u(}FLy z;B^arss+Etg7;YP`z`o0EqI5zr_=wv7JP~YUt+>_zVla)Pi?e@UtxVEDK&8 zc|~is1%IxEKF@+Lv)~IX`137z&4Rzcf-kk;=UDJ%7Q8xYi`EJYUR@~#zSe@Tu<&WN z;43ZoHVb~P1>bJLS6T1}ss}7^zyb#>aKHiwEO5XA2P|;F0{=4$eC9mnYpvts6fK;5 z2~uQQXRkjox>f5~m$Ftcj^@4t^xo*GcTqTxb&$T6EqfzxN2Aeh0W-0&H}aARGoi6J zvf6~1$k-cs#DoV4_-+$sLSt{_*CxzF#@@))Cd@xDu{UzJ2{Qo!{Y{vO2k39YOgKP)6K0|T`kOEl4A9?%nOK1SCd`Ba z^fzH98lk@lGqC{uO_&J<=x@Tu3i#9S4Ek0`xawCJvy#2{T~;{Y{vO0_bnTOb|eS6J}xn`kOEl0?^-tnFxUXCd>o? z^fzH%{4xLE8v66X5C1pe909*%!s7(I+Ju>q#r&Hv6S2_Wgn99Y{wBFCIFzn z2{SPZ{Y{vO0O)VROaMTC6XwMq`kOE>{LtTodC`adCd>;y^f%!%1pMhYhW-Tte%pk3 z!N>fYFfaC)e-oY};73fD7kTJ!!bJl9wF&b=5B*J;7kTJ!!kU09O_&#Y=x@T)1nf3p zUhJX23G+e^{Y{t`dFXGzh<4joGTK2-#y7ybZ1DRw_)QyZ@Bf0WeZ37{WrH8L!4KKs zdu{NYHux4B++~A1ZSWN~IADVtY_QJ;Uuc78+u#x#Tx5eM+2C9oJjMo(vcV&5aJmg1 zVS|%x@OMx5pYJbh@Gcwtz72lU25+~)FWBJqHh7f{e%uB>WP|Uu!FSr=TWoNb4eqqT zSJ>cy4Q{Z(J{x?Y4W4a-OKfnF4W49!b8YY#8$8MekF>$*Hh6>$PPW0{J!PAJ8@$T~ zzi)%zw87hL@C!D0y$xPvgCDoS582>*ZSb8on6KYh<5!mr?lj=D^(_c{JoY7NQOEgf z-RF2he|OLJguc*1uexW=o>>@LtN&J!oT5!gp8q&biJ|p@l%kyX+TTs^AFPEw@`m<# zL%Vec$lRfI8mj3yLi8PrLuEC{-5t+IwQ!!^iwy+>rRYIto< z4W8FR8}%d57wULI8}#Wo8I^SI^FQVdeW~;OB z4?uqcq@BHO^G%XFfc1txktDw*$!{cyW|Azil3YuYW=S%tD5n>rTyAY&!1hwvo?H_8 zyf1|k{vHRr^Sv>ny3h55zT}L4&l!C|*mnC&Z)mOiY%M(L;2!XJUMRl~$~%Kz=(DlC z8%pt`Z7kq93t~5?c|wJm89+3PhR$97L0YuP;R)4ex;z^TGYg1jg&VWO6CF|#T9jEz zM48c&$4Uu0RCv%+>wKO5mgEi>gZG@wTKC3aW;;pnVZSz3M%{>uga<842;sx}Qdt%C zWtRGKOMQi<{*`(ERTy<#2{v`idn5J1c({}71{YQ@i@(Hr#!xweX-(w5=8jX4V3sbtPZ_ti!RPF!Q7Yt*bsWMS}@4AO|L) zFw=$7QG-gBBY`l#8YvotwKYsl3K$GtOn!x#X{b*HGuE?Ff3H*4^HBel!k3}GN#QF{ zKSAK-3;@)F>>|w$@L<(S3j@4gwbIA{zj;OqSL#TB{4<1v)JaGv{Dq>oiPp=|8qDlQ zBX2~k8?#x1`ZC}^7RwXDNQ>}dL4&o}+ z>XP8msx?c3C8|}E;FGGgRD!=!t<4fVR<*WC@Hn(m{!JKH$iIap<==@4@1CsdDET4f z9#*I+A94uF6tLp0lay(w^FzuE)=7CJDuOcGLYZfwEHEhf4JkochKh8RU}lAdveuxy z*r04jg?DU@zQjV=ZBX7MC}G>BsKA)lcAx;bOoAuiG)1sif@P|8lLQY|t-1tHRjqp@ z_ziYq_DzGR;QZ`05~TM7d|$QZN$^(H$|Zo-7gcM81Z!0*zcY*0r`ZaPmSdnnO1l-P z^F!M{#X4=f5*1;wt*9`Uz+O8nlsgT|cMQt?s3a>&VPwTK1w#v-Ls1btU8oqg&0;G) z96j5h9A{8!sHC8kqnBDJ%M40>mr(F*Muj;HQno2d+HeW#G}_fD0Cr38X)GgxD1Fi-6=ty8`zg$k_YD^)tVx~1*$bmg2$=WYzbDPm72DLm9PmTtB`pq zD#nZ~BN87{E;lIeM@4Abi;6KLn=F)D4a#i>rH+chbB~2`zd`x6L74{e24h58F9UUc zIJ%2<`UAhqFGkO^P!?DyHG^`RpoD!&QGtD?wxa-8Cc$|;rvPk|phvZ~OYm&fx=ezJ zs&%;pC#cp<5`5(<$!eTo_e;>JS~Fk}NY%l@_IY7?e9Klsheyx(OF zvZ94A6la&R>xx`Mi;mO6S0Hg3NYlczGp;N7x&Qd!X8#cV>Cd9kK9?5#yVkkQe^Ab5 zeG?H*{cRR0!0Yq&;7l7z;)yebC(a>g(K^;=_5EH8%M(GhcCtJo_>=Vrsjptw1_5$< zFSxMZQTghRcL=f4gE(jRJ6CWw!nqM5oS@}@?F_C!z`&uV{?917avyIbl&3!g-W{8w zk(<~W9ioLMO#makm;!~8pL-Noo(wsgxE^R-ldiY~%^PL&a-;b%Hg`?Bm~9WpwwsN% z2iO))Uqm=O=}mb|KZ}%C@8%)dx#V}C&P(G6X*#&7L=&*S{dRxRPBg7)axz%b8hJtexq9o-z*qJ=hTxqA*8 zngmUw(LhE{RR2=gJ2^$l6ljS|q)?&vOG&#rlA*2EacoN8)8KIQ&~7-UJD=$Fc8&N3 z2N?HLOedFO9sLQ=*-xXZqco>iPXyB(Sm|SKAL#Ol-unp^T6lwd)dR=?yPqXKr#JEv z2kRO$8NGA%@xoCHI#~B=o-b+L)o^y%((|ckX);AGDUNnCm^)WRij$%$l@b-%<(V|JO+v%1R*0cU=%HXjej19vP`0}CeeGaPGk&; z!pRkAr?W}>_)pWPLLhHfZUF}5wIxG1Lfg^a&|W274Wz^UX{Z)WK1vXML797zhu1=5 z&U*w!=PqaPFEFtFr_Y7a4|T8FVlhc%4lK9VnU?(dWuUoF8r&hx>VE|?{q9dV|K~XZ zhw2xbmT(4}!Ljc&*kU%v2`h+f9+^b%*4beqaDRI0{4W z6ymzyHR&+``U#x#@T8rBW7Izm3wA5&{OEm%ynQY`__6Sqz~Nj^e*}3~?m~3svN;G| zfkEy@kAx$7BOhX;Gc^=aBX+)GE5i!>20H#X>>)RFUuSH3zm(%vr z8Y2zX!@$}bPQDOCaG$X#a(bVWM}YJd0-1X^3VjayhLRsAirT)6yp^df{7-fnam$0` zlfD?m*|jeVY3@fonmZgFO&27weq>CV-x^%65ZSQYzo5%=SblW+cj*wkppbH8`;I1S37U+^-dTyP5^7LVWw;e91Mg92tV>sAL`DJ7|;CAu%0BC z?DBV!<31c28Sp+qiIdT_6c&WZ`WV#o40My@JA+~e4Cm%zOX7mw4BfQQ8ht(Jz!e(m z_mda517?e$<~ERGu_dtxeWXtiGB}qU$6XjhUJi0h>|xY3JmSs!QFKi@hebGjf#{mM z0)^fyCRQ5oOv!nvI3Ilu8|!Fiw-MLx+ikDI&z{?*f1II$nFM&ko?W zIrpO5v+qQsHDjGj(cx3m4g765CgJpc6N~)){&eh;=O839;2ad)={&ZblxtN9`Z__M zJD0_Y-)o^g+Uifv&{pqH(h@dkFMaPn3=AGp3{s*yYs7OFqd%Wxv`-p^zK+1jv$1Vo zC!%lYegAN{+t}a3pKf~_F|HcB?S|yx}wG;2BVK zJ3PDdBzkuEa+kp3v?{TONo+xX?Dx(pAl=?imU^28L6$vSwQl#*$;V!H$1(!X{)b0BRvg3*W&JD8uld0#fwzAG7~u>@T}c6=Z`rhUjegC!UxMiOk)JmDsIy z3_+%5Kg5(PQu!yGqd)(daPlvuw&n1MS|T4TjZDi zleF+}%NW~X%&}T{S{e*`<)sKOL$RKF6SVx*{#tE_Prdz2S4xN;593(xvH zqQzvxIR3l#T_d!{9Ou9044wvZEqtTYdb2Y)3$Qor#vr}U8=3%MpfoX`90!Z?0(O`% zYjsB8V`T#|4(E4Z-yK1>bw?{wr2a7Np<386TvrYl_ADYpfLI zpfP*L#`Afn2WJW|MY0Xw7wdiAhj+zQJq^2`uZD zC$YZ2TH=#?mfCt!qQB)b;yOMPw`wF#Gu%A4K*SDg17d|@F}eUQGeE|^RH};?UoLRZ z;ri9@*a1I^q1?}6L@UBFwh>?5vtVItd-stsUu!wU(=jNMTW}iQIFNj`j^`+z124yj zUB3`qkx_kJ?A)qr-=>;wBq(qDH4f&hEay#=KlS*D{NI!BqL}>IRq@Za^Ve`bI2NJ3 zOzRko!@+_wEHeLKPe)dQAG;!~QpoAZO<=zr#NgU;A55M*A$j^RI+ z%#Wle%P8n#f^Kj^-$9B`&OUEgo_In}@{kl8dW5mI#P}S`fwB4`YTpefyTKm|;Qq5I zU7p^8)~7gGP_zGf6l)k_Oo@q+=Km!W)|A3pY*eS|x^g{o+$FDq>4)aHn{O23&Q;@n zjaD%(y+)qb7&8VM54(aeaOsbam(hQ`^W=C(s`0M-!FYT_Yo-cRb4Z-OfzPo%gA9SQ zw9r~Cz5vkjxky)Tj$(B8c81th%V2e_BMB3Kr>J7H8!S!*!=)+kgp2E<1Jr%Hx??7E z1?~gmXKxV3c&HQwCSez-#?_Bau2>Uuk!UL5frU*4v8Kml z6VC9mNsBf8SvHBAAbUYBW30Pm6V5!cS6Qs-H?pb1XsU=cEs;&NMpJF9=?dADhhg#r z7L12Vy;?+*c}+~$Hj20%>su)amH|V~Bw(E%$)QvdtRO-Wu+EPpI71RVMFa>A1_##p zA%Xv5Z@3Eg%=i4W&3onqq*zliFCFU>@*iji;gzGbs`Z}mM5JS*{s_AT-qmZi;jyhj zan-*-Pfkp;{_bTgvW-*PIK~Azy|{?Vc&eX@E`2w4>nEd(j7GGU>qS3`@ULRx8Rf@ZShG#^7fNFO0zt5Dv!RI|$zrgTsXX6oW4({GsvpS ztF_~bETo#5NBZMdfG9_QC&~*Wt>|a?H{U810Sg-+Cx9kD+}Ja*t*E#379KnGcr9dzGx(}{kQUf;OQuG zBruJ=4ck!YZEq+GIidSW`30=*=@^YoJhYzomtA;B6fOd9@ycjeyp+kKMq6|%GUG}D zt)sz_;4gtT&d#yei1gji8A5Lj{ix89V$d4rKl)4tY}Xf7`weWE0@xcCO7`8O_Dy{X z91BDDbyzk#+AIG{XV8gkvU`>%^tlmvc|p7kQfT>8Q=B)i(ejH?^ai&%gKxlcK^&i7 zLD_zl%i#=NhehIUUzEwZT>nLBo(YASY0l2)K*V<|JYg?hKh57#;Jjr6UjlaCvZf&T zDi`usQD^6EpmIJDa1}Y9z{`@My@jFGy&om^MiM*T8Pf6gki0E{%L?{wa5+2o2zFO! z?tQ&3XK)(E^>leNvprq@OwHY~vp{need>H-3-bWMLbP^#mFNtfiAva67#{4--xSEv zL~em{A^W1?4Fr8YjDEW#GaPMgpgc^p8PiggM!-v zcyzIw&o;y};n)67rq^t=flj|`UM@)R+Phf$UJcsLL z=pII;?`GbwcI!(ypRcR=>?+CDx~|YVKA?JEMI2)83lM+SrHOls5G{6o(NBIs=o6~L zk`voVWCFT?nQ=b(P)|`LGeBaD<3YAUi}aZ5RNaZXoliImolguFEj+(Ep9K8m;K;+E zB#ad4$M6>8(hAG}Q_Rx2xSUVMk#>LLrK2(B-}{lr`8v^GpwGveVp1%BlYBBuMJ|lx z6JT%LXg&&0%?Pdj@*l!k3Rg=SajpxWdo^s$poO>7UvfXo>n=a`ik(|zvru8CXt4*IL&TLs2h zqvKf;0UN|vgcwuISSfzMR+!GryG%+D38ktKU5a(HO z%0pgM&PAFt=mXo5(6@bQ$QQG>2ipq9^N-iU`8WWlA&jO4-q-hFE-@`jxVD_Zx%f9m zjpgU!wHaBicG$vElK*|+7m?RMW5_AlID_}F9};3EjNDHMCWA452;_l(Vty~^pe<%0 z-iAKK1V2BOAn)0SU_tQqh+$02u0eO=U>y^;0XTX71eZMX(T%h7I}&%S(-?91oe#Vc zU(>DMu^DX58OG#vs>6g@Pp}6QX`=M|&X`j7VhQ z>SHl-=SQL;`SNQF{kn2bFqO*%PeVCp=dqZoNT!-EYA2>Nv=g)H>6n-am4#PKM6|k@ zTs!wUgB?70bc{s`d7(Ihe5tSABza~<<^f~uqjzj!2Q01vA&<1Dv-3ef;v2#SUDDq; z*==Wvu`t_cH)gGKn&_Im;%Y+`F;!O=6XaCQL*JM-{9bV69Q>mntH$m;O)!8Gk-ZR2 z|Cu2vrqS7%OZxGok8VUQThOX`KU|z!k2mLB-rR=ZeWFx$_&YkFp2+$d)camF#0YHY z+oB(farzw}WWLyaE}uZ*D@Qy-@FA4AUDo14l-(~Pl;!l|V&v@Xg@4QZl1d9>o#3k` z<~x(l&cnrmUcfAVEy5GtV2e3j7hASCx$Tu-_|faZ%!6qM0nTkUF~l1Q5WySLW8=$nfH!<8+#1grkO#vY_ZR1uP@M=cn3V1A1oM|GKa$~`T8BtZl*J)i7v$fS9 zCh1|WHw0TOV>scXSVOcb-XQX3y1XDy@gL4O>Iu(Uj}UMe_D&`|H!!X(lDyLN`(P2$ zA}`!aUMbGt0xoW#T<%pcTv`#rHqKU>*0m_Jz>6T7HLdIDJq*~`)#@|z@Fg=1-}`~6 z-+4oQC86&a0t(O*$7;MmhsfNQukt{J;KKE%G14A?y9oS*iCfw(y>}hv=L0!k^bvm! z;_Ek8aID#-h^>w(ta8CV0U;wjSc=#mu+sFy(KGTeU{3QwvRRJ@HF^`#S7Da*PSiN% z*MUZK0if?(i{>_gNxqrGbmcB95<}?g+4B_kyaP4M8srv>Cj#BHz=Y&W(JL_gY0RY~ zXIo?|_^I#Y@%F^o_8%)QAiO}0;=#wfJK-yQV!rgFpbGB^Z%DoMqrgPwgw7M1UtXq# zv$Xv0{6FWO@eFS{avvNNSjd-XCw$2H^528JLKz;zR%qe*wYbohK_qPAQz}$hD@t&X z5$IQZT06ueE<{K&V@@yPVj%47oXINACE2tOFF$+*>39Hr+x4Satnr2$km=v$ydev% z$n+m1y?(uaG#)3c$K!;5CrRW|bi^a#X<`2txT#=gohSz71J}9_gj97>->$%l^D)cgppQmqIO*WGz;ArR#r(cg-fe2MmXK*QOfrDdN zN%+cI&&Fb5DwNVhp+T9RaB&4-X*w=f{R23G7FsPrz&pvpMc|stI#J7?n&Ircbub4R zaV-!fJoh{-R(JB$%P}Y({*3fa7%?ApXYj9R@WM0GVMfLi9xnL3%iB>3e<%ul=>GC8 zJgUJ9hKOo~;gMUQKw;=>Z|Jqc(7*II@FdNhzt(xfHymQAwtD9vZ^G8X{I(QlXS;~v zSsHK6cpoVT(&TK0k8n}E*DKtNE;%uT(2um~)oY*>XFMP>0+V4caizu;7tYqPE-w~F zWA_Ew;cd7_e~L&F%}tf~e=6bueWTbM_YT5seJTdW+f*=FCtff1hUdalah`hHe+n1I zB2UdOG=eUO{?@^JcX3pug5GjNc?l)!ZysOiIK zr7)f1N;u3p6(!;6wIv}qPN*0w6V8E3h2=OG#w1|+{6jq*C*i!qm-RV1z!L%Te_I7_ z{GMYl4KV@^EhhUgG1(*DL__GGVy^$L@A+3WT8MjF*O!=Ucj&Fia8RrB4t%uC@LdsX zf8ex0(7R2qE)2bmOUsS|C>i<$cZIG=ucEG>*<(0{Gx!#L3ZC&H=ThzK&j3e>cI$7$ z5=PF&8LXnSF>u_^PTWqUg&JX@8k==!zEE+k#Y(xtEW7-}L%k4aPP@+5kl|}ElJJu!? zhOWeF8Cw_{IS$;!Qj2td%W1*P;q#x*i|~VT%q*rw8oEuGe|_XmAjuC?|DR2D-(#je z!kz)V=<}goxk~Jp+{y8EVtffaiH?IaA9v}b0A5~tOP>T9b&i=XTye(}T%Dbd0w39mf8_pFm_PEnt1%6o?_wH?y5{4s^O~pX3r?5b z3#J}~2}Y5L=;5jQobeCjcyae{EI?Hl8uKix2^)&?-*8?(4mJ|$RJAU+$lLHtFmkJy z6oeAqE<=Z9>T`i*Fi7!+56g_4Cz=b;{+c&5JX0?et-~`TXUTq8{t4|ECY(E26xLn8 zJwOGVkWlUX`m4`y`VjFT`TfB22Arm6LmwVC5W2MR5NBr;{vqu$#2Gvv`XeA_f|r(` zTq0QBjINPgc&{*)U*g0q2Y2OUc>YOXHH4J*Wcw1L{x0R_LTw}bu%Sop)mLE%#zUOl zGxYgFC_jvO;=K+0vuzL*P|NAfh5m41|di+MvxH7-3yc^4*vyI zCX{>{trN-}g`zOjhNU65pU5H*igR(*=V~cNRzV^|{mvm|6iy!H=eE3BIHHW%&#Y82 zn=vILvT8r+PREktA<@~%?}_Wb1x@5ga-ak2SBfm@sXFX# zEn&;)(RWl_I0yd0uHjPLMtHB_JtK@=twF#V=cE8^kPAK*d%39HI0@d4eb*VRNapt5 z2P`J@1IXbGPwJ*lh#@yL9mLy}`QC_@zrz`v!1I7ORDP^37lVYmXu=;Sp$BdUX`YT< z3E=d^B68a1yy5W_aC*J(;BKvJ3f{k2;|$Kkz&KZf)tecCh}gNc@Sq)(wp6gX23^QT zoNMo;g~Au&rGZJ;37(KHpFDf}4v}_%!)Q2%1=kKFALGDKkdu3vVtVB)re!MlFf(U! z2{+^9UHK&04HNotRpez){}!)zpLY?y759stN7Aqc`Tw;Q>!{<~q`=dZ?Z#@%yXjAi zFX%rfvw+t#O@9L~tYgs8NUJ)7{GZ(7`G($1WfpPHrlffD-{q@}=_g+TWd2rX=fxo6 zt-_oCzGyhaXt-K5OhvLGJ;ir;A&ObIC&h z@Lm;^z>A=?1}^Y;L5Sbmu5s?(g}G)>(k>f}=MnH=k9Zy{j@iB=_1B zQn#a{L%;mVXtd`GOqHO}AzoxN{xQx2-uworG#Jvr##WVvnJOhnm0$v-6!dSv4`ZMT z)sh=964e=Hs`EOi_d4fn;>CTh^SsS_on_e5L}%EqJ`=Z*$FV1Z1$N;=%=&0ugZxvv zjy?kx$5W21O?%zWlimW*yVrTrTJ#5xIjhlO#1M=If|vF>FM1j9$mnE_bso}^HO^E1 z*^*Oq;`ivbtuXYJyQ?^gzy=0e-Jur>oqy>=pDk=8^X=%g1&mii1q5QvvVu= zYWX0;0kX8S(jt@CK)Vy3niffcZwnZ6tPFDhV}?N@%(NNjU#tgwqY*P8B9{2h4r)o5 zzbiSrUCHez+|E0DHD}2tJnHK8bo3^1@xcx5Yam5>qae(UoC?BO`1a})=@!T@oP$Xy z>sgOkJs%7Y1AgVp7z$o74t4$7PsK|$c-wvnu$Gi<9fQo(>lni=mnV^D$KI>rW*e4Y zEyMuKwTtu)VkQ=FEF&(0ZDc9FI$@lD7>2_m zbK4kiaY4TXj)S0;ZulcNI&Z%23?9!_Hen7f>;2e#yX$Lkj=NB4_xPSkrnH3?c4vNO;M+6u$;s!UXK=-(VSk1L1liSjLfjn9+=n zl#lNrGKb*F|Ccj34Dy-6HR1+{f!=X0`5er|rXYm71N*o>4>ktT?2v`VJO; z+OY=v+RO4eF7~DENQdI!1RZqu+vZ8fzr(rYBm^R38{HZ?2o__1y$@20aqz4;+S7|A z6nPpGV)!4Qso@RT3@pFFSa(>AM_!DgEB6oCgqYm>2c$+){7z0|H)%zmuJpCzaFYAG z@^cIR5#paP@yVO(1jE}UL;dR&u+n~d$68wHDCu_+v!0lPfHD1Lb^=$JnZr^+(Fo7-F=p~j!$a9o^-aCLJI^&D{{3p|hN zO1}#=*zY#XKzYx-7{Of@nIy+hK6epDQgLLZ8gGIz9$yPk@$p)WhXGC%1LSTVivbgi z@kbmhu<1E+Sd4cf#&e(7a|Z`JKf)i#G7qErn=n4K4tOBw2ib-e5x+3`Zie_pV)Mtz z6LL+uaw0bz;L;)!=stg-nJxoy&uy$Vv-WG&YEaW1&_MS;&-F4%}b2N_EG^chj))azu@f}{VE=dBPWr-n23k!&fw1&JDH+8ofWyK z%$$d6SNa4DfJwS#40Pq5vKzDI=1<3Ps#4h~eEbX8rK~3%ZpIDfQ4p` zoC5hc7w2rt?(zVRAIQ4ZTDF#MAy8)<7O^*cIv$eXuDgi8sO8Vh!&^0<)F2omV-3&c z5ia+a6f%DgjtI~NsRcBAA{s^-4bP)N`1$LC0$(Q(C&@1W!Dyp-c$>>j4yM8x&f)0N zqB*b2+a*rxi}{Kd2E-B{y+b5NaQr+DLU{9iIJ}969tiM1!^9bfxA1s*!dc4zEb`Cd zR|Ozg-~vR4Z+$>_<$f_51x{>Z9>QYgps6!4riHO^VdPlR!P{JC7(G`0 zjTV{<3q|-o1miMfC`pU3(b(70iqaw{!*3)UQ+NCWhPsgjqH{Z#DRW?35|JcBKTJ{y z1kNQHk#7VoCaD++mP?=j-blb9g=IFLmpO0bFAsTf9?j-srM$>RGX4nK@W{?4hAz-u zbyVawsA9%rd0yFr{1OAKJg<1dh3mx{mKz#>g$KtET)bzCVKM%sN#G|gg5P3PTm&8h_!T@#Wx{XAopY-2X@%)FcikSQAt2>N+^?Etz zcld%UI`TX)-8c_yIEmAd{Le}hUAa|Rgm`|q4Ti!(@8KR}rSAZ}<@}I*x9r#=JL=n( z!#bNGVox!x^9QkUJ0wOU=GVYvHTN0Di%h4g&fWXa0v|*TH?*|mx?F~olf0Ru z5m<0vI}hHce+yY?=FS(fU#{Fr@$aLs?_mUS9=iZu1%kjlwNE`z5!;Y*Kluf>c5GAH zi8SJf1{UHh(TW;uS%MiY?@5BpI7`gH5au4LCrZZ7;5YlB)>j;q3B#TQDtH2FdIdE4 zsrz$qK1TkZ?ayyB1d9FnODtcpKOZAd;tcg@IdEO+%Q@TFPewr_?$2idHuvX7=?c($ zHk2#td3A)`pAQ9o<#n(vE`a5z>x*%z`QiQ?{x|#cSZ}xn`*S__=W0gBk<%fR2e}td z{+nVOzLi39f4)WR1DIgE|0r4(87&X6CI3x)KTVJnsSWxSK!^fjgLY$s#=gugiSHF4 z^OpusLO$P{zu&p|WUMHRnK3OqdcWGDbFaLJTXX`UEH6ANwGik zryTWhK*sjxl6)Kjor|x)kciEh7HNf;t2i0v4!!YD#?s*qov*}wJ0@-q$eA?3?mJ>U znmt_$kh`!ZPB>cd5M@&Q3M@@^t#}C#TkW+_2{94N2;ZpW?z>xm<&WHb$0i`kI)n4* zW{j|pVBxO3kGlU7x~o{%4p{BKOnzAR-;x3L-<5wbl!@F9a^qejl#PYjn+LB&wECl6C1 zCP(eRl|WkeU-vzh{kKqND*fh}?g_)R!*9 z{(C*t8fgFB_;cI-dq2Lv!;HGxe>am=)&TqOWN?)(W9+{&H*M~}kud}8zl$I>U959A z_g}sQ*Hg<81_|*C9Qx~$z}$aNJ}xrh z!8;5g4Ex8?yx`@aE;o-|gBWV$;SQ84UQ%G^RRjF`#Zdv z{0gEOo5usVxpDIdqfI8{^T}eu$QkGs(BMEvpaKUv1h(M*F%43$tfwKp!`Lw57CK1R zB>IUy;tjF!cC5>?T!MMd@lL>_gN{pubg@SVQmm)I%vi@M`t8O%V`9f94_D&x`&UxD zm7o?0_O24_5hB4pJQD^Oo{4vmoWYU8a`?(c=mi?&n%#)e+z_fDw&jM#J#@ug>V}5Y zoijKYBZze6X7pHzABR6;fhV3~6QVIEFUh^{GU_D$@ zQbMO?>PLZL__R!4NYr)7ntIaq?KmRTZOO@ArOAIG3O!{r$ARfevfni9M&%GPs z3j-B{t@MEDG|*SyiA^&|^`PH}`qJNF{d238dc>4%GKUuNkB_*W!C!!|r<6L;sUjx` zOTyEV@18CEuH|UyciX^qWgSR*j^n6&KNw_}&=}=uni}B#K5_eQbPZL=m4p5#8tmkEZ%aHG~Y5nq92(h?k z%&LIYI4`Gx2Tnq~Y^i)!hJne7ou~WdvocjaOZ@Vb%x7`ghyO0KX&jeb0L|m_8Eg|F{}(WPSpMyy=^e?5R>D@=L$X$Q9 zTK@oJ>z{3M{lj==Jr7_piS>`ETX_j48jDH;jeahUU_V^{*Z+s>A4iR2C=~M9#w!Um zg!xLsdJ4{^n*RaUe|m}0Fd9ngU+#nH)%OKY75jH?<^|kK-r?Jh5o2Oj2<^oy(4|}| z{1GJPSh8*fAYwv3(9+-I$A!H@6f-XH{b}qYDlXi4z7ZD=jZ{Js#5+EZWquR(8ZaJA z0hv7>Tm&{E9#HT9ARgQb@>o1zg!_-XNt@qY32Z$&(KNW=qim+P4T&+}Iy*HFhkU1PSP zSa~fiDjx{Eiu()`4#FvsaM%udeKnA{r})Un`~^JAbH$lp61iMVUxA}1A6@$H^&7FCg}5i|K@B#!7cN@fa~pUf{wxI7AI6^|2d^12{*-e~GX5-PMV>#Byr_1ij}!{$79Aqv&oX#{ zVU-cjnJ)1s=vLPA*P$~0R0F>fw+Zy0v>kQ*wHJ-}V||>~JA{Mvdz@xHe|W?A36e(S z>+m%?ChhXP6LRl56O)QCBVtShfCxUzkv8&97<08~ERv1S8;#G1#@uSa&fo?B=&y2i zI{_iUWbn?#cc^f3e6O&p0^f_k!Sdj0afZ*#>~r&e!~4We%n$D@WzdaRs-0AkkIeiY zB(uc#7Sd#9>)=7StbFSX9>drX`qGoXv9*}bxy+m&Qa;yBqxcu51pbIqY*AX@z2bg> zaWFQc-nd_j^DU}|>@@Z1Kq%s9RHIV0Xa544EWx68O=+*XF;oDKumXY#9P z;@W~|I0x7B5v6$6Fep=8ZiH`Sl;mHD+-we=tDjTBo1DSD^h$Uu{l`cG{0T>Edh88i zeT#>t?}7}A#;YLZaCZ}0B7YM>o0bzc&QeM|D0|_H+ftRtnW8V|+xlJ#_gCm;p0{sZWz08!*B|r! zZR7%BL3oq-{>@@x>g3yDWf=Z=q>beMdLHbC75D-!O?-Z4zJD_X^s)1HIJr`G949;K zH$l>sXTTIa{DtYrP^pi^JV?xbq{MK4j_P?gh^VJgjD~rgPzk?lF0X{HtkY9wz7^CWyF z7a~amBdR%rWf-w%KjRCBjog6|jRcZQUnr-<^5PbbG-A54q$*EcuT&8nfm9D-zo)!Z zXgU=V&OLeqh{R&XZqa$d*3dK_@ygbnb zgim3qH)52+cc;{|h%{Jn%VSfddve zV1fT-3yc~&E<3w5>qM8oa=x$C)!5{!Y?&8m@HP5dU0I_pt9H$+yVTcsqQge#YpbmC z*DrK6HTujBKSmF}^L+~!G__Ql5l}I?G=o!fOH-AvwRNn+QC?oz*x2N+ z^w%{tww9N>8Un3;a%lDWUFclts;;Z@yPD=+j3Fsdd3j@HgKr?hR)0%f<2-}3y!?_t zW&Ka1m3-$fsP@%V2I~DkMGS|uMJr{jT38cktfB&A%gg(5Sx{GBk16xJssb%7m@*ir zvZe-_z;Hg-rIqyoOlhE1SjuHEfg$VbrSXNnKPHtw&@sc{TvSzM*oCHblf)Ca;w)!g@t6-KIxDUMo_HGT#t*WnV zZ6%W2;I`F1xOG(}WF3ue)j|iz-{Na%x>U|cC8UNFm?>XND>P;2(uMw7Of>v()Y#ML zDg6W`uD_&0Df}ZQ8-g~u>al=*!f%=y!C1ICL{fyKxYp;vWg6g#b(~%0CN)hhKUku! z6GqKGL3T9Pzgosvmc~jF>%wp-lRqpKX!Nx;%cX2z{3ho>c5<)zbbmA!4J? zSKUf;8{tUFUm}CS3807JTTgJ+R)Va)#aCI)$l$~LG&DE0!0KaNGkloYI)7bdeO;>v z0Gt*sm)1bDqH$C;H8j`33jVqVpEABV9iytpj;iLQs0ehzsIfT+mM6GIwYpjYjiQS& zb%GW$&aAC$!R$^E)9AAJlreUtL>g-j^%&2b z7a6}tjm>LyF>E(CwL){Oo_f=QkiLIRr%Bx^+G9e*P9P0h*I3nrh{8a^Rgq=Rqa+$F zJV@40Bo~K6>O*6R9w$u4&M*soB|n7!dS7D}Xe|w@i#aEATdP{?n*Eh?>wSpBRlM!?OLRr4$75!H+d#quG_UkeyZUHU_LtFN-9sus+! z%3aDSQOM?|?y#%_zE`cgqzr0)- zyWGLqFRyN@0uKM8O(3WZFmfkGCAKZA4vhThfx_rAufAz+CAPrwa#b@Ls_L6s5s%TJ zYGy-IwZNhTAw3qIiYxhmZAE9>U_u*1O5F}2(?ux4=fK}}Fjto8ewTgRVrim!3(g1Y&2 z&A#fo%CSu?^G+djitLXq(ClAs_CLL%eC$xcq_naHMg`Ya0gf?00$k`C??OQJOInKO zuJYq7q&5=8LwLmxC`&P~mF1h`g}c%U)ge^VmL#b1p28e^lWOzATaN@kHL&Xajb&S#1PAahX@KgVZac9iRj>bS9gbi4Q)20O5lrorabjt_bvVAM`3K=l ztiyil{=i=S?K7pxS5s40Rfnj>7|WY_OG90w@ROesy)6C9n`+==mj3WF!2&0^8DnM& z_pMgq{C~b7#WUhSdx9yf+|z6p9E#ZAfIUc^n9Nfj_B$NTs%o(n@od%7$V;p|>a>Ez zNhi54t*oo(Ss0f@dHZi2f6__9LStMN6)mloR8)+QS;}m{S&9umoLZBD$1Ty<7A&kD z&mkHrW1Nf~$Fe9SN%H_Sv0ceVj^iQ+{;^$j=+G%VBluf~s#C|%@#E#@?hat%Z)qJb z^x&~$jH?jW1z&5eY%j!Bd%UaASLMpdAMF~KJuU}Hbw?F9dmMPm{VkPMzPUKn_YVS< ztqU8g>YB!yr!sYswV%|$Lf#}VllLy;1kAHCKMH2abFe&O0FQiwxR2u4C=bdl%yBsy z0}ag!*{{4D8t`PQKIP@DxH1D4hvHa1${|kDgc~ZM4cc)|7U$+lpM%HnGaTiO&5nhR z`HqteUJl1jKEJ|e&vU9&aAARj@ymAdbCm%n9F;VI?-=F*kyeif5~w>aiAK}#+${}d z7Ro&Vz<6ZnxHKAFhq4VNe^%**1vtN=ykKE8%J1F&;cCEm==2yK$V|jztZqC5EkOTe zC}*KufwC55FUm#ai?SPKDW0@GPdv(?lMz8_@)N1%8EN-7nFNYzK3$zvS{?MAr8k@ zl-Ve=@e=$Zl+E~J!B&)|__|L@3SfLWtqkR!hoaFPDBJ%MjUEmAWj_^-@?8Sn4Vv-v z%k{TtbPvj9+W_Njm(o|G(Pvry6MEwr*w%jmM#;}%vT!6^Hp7w7mX>hT@F6MPnA1$) z@dVl7x){7*8%Jtdacagi=dcAS?T#~!9DmZOnLlS&_AkVr-U!`^P#@y)%AR8<@H^RG zeMrMxlZMB5N(2XSOYm1{!~G7p0^kh3ELY%fB5;(CANt`s{FMQB5q+^ZHSLDP$*CD# zNt07u*AFU8&03sXn3~-&IH@opHOrmqLfhojw8^O{Vq6FMEQ0?vqbom@`!L{k09Qc7 zoK#m8Xo(+9{_w#`3SXh{{C@%LXi;*yQ`4p^-h9_94fJ@FCq68jfjb(wUlDU&YFbC) zg`kF>_`4o$1!(&nN(cBXPMn&W(UCMYHGAIB)QqXAY3|gNX~U{fFBJ8u!xCozm?D75 z!-PIt(f4zpKLq@@Dj%2wC1l-JzwXT{1K^1$q>sD1^%j zpSu|}`$1De8eyX<(d>n#G@u?sdr@mNdIQIY>^D;O8lwC4 z=sXdqKcam(-i6}ZeAM^)L?xpOH1q{HbKx+LS$7YcW}t=5-y?tYKac&fKCXvMuGvFV z(~6|gT|lQ`jb^mF<&e|u^v@SVg%{zQm^NfmR+_&OYMRje;l zwW%0N6Hg!q3yd`;R6HeZ~C_|Y*aX?p^O# zq2Y%szIYh%o*#6eI*tPT4aZ)ahOfR}Lp#jvzmH%L6%z|n3uX>Y&Bn%J-Aw2Q73fw9 z9&@l?-^a-pu_>+&#i`9nQwBE4v|-Z+G*!{CGRXEA#yF}Cc4r{6?RP>>SUWK(KOuEV z;{4QZ%=ps8;?!k{USd}y0XrGkVuf|5E=M?7fxoBl*NeYRiBnRyCQb)+;@UXG#TH^W zh|dJE|39QH8bFA6e19r!;yeg35b;3TCH*|P{~UJ1oM|{uc^|@gk4_qai%h9{2)-A1Ih}NQ$g9P zdKxf9;JWxDWJFrmvH@VXxPbO&RWEymb*F=i!RlDY&2>4q(rz?SWCY&m6Ek~iDaF+W5Q|41XyaeT?zx-{}vBpfAxOe%zO!|IaKHiwEO5XA2P|;F0tYPc|2qqG&y*^cs*))Peh%TC z3m<$JNqojB7{_S&$(DtYlf3x>2^;y}+FcSpN*4Sfdht0@mCdT1IWc~W_AkDVHWA*# zJQF@hJBd%P8W^b>@yXzw3?E#p#K)`T>mCIUSM6UZ7+>=}@Ud8+P5Flf zC92uV?+R2|s>%vgHmkB-mEEdbrpgtn>{aDfRqj;f9#uMWFwHMMAI?4vhBxQ;+PdQCFLpe)1M>$Vn;P@tqG?WIhrxm$ra*zesctOkNt?9`$BAd(`MkWT(!Eg!(B5D=Kogx;hwyQm@qHZ^_4SE$iMloQ6DC-H-P*N@x^-t0w)(FBQjf=a ze_ymd%0B%V@Dc0$p`RnpCa&XK@iyY~99K06%Qb{QNk_-qSqAmIYl(YY&&(MeV0REt zv0vw@e=qR^#2bh|OFnsYdaTTgtBxH*FZ z{L`Awr8a?;OlP~MLwp7C0`VI9Geum^_J}{)kImT`#C-?&GJHzf#eIx^uDRdfE4`%r z&JQld_cEOs=6ldad-5|`lD@7}UBq7}e()j-m@_lDU4enL%vqX+fir|NcKTcd8 z+sXAG;vVr+EbPfIyG!~DKevG5LcSz;iu(Hbw1N0);y8wAuFb?xi{Mufe~LKVFjtBA z7UKGO^(Nwv5?B9kBR)r5KflU3Me%btasAxAn|PAArZ2yeBl;VOYd?8{_yxrE`-10* z?)}M=S4QwNh<}5)mg{Wd4@c5pPke^B`qM;w zI)e8Q-%niIWh?Pf;_Byi;L^`^->LK4^~4WswFT01UBY=K`gNCE{7RPhm&A1)rhtrIIU@x8Tg1JB)i-B%aQidjGewJ=^EkMD3b@RB4V+hXy?BB6 z9OpwFNB<)%M|B+X&U21t`c$G2buE;z;6XE_36?7VWaJN-z2V|dmD(0 zo#^Z5;3V-UHJu|Ckn`ely<~8#3y<3Hb!@K_G2uu*nUB=7oVS+rbw68Y&Ahb+uL<^* z_c5JK#C1P;5%IL@b07I3;@1$@{o}`o?;x)G##4#kL%eq0IwEA_a_s{ix8K_jT-s}) z*Xrs2r-;||DPrZHi6=O>GTu$#*7_&V@$*6i>gW zR(+TMmm2+(z0}jHS&?z&-DdJV$aB&fgdB^mTSjh^j<(U)v6}+v;#lr!2jmJJ#2X5(qG}gg%i9s z#vh?@k4xuM4t&6YU+ciX;=u28;CDOlJq~=o1Ao1m|{PdM;q2j1?$2OW6H zf#2l7cRKKU9QYmw{-gtc&Vj$?z>ixVU!SJ}j~l1;4*ezv-s8Yiz&{dhK;B>N(7(lj z-{rvXb>NRU@cj<_MF*}g?1Eg!_mkx*zrq^iZ_kth8kzXm3WH3HX@x~5F48i|L}KuA zvJgoL$4nl+42~4Ry#%Hh(9KwuBq6Jb*oc=QcA0nu!+T~;ljRQkCURps-DOy`dNbQ- zl`MCe_m=(c%w&8*q}hr1&=3) z%Xs}AbTk>f$Bnn0@scwrVU*R+A4wZs4~uJsQLHfGZucsbpMrK3n~jtX^>z47tW)_N~*iU;@h)%OY^QN=dq zt$DQ?F`Xz#r0TW!Kqt&{q~K^^!hg+o##mIDF8?gh7l8r@~u9zYCN{X2tQd4cRyr*%dA%A5iZ7f#JrO9%Sp(XX( zGo{8-sel3AokNGoX}K_w_Xn&Nwx1eThrlbM9oO)lk)$xO7XC>OHlWc;`-X@sp)-V? zgfmm1pa7FaXoOW<6@o2aNdB1EIJ%R6KDGUN;ia&-R7ad!8BEm?>kZRIoXPo>nW5U` zLPLfTXHs8Znc?!2A-5cOIHjRS>TZBnr7S?WP_S03i?f3f|n>t&Opk(MJ%Q`Ey6>{Tkh6@m2Cn~`1;3^8e zLX3(ytS^3F85J~cXOLvMMHmtLGNle+cJBZ+3xaFZ^E>*xu+C_;!ZE2-Y&TGbWVuav z@qC#I5a2Y`EK}~5%)lu2m8kq=xqnz_S^LaxYI7EI($HuojmZoqb_3di&edTH)Mlz! zwx6;W9rxP`nNZS|8Bo}F7Vl&MHI=at!z{nJafoSc87U1*X<ldZvit?D|QsJjpfpz&Pz>OOC%w>-8nd(Lw5;MY;T6uSS8#$GBhk)fM8|= z$n7}%VQo}-16!HgW!Ho)=+LM?G(75W11D5NduK;ev%fa6PVz;w_F5`hZC7z6c1t1Z zh(j^i+$fcI8$X?HWR(>x+Wzz|vh>auc>sn}yAem+{Q_(0D#tY*e1<<1ml5o#`QM*dSz3 zw-e}9;1&h#mo!~L*qyY&D8aFwA;STl zMo>nSPW1?y!Z#L0h?i!Bv*!Ix+1zAy<3Mp3dO@4?jg1URg@!e?$JlkkELE~yG9S}| zjRFRV(EhRpw2m8#K@HRMj$(gdA~XVQW!gc|nYk)6X7%6#4d|gxdOCz;R7y%ghQ?!C z#k`%8N^BayZp`)$&RCjKV{vnT+XYZDm1H7AgCbLsRFb6v6x5S$oyqqJwhIL7fTYlk6-!f84?t)OLjjt@ukXK%qM|Aj==fw?CJOj3nFDk}|s`%gypF z2O3Q#Z5%353G-PtacFSykHdth@SZMDPu~)1&$8drT@w8Wrcj5WB zTsZcE=iQa_c{r(HE_uxTKKyC^`redEeNW12+cflEq#UP{cb3#%-&0cgTPmyns;6=o z@$wFoh8I3)4OG_AKI%VVZxT0>w%Y4^S1R?rE6rc)Ps@J;?VFgOzQ?6fcyiM*7BukfXQD0VY$!uGYaQ)xKuR2i~{_bP9X*w?JL3W21)3bj)y z=c}snr+qEuLd0RUQ~AA!y`FDX`L!!GXDiiC(cKYyJ^!E*j}5D?h&$eoXs_*Wi1)-| z&YIP*KiQDy)#?r9gOE~wwbyeKDuqKbd`0tr9FbxB1p#oW{5+mJhcE4aitWb@9@z!& z9qRd#VIG)`>T6i#A7G0|RDr#oXUQ+o{$bupn|KEJu%0qZ=6uvZH#Uwh;{^c60c|yb>67>EH&I)7S literal 209552 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 z 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 diff --git a/bin/programs.sh b/bin/programs.sh old mode 100644 new mode 100755 diff --git a/bin/run_tests.sh b/bin/run_tests.sh old mode 100644 new mode 100755 diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 diff --git a/logs/cov.out b/logs/cov.out index 176addb..807cfdc 100644 --- a/logs/cov.out +++ b/logs/cov.out @@ -1,10 +1,10 @@ -Name Stmts Miss Cover Missing ---------------------------------------------------------------------------------------------- -/media/ph33r/Data/Project/CodeLib/Git/mllib/lib/cluster.py 103 0 100% -/media/ph33r/Data/Project/CodeLib/Git/mllib/lib/knn.py 70 0 100% -/media/ph33r/Data/Project/CodeLib/Git/mllib/lib/model.py 52 0 100% -/media/ph33r/Data/Project/CodeLib/Git/mllib/lib/opt.py 157 0 100% -/media/ph33r/Data/Project/CodeLib/Git/mllib/lib/timeseries.py 60 0 100% -/media/ph33r/Data/Project/CodeLib/Git/mllib/lib/tree.py 158 0 100% ---------------------------------------------------------------------------------------------- -TOTAL 600 0 100% +Name Stmts Miss Cover Missing +------------------------------------------------------- +mllib/lib/cluster.py 103 0 100% +mllib/lib/knn.py 70 0 100% +mllib/lib/model.py 45 0 100% +mllib/lib/opt.py 157 0 100% +mllib/lib/timeseries.py 60 0 100% +mllib/lib/tree.py 158 0 100% +------------------------------------------------------- +TOTAL 593 0 100% diff --git a/logs/pip.out b/logs/pip.out index 27f1fe1..2ce437b 100644 --- a/logs/pip.out +++ b/logs/pip.out @@ -1 +1 @@ -INFO: Successfully saved requirements file in /media/ph33r/Data/Project/CodeLib/Git/requirements.txt +INFO: Successfully saved requirements file in /home/ph33r/Project/CodeLib/requirements.txt diff --git a/logs/pylint/lib-model-py.out b/logs/pylint/lib-model-py.out index b949fd7..5df0079 100644 --- a/logs/pylint/lib-model-py.out +++ b/logs/pylint/lib-model-py.out @@ -1,8 +1,8 @@ ************* Module model -model.py:180:41: I1101: Module 'metrics' has no 'rsq' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) -model.py:181:41: I1101: Module 'metrics' has no 'mae' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) -model.py:182:42: I1101: Module 'metrics' has no 'mape' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) -model.py:183:42: I1101: Module 'metrics' has no 'rmse' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +model.py:177:41: I1101: Module 'metrics' has no 'rsq' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +model.py:178:41: I1101: Module 'metrics' has no 'mae' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +model.py:179:42: I1101: Module 'metrics' has no 'mape' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +model.py:180:42: I1101: Module 'metrics' has no 'rmse' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) -------------------------------------------------------------------- Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00) diff --git a/logs/pylint/tests-test_metrics-py.out b/logs/pylint/tests-test_metrics-py.out index d7495ee..6128513 100644 --- a/logs/pylint/tests-test_metrics-py.out +++ b/logs/pylint/tests-test_metrics-py.out @@ -1,3 +1,10 @@ +************* Module tests.test_metrics +test_metrics.py:61:22: I1101: Module 'mllib.lib.metrics' has no 'rsq' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +test_metrics.py:69:22: I1101: Module 'mllib.lib.metrics' has no 'mse' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +test_metrics.py:77:22: I1101: Module 'mllib.lib.metrics' has no 'rmse' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +test_metrics.py:85:22: I1101: Module 'mllib.lib.metrics' has no 'mae' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +test_metrics.py:93:22: I1101: Module 'mllib.lib.metrics' has no 'mape' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +test_metrics.py:101:22: I1101: Module 'mllib.lib.metrics' has no 'aic' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) -------------------------------------------------------------------- Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00) diff --git a/mllib/lib/cfg.py b/mllib/lib/cfg.py index 042a6c6..05614b9 100644 --- a/mllib/lib/cfg.py +++ b/mllib/lib/cfg.py @@ -33,7 +33,7 @@ Authors: - Diptesh - Date: Sep 01, 2021 + Date: Feb 11, 2024 """ # pylint: disable=invalid-name @@ -44,7 +44,7 @@ from inspect import getsourcefile from os.path import abspath -__version__: str = "0.4.1" +__version__: str = "0.4.2" __doc__: str = "Machine Learning Library" module: str = "mllib" diff --git a/mllib/lib/cluster.py b/mllib/lib/cluster.py index 59830a8..5f889ef 100644 --- a/mllib/lib/cluster.py +++ b/mllib/lib/cluster.py @@ -188,7 +188,7 @@ def _gap_statistic(self): # Create results dataframe df_summary = pd.DataFrame({"cluster": [], "gap": [], "sk": []}) # Create new random reference set - dict_nref = dict() + dict_nref = {} for nref_index in range(self.nrefs): dict_nref[nref_index] = self._nref() # Compute gap statistic @@ -201,12 +201,12 @@ def _gap_statistic(self): # Create new random reference set random_ref = dict_nref[nref_index] # Fit to it - kmeans_ref = KMeans(k, random_state=self.seed) + kmeans_ref = KMeans(k, random_state=self.seed, n_init=10) kmeans_ref.fit(random_ref) ref_disp = kmeans_ref.inertia_ ref_disps[nref_index] = ref_disp # Fit cluster to original data and create dispersion - kmeans_orig = KMeans(k, random_state=self.seed) + kmeans_orig = KMeans(k, random_state=self.seed, n_init=10) kmeans_orig.fit(df_clus_ip) orig_disp = kmeans_orig.inertia_ # Calculate gap statistic @@ -221,20 +221,25 @@ def _gap_statistic(self): # Assign this loop's gap statistic and sk to gaps and sks gaps[gap_index] = gap sks[gap_index] = sk - df_summary = df_summary.append({"cluster": k, - "gap": gap, - "sk": sk}, - ignore_index=True) + # df_summary = df_summary.append({"cluster": k, + # "gap": gap, + # "sk": sk}, + # ignore_index=True) + df_summary = pd.concat([df_summary, + pd.DataFrame({"cluster": [k], + "gap": [gap], + "sk": [sk]})], + ignore_index=True) # Stopping criteria if self.method == "one_se": if k > 1 and gaps[gap_index-1] >= gap - sk: opt_k = k-1 - km = KMeans(opt_k, random_state=self.seed) + km = KMeans(opt_k, random_state=self.seed, n_init=10) km.fit(df_clus_ip) clus_op = km.labels_ break opt_k = np.argmax(gaps) + 1 - km = KMeans(opt_k, random_state=self.seed) + km = KMeans(opt_k, random_state=self.seed, n_init=10) km.fit(df_clus_ip) clus_op = km.labels_ self.df_summary = df_summary diff --git a/mllib/lib/metrics.so b/mllib/lib/metrics.so old mode 100644 new mode 100755 index eaf4b30532107c8e39818496dc34fc8ad97bf7fe..a09aa5098906ee4886ce047ca7fd35b7ef95f465 GIT binary patch literal 72056 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 literal 209552 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 z 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 diff --git a/mllib/lib/model.py b/mllib/lib/model.py index 2c82e84..20c7c73 100644 --- a/mllib/lib/model.py +++ b/mllib/lib/model.py @@ -43,7 +43,7 @@ # ============================================================================= -def ignore_warnings(test_func): +def ignore_warnings(test_func): # pragma: no cover """Suppress warnings.""" def do_test(self, *args, **kwargs): @@ -145,8 +145,6 @@ def __init__(self, self._fit() self._compute_metrics() - # TODO: Remove this once GLMNet is updated - @ignore_warnings def _fit(self) -> None: """Fit the best GLMNet model.""" train_x, test_x,\ @@ -159,7 +157,6 @@ def _fit(self) -> None: fit_intercept=True, alphas=[1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1.0, 10.0, 100.0], - normalize=True, cv=self.param["k_fold"], n_jobs=self.param["n_jobs"], random_state=self.param["seed"]) diff --git a/mllib/lib/opt.py b/mllib/lib/opt.py index 6db5756..d9a3b62 100644 --- a/mllib/lib/opt.py +++ b/mllib/lib/opt.py @@ -205,7 +205,7 @@ def integer_program(loc: List[str], """ # Initiate IP formulation model - model = pulp.LpProblem("Travelling Salesman Problem", pulp.LpMinimize) + model = pulp.LpProblem("Travelling_Salesman_Problem", pulp.LpMinimize) # Decision variables - 1 if chosen, 0 otherwise dv_leg = pulp.LpVariable.dicts("Decision variable leg", dist, lowBound=0, upBound=1, cat='Binary') @@ -587,7 +587,7 @@ def integer_program(demand: Dict[str, int], supply_node = supply.keys() demand_node = demand.keys() # Integer programming - model = pulp.LpProblem("Transportation problem", pulp.LpMinimize) + model = pulp.LpProblem("Transportation_problem", pulp.LpMinimize) Routes = [(s, d) for s in supply_node for d in demand_node] route_vars = pulp.LpVariable.dicts("Route", (supply_node, demand_node), diff --git a/mllib/lib/tree.py b/mllib/lib/tree.py index 18dec44..0b052cb 100644 --- a/mllib/lib/tree.py +++ b/mllib/lib/tree.py @@ -429,8 +429,7 @@ def _fit(self) -> Dict[str, Any]: verbosity=0, silent=True, random_state=self.seed, - seed=self.seed, - use_label_encoder=False) + seed=self.seed) elif self.method in ("regression", "timeseries"): tmp_model = xgb.XGBRegressor(n_jobs=1, verbosity=0, diff --git a/mllib/lib/utils.py b/mllib/lib/utils.py index cd6c09d..43b9252 100644 --- a/mllib/lib/utils.py +++ b/mllib/lib/utils.py @@ -29,7 +29,7 @@ # ============================================================================= # pylint: disable=invalid-name -# pylint: disable=abstract-class-instantiated +# pylint: disable=abstract-class-instantiated, C0209 # ============================================================================= # --- User defined functions diff --git a/requirements.txt b/requirements.txt index ee3b7f6..0766ffa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,12 @@ -PuLP==1.6.8 -xgboost==1.5.0 -statsmodels==0.13.0 -openpyxl==3.0.9 -pandas==1.3.5 -numpy==1.21.2 -Cython==0.29.25 -pmdarima==1.8.1 +Cython==3.0.6 +numpy==1.23.5 +openpyxl==3.0.10 +pandas==1.5.3 +pmdarima==2.0.3 +PuLP==2.8.0 +scikit_learn==1.2.1 +scipy==1.10.0 +setuptools==65.6.3 +statsmodels==0.13.5 +xgboost==1.7.3 xlrd==2.0.1 -scipy==1.7.3 -scikit_learn==1.0.2 diff --git a/tests/test_metrics.py b/tests/test_metrics.py index 29a5a05..59cd8fd 100644 --- a/tests/test_metrics.py +++ b/tests/test_metrics.py @@ -97,7 +97,7 @@ def test_aic_linear(self): """Metrics: Test for AIC in linear regression""" y = [34, 37, 44, 47, 48, 48, 46, 43, 32, 27, 26, 24] y_hat = [37, 40, 46, 44, 46, 50, 45, 44, 34, 30, 22, 23] - exp_op = -6.525 + exp_op = -6.125 op = np.round(metrics.aic(y, y_hat, k=1, method="linear"), 3) self.assertEqual(op, exp_op) diff --git a/tests/test_timeseries.py b/tests/test_timeseries.py index 886d973..c709c08 100644 --- a/tests/test_timeseries.py +++ b/tests/test_timeseries.py @@ -75,7 +75,7 @@ def test_multivariate(self): mod = AutoArima(df=df_ip, y_var=y_var, x_var=x_var) metrics = mod.model_summary X = pd.DataFrame(df_ip.iloc[-1]).T - op = mod.predict(x_predict=X[x_var])[y_var][0] + op = mod.predict(x_predict=X[x_var])[y_var].iloc[0] exp_op = X[y_var][0] self.assertEqual(mod.opt_param["order"], (0, 1, 1)) self.assertAlmostEqual(1.0, metrics["rsq"], places=1) diff --git a/tests/test_tree.py b/tests/test_tree.py index 7a80cd7..1e89350 100644 --- a/tests/test_tree.py +++ b/tests/test_tree.py @@ -136,6 +136,7 @@ class Test_XGBoost(unittest.TestCase): def setUp(self): """Set up for module ``XGBoost``.""" + @ignore_warnings def test_xgboost_class(self): """XGBoost: Test for classification""" x_var = ["x1", "x2"] From 69b9d2b5f963d067263ddcb4aabdef7f40b92cde Mon Sep 17 00:00:00 2001 From: Diptesh Date: Sun, 11 Feb 2024 20:10:17 +0100 Subject: [PATCH 08/18] v0.4.2 --- .github/workflows/checks.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 8185fdd..ca04bd3 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -6,11 +6,11 @@ # - Run linter # - Run tests # -# Version: 0.1.0 +# Version: 0.1.1 # # Author: Diptesh # -# Date: May 03, 2020 +# Date: Feb 11, 2024 # # ============================================================================= @@ -38,7 +38,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.7] + python-version: [3.10] steps: - uses: actions/checkout@v2 From fb783e0be78c0a2d501b53aac5cac5eb5bda9e44 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Sun, 11 Feb 2024 20:13:58 +0100 Subject: [PATCH 09/18] v0.4.2 --- .github/workflows/checks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index ca04bd3..2a8facc 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -38,7 +38,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.10] + python-version: ['3.10'] steps: - uses: actions/checkout@v2 From bd3bb33389d247c30faf08bec80ca3f704a4f2b0 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Sun, 11 Feb 2024 20:16:48 +0100 Subject: [PATCH 10/18] v0.4.2 --- mllib/lib/model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mllib/lib/model.py b/mllib/lib/model.py index 20c7c73..2e2584f 100644 --- a/mllib/lib/model.py +++ b/mllib/lib/model.py @@ -147,7 +147,7 @@ def __init__(self, def _fit(self) -> None: """Fit the best GLMNet model.""" - train_x, test_x,\ + train_x, test_x, \ train_y, test_y = split(self.df[self.x_var], self.df[[self.y_var]], test_size=self.param["test_perc"], From 1cd21123ae55be89f830eb728df22abedd851687 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Thu, 15 Feb 2024 01:04:05 +0100 Subject: [PATCH 11/18] v0.4.3 --- .../metrics.cpython-310-x86_64-linux-gnu.so | Bin 72056 -> 0 bytes .../temp.linux-x86_64-cpython-310/metrics.o | Bin 78664 -> 0 bytes bin/metrics/metrics.so | Bin 72056 -> 0 bytes bin/run_tests.sh | 10 +- bin/{metrics => shared_obj}/build.sh | 0 .../haversine.cpython-310-x86_64-linux-gnu.so | Bin 0 -> 72048 bytes .../metrics.cpython-310-x86_64-linux-gnu.so | Bin 0 -> 71264 bytes .../temp.linux-x86_64-cpython-310/haversine.o | Bin 0 -> 106584 bytes .../temp.linux-x86_64-cpython-310/metrics.o | Bin 0 -> 89952 bytes bin/shared_obj/haversine.c | 10673 ++++++++++++++++ bin/shared_obj/haversine.pyx | 104 + bin/shared_obj/haversine.so | Bin 0 -> 72048 bytes bin/{metrics => shared_obj}/metrics.c | 0 bin/{metrics => shared_obj}/metrics.pyx | 0 bin/shared_obj/metrics.so | Bin 0 -> 71264 bytes bin/{metrics => shared_obj}/setup.py | 5 +- logs/cov.out | 4 +- logs/pylint/lib-opt-py.out | 3 + ...s-setup-py.out => shared_obj-setup-py.out} | 0 mllib/lib/haversine.so | Bin 0 -> 72048 bytes mllib/lib/metrics.so | Bin 72056 -> 71264 bytes mllib/lib/opt.py | 116 +- 22 files changed, 10812 insertions(+), 103 deletions(-) delete mode 100755 bin/metrics/build/lib.linux-x86_64-cpython-310/metrics.cpython-310-x86_64-linux-gnu.so delete mode 100644 bin/metrics/build/temp.linux-x86_64-cpython-310/metrics.o delete mode 100755 bin/metrics/metrics.so rename bin/{metrics => shared_obj}/build.sh (100%) create mode 100755 bin/shared_obj/build/lib.linux-x86_64-cpython-310/haversine.cpython-310-x86_64-linux-gnu.so create mode 100755 bin/shared_obj/build/lib.linux-x86_64-cpython-310/metrics.cpython-310-x86_64-linux-gnu.so create mode 100644 bin/shared_obj/build/temp.linux-x86_64-cpython-310/haversine.o create mode 100644 bin/shared_obj/build/temp.linux-x86_64-cpython-310/metrics.o create mode 100644 bin/shared_obj/haversine.c create mode 100644 bin/shared_obj/haversine.pyx create mode 100755 bin/shared_obj/haversine.so rename bin/{metrics => shared_obj}/metrics.c (100%) rename bin/{metrics => shared_obj}/metrics.pyx (100%) create mode 100755 bin/shared_obj/metrics.so rename bin/{metrics => shared_obj}/setup.py (52%) rename logs/pylint/{metrics-setup-py.out => shared_obj-setup-py.out} (100%) create mode 100755 mllib/lib/haversine.so diff --git a/bin/metrics/build/lib.linux-x86_64-cpython-310/metrics.cpython-310-x86_64-linux-gnu.so b/bin/metrics/build/lib.linux-x86_64-cpython-310/metrics.cpython-310-x86_64-linux-gnu.so deleted file mode 100755 index a09aa5098906ee4886ce047ca7fd35b7ef95f465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72056 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 diff --git a/bin/metrics/build/temp.linux-x86_64-cpython-310/metrics.o b/bin/metrics/build/temp.linux-x86_64-cpython-310/metrics.o deleted file mode 100644 index c69212e8c5927e9ce7d575a5ded3c9a283c51668..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78664 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

08L$tAK28;XTB01P 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 diff --git a/bin/run_tests.sh b/bin/run_tests.sh index 2b9ae8c..d36dec2 100755 --- a/bin/run_tests.sh +++ b/bin/run_tests.sh @@ -31,9 +31,8 @@ printf "=%.0s" {1..70} # Run unit tests if [[ $module == "-a" || $module == "-u" ]] then - printf "\nRunning unit & integration tests ...\n\n" - coverage run -m unittest discover -v -s $test_dir -p "test_*.py" - coverage report -m --omit="*/tests/test_*,*/opt/spark-*" > "$proj_dir/logs/cov.out" + printf "\nComputing test coverage ...\n\n" + coverage report -m --omit="*/tests/test_*,*/opt/spark-*" 2>&1 | tee "$proj_dir/logs/cov.out" COV_SCORE=`grep "TOTAL" $proj_dir/logs/cov.out | tail -1 | awk '{ printf("%d", $4) }'` COV_COLOR="red" if [[ $COV_SCORE == "100" ]] @@ -43,6 +42,9 @@ then sed -i "3s/.*/\[\!\[Coverage score\]\(\https\:\/\/img\.shields\.io\/badge\/coverage\-$COV_SCORE\%25\-$COV_COLOR.svg\)\]\(\.\/logs\/cov\.out\)/" "$proj_dir/README.md" printf "=%.0s" {1..70} printf "\n" + printf "\nRunning unit & integration tests ...\n\n" + coverage run -m unittest discover -v -s $test_dir -p "test_*.py" + printf "=%.0s" {1..70} fi # Rate coding styles for all python scripts @@ -76,6 +78,6 @@ then printf "\n" fi -pipreqs --force $proj_dir &> $proj_dir/logs/pip.out +pipreqs --force --use-local $proj_dir &> $proj_dir/logs/pip.out exit 0 diff --git a/bin/metrics/build.sh b/bin/shared_obj/build.sh similarity index 100% rename from bin/metrics/build.sh rename to bin/shared_obj/build.sh diff --git a/bin/shared_obj/build/lib.linux-x86_64-cpython-310/haversine.cpython-310-x86_64-linux-gnu.so b/bin/shared_obj/build/lib.linux-x86_64-cpython-310/haversine.cpython-310-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..b49134ebd48577a8fa2691a41de7f8e5b67160b7 GIT binary patch literal 72048 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

=)- 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 literal 0 HcmV?d00001 diff --git a/bin/shared_obj/build/lib.linux-x86_64-cpython-310/metrics.cpython-310-x86_64-linux-gnu.so b/bin/shared_obj/build/lib.linux-x86_64-cpython-310/metrics.cpython-310-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..439d65d724a49e9c5a6595348a9d31fbe82755a2 GIT binary patch literal 71264 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 literal 0 HcmV?d00001 diff --git a/bin/shared_obj/build/temp.linux-x86_64-cpython-310/haversine.o b/bin/shared_obj/build/temp.linux-x86_64-cpython-310/haversine.o new file mode 100644 index 0000000000000000000000000000000000000000..a17466b53b29081b0e8783f05d422bf621e301af GIT binary patch literal 106584 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%0DCz?VB;A9%a-j=;I! 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 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_6" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x030006F0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; // borrowed + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; // we don't yet need to distinguish between versions > 11 + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); // we don't have access to __pyx_empty_bytes here + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__haversine +#define __PYX_HAVE_API__haversine +/* Early includes */ +#include +#include +#include + + /* Using NumPy API declarations from "numpy/__init__.cython-30.pxd" */ + +#include "numpy/arrayobject.h" +#include "numpy/ndarrayobject.h" +#include "numpy/ndarraytypes.h" +#include "numpy/arrayscalars.h" +#include "numpy/ufuncobject.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const wchar_t *u) +{ + const wchar_t *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#else +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) +{ + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#endif +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else // Py < 3.12 + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* Header.proto */ +#if !defined(CYTHON_CCOMPLEX) + #if defined(__cplusplus) + #define CYTHON_CCOMPLEX 1 + #elif (defined(_Complex_I) && !defined(_MSC_VER)) || ((defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_COMPLEX__) && !defined(_MSC_VER)) + #define CYTHON_CCOMPLEX 1 + #else + #define CYTHON_CCOMPLEX 0 + #endif +#endif +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #include + #else + #include + #endif +#endif +#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) + #undef _Complex_I + #define _Complex_I 1.0fj +#endif + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "haversine.pyx", + "__init__.cython-30.pxd", + "type.pxd", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* BufferFormatStructs.proto */ +struct __Pyx_StructField_; +#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) +typedef struct { + const char* name; + struct __Pyx_StructField_* fields; + size_t size; + size_t arraysize[8]; + int ndim; + char typegroup; + char is_unsigned; + int flags; +} __Pyx_TypeInfo; +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + size_t struct_alignment; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; + char is_valid_array; +} __Pyx_BufFmt_Context; + +/* #### Code section: numeric_typedefs ### */ + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":731 + * # in Cython to enable them only on the right systems. + * + * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + */ +typedef npy_int8 __pyx_t_5numpy_int8_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":732 + * + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t + */ +typedef npy_int16 __pyx_t_5numpy_int16_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":733 + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< + * ctypedef npy_int64 int64_t + * #ctypedef npy_int96 int96_t + */ +typedef npy_int32 __pyx_t_5numpy_int32_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":734 + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< + * #ctypedef npy_int96 int96_t + * #ctypedef npy_int128 int128_t + */ +typedef npy_int64 __pyx_t_5numpy_int64_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":738 + * #ctypedef npy_int128 int128_t + * + * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + */ +typedef npy_uint8 __pyx_t_5numpy_uint8_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":739 + * + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t + */ +typedef npy_uint16 __pyx_t_5numpy_uint16_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":740 + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< + * ctypedef npy_uint64 uint64_t + * #ctypedef npy_uint96 uint96_t + */ +typedef npy_uint32 __pyx_t_5numpy_uint32_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":741 + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< + * #ctypedef npy_uint96 uint96_t + * #ctypedef npy_uint128 uint128_t + */ +typedef npy_uint64 __pyx_t_5numpy_uint64_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":745 + * #ctypedef npy_uint128 uint128_t + * + * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< + * ctypedef npy_float64 float64_t + * #ctypedef npy_float80 float80_t + */ +typedef npy_float32 __pyx_t_5numpy_float32_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":746 + * + * ctypedef npy_float32 float32_t + * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< + * #ctypedef npy_float80 float80_t + * #ctypedef npy_float128 float128_t + */ +typedef npy_float64 __pyx_t_5numpy_float64_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":755 + * # The int types are mapped a bit surprising -- + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t + */ +typedef npy_long __pyx_t_5numpy_int_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":756 + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong longlong_t + * + */ +typedef npy_longlong __pyx_t_5numpy_long_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":757 + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_ulong uint_t + */ +typedef npy_longlong __pyx_t_5numpy_longlong_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":759 + * ctypedef npy_longlong longlong_t + * + * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t + */ +typedef npy_ulong __pyx_t_5numpy_uint_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":760 + * + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ +typedef npy_ulonglong __pyx_t_5numpy_ulong_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":761 + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_intp intp_t + */ +typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":763 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ +typedef npy_intp __pyx_t_5numpy_intp_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":764 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":766 + * ctypedef npy_uintp uintp_t + * + * ctypedef npy_double float_t # <<<<<<<<<<<<<< + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t + */ +typedef npy_double __pyx_t_5numpy_float_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":767 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ +typedef npy_double __pyx_t_5numpy_double_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":768 + * ctypedef npy_double float_t + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cfloat cfloat_t + */ +typedef npy_longdouble __pyx_t_5numpy_longdouble_t; + +/* "haversine.pyx":23 + * cnp.import_array() + * DTYPE = np.double + * ctypedef cnp.double_t DTYPE_t # <<<<<<<<<<<<<< + * + * cdef DTYPE_t deg2rad(DTYPE_t deg): + */ +typedef __pyx_t_5numpy_double_t __pyx_t_9haversine_DTYPE_t; +/* #### Code section: complex_type_declarations ### */ +/* Declarations.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + typedef ::std::complex< float > __pyx_t_float_complex; + #else + typedef float _Complex __pyx_t_float_complex; + #endif +#else + typedef struct { float real, imag; } __pyx_t_float_complex; +#endif +static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); + +/* Declarations.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + typedef ::std::complex< double > __pyx_t_double_complex; + #else + typedef double _Complex __pyx_t_double_complex; + #endif +#else + typedef struct { double real, imag; } __pyx_t_double_complex; +#endif +static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); + +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":770 + * ctypedef npy_longdouble longdouble_t + * + * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t + */ +typedef npy_cfloat __pyx_t_5numpy_cfloat_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":771 + * + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< + * ctypedef npy_clongdouble clongdouble_t + * + */ +typedef npy_cdouble __pyx_t_5numpy_cdouble_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":772 + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cdouble complex_t + */ +typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":774 + * ctypedef npy_clongdouble clongdouble_t + * + * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew1(a): + */ +typedef npy_cdouble __pyx_t_5numpy_complex_t; +struct __pyx_opt_args_9haversine_c_haversine; +struct __pyx_opt_args_9haversine_haversine_cy; + +/* "haversine.pyx":30 + * return rad + * + * cdef DTYPE_t c_haversine(DTYPE_t lon1, # <<<<<<<<<<<<<< + * DTYPE_t lat1, + * DTYPE_t lon2, + */ +struct __pyx_opt_args_9haversine_c_haversine { + int __pyx_n; + PyObject *dist; +}; + +/* "haversine.pyx":56 + * + * cpdef cnp.ndarray[DTYPE_t, + * ndim=1] haversine_cy(cnp.ndarray[DTYPE_t, # <<<<<<<<<<<<<< + * ndim=1] lon1, + * cnp.ndarray[DTYPE_t, + */ +struct __pyx_opt_args_9haversine_haversine_cy { + int __pyx_n; + PyObject *dist; +}; +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* StrEquals.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* IsLittleEndian.proto */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); + +/* BufferFormatCheck.proto */ +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type); + +/* BufferGetAndValidate.proto */ +#define __Pyx_GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)\ + ((obj == Py_None || obj == NULL) ?\ + (__Pyx_ZeroBuffer(buf), 0) :\ + __Pyx__GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)) +static int __Pyx__GetBufferAndValidate(Py_buffer* buf, PyObject* obj, + __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); +static void __Pyx_ZeroBuffer(Py_buffer* buf); +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); +static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; +static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +/* BufferIndexError.proto */ +static void __Pyx_RaiseBufferIndexError(int axis); + +#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0) +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg // no-op + #define __Pyx_Arg_XDECREF_VARARGS(arg) // no-op - arg is borrowed +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg // no-op, __Pyx_Arg_FASTCALL is direct and this needs + #define __Pyx_Arg_XDECREF_FASTCALL(arg) // no-op - arg was returned from array +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_6 +#define __PYX_HAVE_RT_ImportType_proto_3_0_6 +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +#include +#endif +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_6(s) alignof(s) +#else +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_6(s) sizeof(void*) +#endif +enum __Pyx_ImportType_CheckSize_3_0_6 { + __Pyx_ImportType_CheckSize_Error_3_0_6 = 0, + __Pyx_ImportType_CheckSize_Warn_3_0_6 = 1, + __Pyx_ImportType_CheckSize_Ignore_3_0_6 = 2 +}; +static PyTypeObject *__Pyx_ImportType_3_0_6(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_6 check_size); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; // used by FusedFunction for copying defaults + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* BufferStructDeclare.proto */ +typedef struct { + Py_ssize_t shape, strides, suboffsets; +} __Pyx_Buf_DimInfo; +typedef struct { + size_t refcount; + Py_buffer pybuffer; +} __Pyx_Buffer; +typedef struct { + __Pyx_Buffer *rcbuffer; + char *data; + __Pyx_Buf_DimInfo diminfo[8]; +} __Pyx_LocalBuf_ND; + +#if PY_MAJOR_VERSION < 3 + static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); + static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else + #define __Pyx_GetBuffer PyObject_GetBuffer + #define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + + +/* RealImag.proto */ +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #define __Pyx_CREAL(z) ((z).real()) + #define __Pyx_CIMAG(z) ((z).imag()) + #else + #define __Pyx_CREAL(z) (__real__(z)) + #define __Pyx_CIMAG(z) (__imag__(z)) + #endif +#else + #define __Pyx_CREAL(z) ((z).real) + #define __Pyx_CIMAG(z) ((z).imag) +#endif +#if defined(__cplusplus) && CYTHON_CCOMPLEX\ + && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103) + #define __Pyx_SET_CREAL(z,x) ((z).real(x)) + #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) +#else + #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) + #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) +#endif + +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #define __Pyx_c_eq_float(a, b) ((a)==(b)) + #define __Pyx_c_sum_float(a, b) ((a)+(b)) + #define __Pyx_c_diff_float(a, b) ((a)-(b)) + #define __Pyx_c_prod_float(a, b) ((a)*(b)) + #define __Pyx_c_quot_float(a, b) ((a)/(b)) + #define __Pyx_c_neg_float(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_float(z) ((z)==(float)0) + #define __Pyx_c_conj_float(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_float(z) (::std::abs(z)) + #define __Pyx_c_pow_float(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_float(z) ((z)==0) + #define __Pyx_c_conj_float(z) (conjf(z)) + #if 1 + #define __Pyx_c_abs_float(z) (cabsf(z)) + #define __Pyx_c_pow_float(a, b) (cpowf(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex); + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex); + #endif +#endif + +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #define __Pyx_c_eq_double(a, b) ((a)==(b)) + #define __Pyx_c_sum_double(a, b) ((a)+(b)) + #define __Pyx_c_diff_double(a, b) ((a)-(b)) + #define __Pyx_c_prod_double(a, b) ((a)*(b)) + #define __Pyx_c_quot_double(a, b) ((a)/(b)) + #define __Pyx_c_neg_double(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_double(z) ((z)==(double)0) + #define __Pyx_c_conj_double(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_double(z) (::std::abs(z)) + #define __Pyx_c_pow_double(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_double(z) ((z)==0) + #define __Pyx_c_conj_double(z) (conj(z)) + #if 1 + #define __Pyx_c_abs_double(z) (cabs(z)) + #define __Pyx_c_pow_double(a, b) (cpow(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex); + #if 1 + static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex); + #endif +#endif + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self); /* proto*/ +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self); /* proto*/ + +/* Module declarations from "libc.math" */ + +/* Module declarations from "libc.string" */ + +/* Module declarations from "libc.stdio" */ + +/* Module declarations from "__builtin__" */ + +/* Module declarations from "cpython.type" */ + +/* Module declarations from "cpython" */ + +/* Module declarations from "cpython.object" */ + +/* Module declarations from "cpython.ref" */ + +/* Module declarations from "numpy" */ + +/* Module declarations from "numpy" */ +static CYTHON_INLINE int __pyx_f_5numpy_import_array(void); /*proto*/ + +/* Module declarations from "haversine" */ +static __pyx_t_9haversine_DTYPE_t __pyx_f_9haversine_deg2rad(__pyx_t_9haversine_DTYPE_t); /*proto*/ +static __pyx_t_9haversine_DTYPE_t __pyx_f_9haversine_c_haversine(__pyx_t_9haversine_DTYPE_t, __pyx_t_9haversine_DTYPE_t, __pyx_t_9haversine_DTYPE_t, __pyx_t_9haversine_DTYPE_t, struct __pyx_opt_args_9haversine_c_haversine *__pyx_optional_args); /*proto*/ +static PyArrayObject *__pyx_f_9haversine_haversine_cy(PyArrayObject *, PyArrayObject *, PyArrayObject *, PyArrayObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_9haversine_haversine_cy *__pyx_optional_args); /*proto*/ +/* #### Code section: typeinfo ### */ +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_9haversine_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_9haversine_DTYPE_t), { 0 }, 0, 'R', 0, 0 }; +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "haversine" +extern int __pyx_module_is_main_haversine; +int __pyx_module_is_main_haversine = 0; + +/* Implementation of "haversine" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_ImportError; +/* #### Code section: string_decls ### */ +static const char __pyx_k__3[] = "*"; +static const char __pyx_k__7[] = "?"; +static const char __pyx_k_km[] = "km"; +static const char __pyx_k_mi[] = "mi"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_dist[] = "dist"; +static const char __pyx_k_lat1[] = "lat1"; +static const char __pyx_k_lat2[] = "lat2"; +static const char __pyx_k_lon1[] = "lon1"; +static const char __pyx_k_lon2[] = "lon2"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_spec[] = "__spec__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_DTYPE[] = "DTYPE"; +static const char __pyx_k_dtype[] = "dtype"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_zeros[] = "zeros"; +static const char __pyx_k_double[] = "double"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_haversine[] = "haversine"; +static const char __pyx_k_ImportError[] = "ImportError"; +static const char __pyx_k_haversine_cy[] = "haversine_cy"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_haversine_pyx[] = "haversine.pyx"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_Haversine_distance_formula_Avai[] = "\nHaversine distance formula.\n\n**Available functions:**\n - ``haversine_cy``: Haversine distance\n\nCredits\n-------\n::\n\n Authors:\n - Diptesh\n\n Date: Feb 14, 2024\n"; +static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import"; +static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_9haversine_haversine_cy(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_lon1, PyArrayObject *__pyx_v_lat1, PyArrayObject *__pyx_v_lon2, PyArrayObject *__pyx_v_lat2, PyObject *__pyx_v_dist); /* proto */ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_7cpython_4type_type; + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_5numpy_dtype; + PyTypeObject *__pyx_ptype_5numpy_flatiter; + PyTypeObject *__pyx_ptype_5numpy_broadcast; + PyTypeObject *__pyx_ptype_5numpy_ndarray; + PyTypeObject *__pyx_ptype_5numpy_generic; + PyTypeObject *__pyx_ptype_5numpy_number; + PyTypeObject *__pyx_ptype_5numpy_integer; + PyTypeObject *__pyx_ptype_5numpy_signedinteger; + PyTypeObject *__pyx_ptype_5numpy_unsignedinteger; + PyTypeObject *__pyx_ptype_5numpy_inexact; + PyTypeObject *__pyx_ptype_5numpy_floating; + PyTypeObject *__pyx_ptype_5numpy_complexfloating; + PyTypeObject *__pyx_ptype_5numpy_flexible; + PyTypeObject *__pyx_ptype_5numpy_character; + PyTypeObject *__pyx_ptype_5numpy_ufunc; + #if CYTHON_USE_MODULE_STATE + #endif + PyObject *__pyx_n_s_DTYPE; + PyObject *__pyx_n_s_ImportError; + PyObject *__pyx_n_s__3; + PyObject *__pyx_n_s__7; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_dist; + PyObject *__pyx_n_s_double; + PyObject *__pyx_n_s_dtype; + PyObject *__pyx_n_s_haversine; + PyObject *__pyx_n_s_haversine_cy; + PyObject *__pyx_kp_s_haversine_pyx; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_km; + PyObject *__pyx_n_s_lat1; + PyObject *__pyx_n_s_lat2; + PyObject *__pyx_n_s_lon1; + PyObject *__pyx_n_s_lon2; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_mi; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_np; + PyObject *__pyx_n_s_numpy; + PyObject *__pyx_kp_s_numpy_core_multiarray_failed_to; + PyObject *__pyx_kp_s_numpy_core_umath_failed_to_impor; + PyObject *__pyx_n_s_range; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_zeros; + PyObject *__pyx_tuple_; + PyObject *__pyx_tuple__2; + PyObject *__pyx_tuple__4; + PyObject *__pyx_tuple__6; + PyObject *__pyx_codeobj__5; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_dtype); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flatiter); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_broadcast); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ndarray); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_generic); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_number); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_integer); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_signedinteger); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_unsignedinteger); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_inexact); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_floating); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_complexfloating); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flexible); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_character); + Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ufunc); + Py_CLEAR(clear_module_state->__pyx_n_s_DTYPE); + Py_CLEAR(clear_module_state->__pyx_n_s_ImportError); + Py_CLEAR(clear_module_state->__pyx_n_s__3); + Py_CLEAR(clear_module_state->__pyx_n_s__7); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_dist); + Py_CLEAR(clear_module_state->__pyx_n_s_double); + Py_CLEAR(clear_module_state->__pyx_n_s_dtype); + Py_CLEAR(clear_module_state->__pyx_n_s_haversine); + Py_CLEAR(clear_module_state->__pyx_n_s_haversine_cy); + Py_CLEAR(clear_module_state->__pyx_kp_s_haversine_pyx); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_km); + Py_CLEAR(clear_module_state->__pyx_n_s_lat1); + Py_CLEAR(clear_module_state->__pyx_n_s_lat2); + Py_CLEAR(clear_module_state->__pyx_n_s_lon1); + Py_CLEAR(clear_module_state->__pyx_n_s_lon2); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_mi); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_np); + Py_CLEAR(clear_module_state->__pyx_n_s_numpy); + Py_CLEAR(clear_module_state->__pyx_kp_s_numpy_core_multiarray_failed_to); + Py_CLEAR(clear_module_state->__pyx_kp_s_numpy_core_umath_failed_to_impor); + Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_zeros); + Py_CLEAR(clear_module_state->__pyx_tuple_); + Py_CLEAR(clear_module_state->__pyx_tuple__2); + Py_CLEAR(clear_module_state->__pyx_tuple__4); + Py_CLEAR(clear_module_state->__pyx_tuple__6); + Py_CLEAR(clear_module_state->__pyx_codeobj__5); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_dtype); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flatiter); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_broadcast); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ndarray); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_generic); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_number); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_integer); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_signedinteger); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_unsignedinteger); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_inexact); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_floating); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_complexfloating); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flexible); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_character); + Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ufunc); + Py_VISIT(traverse_module_state->__pyx_n_s_DTYPE); + Py_VISIT(traverse_module_state->__pyx_n_s_ImportError); + Py_VISIT(traverse_module_state->__pyx_n_s__3); + Py_VISIT(traverse_module_state->__pyx_n_s__7); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_dist); + Py_VISIT(traverse_module_state->__pyx_n_s_double); + Py_VISIT(traverse_module_state->__pyx_n_s_dtype); + Py_VISIT(traverse_module_state->__pyx_n_s_haversine); + Py_VISIT(traverse_module_state->__pyx_n_s_haversine_cy); + Py_VISIT(traverse_module_state->__pyx_kp_s_haversine_pyx); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_km); + Py_VISIT(traverse_module_state->__pyx_n_s_lat1); + Py_VISIT(traverse_module_state->__pyx_n_s_lat2); + Py_VISIT(traverse_module_state->__pyx_n_s_lon1); + Py_VISIT(traverse_module_state->__pyx_n_s_lon2); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_mi); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_np); + Py_VISIT(traverse_module_state->__pyx_n_s_numpy); + Py_VISIT(traverse_module_state->__pyx_kp_s_numpy_core_multiarray_failed_to); + Py_VISIT(traverse_module_state->__pyx_kp_s_numpy_core_umath_failed_to_impor); + Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_zeros); + Py_VISIT(traverse_module_state->__pyx_tuple_); + Py_VISIT(traverse_module_state->__pyx_tuple__2); + Py_VISIT(traverse_module_state->__pyx_tuple__4); + Py_VISIT(traverse_module_state->__pyx_tuple__6); + Py_VISIT(traverse_module_state->__pyx_codeobj__5); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_7cpython_4type_type __pyx_mstate_global->__pyx_ptype_7cpython_4type_type +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_5numpy_dtype __pyx_mstate_global->__pyx_ptype_5numpy_dtype +#define __pyx_ptype_5numpy_flatiter __pyx_mstate_global->__pyx_ptype_5numpy_flatiter +#define __pyx_ptype_5numpy_broadcast __pyx_mstate_global->__pyx_ptype_5numpy_broadcast +#define __pyx_ptype_5numpy_ndarray __pyx_mstate_global->__pyx_ptype_5numpy_ndarray +#define __pyx_ptype_5numpy_generic __pyx_mstate_global->__pyx_ptype_5numpy_generic +#define __pyx_ptype_5numpy_number __pyx_mstate_global->__pyx_ptype_5numpy_number +#define __pyx_ptype_5numpy_integer __pyx_mstate_global->__pyx_ptype_5numpy_integer +#define __pyx_ptype_5numpy_signedinteger __pyx_mstate_global->__pyx_ptype_5numpy_signedinteger +#define __pyx_ptype_5numpy_unsignedinteger __pyx_mstate_global->__pyx_ptype_5numpy_unsignedinteger +#define __pyx_ptype_5numpy_inexact __pyx_mstate_global->__pyx_ptype_5numpy_inexact +#define __pyx_ptype_5numpy_floating __pyx_mstate_global->__pyx_ptype_5numpy_floating +#define __pyx_ptype_5numpy_complexfloating __pyx_mstate_global->__pyx_ptype_5numpy_complexfloating +#define __pyx_ptype_5numpy_flexible __pyx_mstate_global->__pyx_ptype_5numpy_flexible +#define __pyx_ptype_5numpy_character __pyx_mstate_global->__pyx_ptype_5numpy_character +#define __pyx_ptype_5numpy_ufunc __pyx_mstate_global->__pyx_ptype_5numpy_ufunc +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_n_s_DTYPE __pyx_mstate_global->__pyx_n_s_DTYPE +#define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError +#define __pyx_n_s__3 __pyx_mstate_global->__pyx_n_s__3 +#define __pyx_n_s__7 __pyx_mstate_global->__pyx_n_s__7 +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_dist __pyx_mstate_global->__pyx_n_s_dist +#define __pyx_n_s_double __pyx_mstate_global->__pyx_n_s_double +#define __pyx_n_s_dtype __pyx_mstate_global->__pyx_n_s_dtype +#define __pyx_n_s_haversine __pyx_mstate_global->__pyx_n_s_haversine +#define __pyx_n_s_haversine_cy __pyx_mstate_global->__pyx_n_s_haversine_cy +#define __pyx_kp_s_haversine_pyx __pyx_mstate_global->__pyx_kp_s_haversine_pyx +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_km __pyx_mstate_global->__pyx_n_s_km +#define __pyx_n_s_lat1 __pyx_mstate_global->__pyx_n_s_lat1 +#define __pyx_n_s_lat2 __pyx_mstate_global->__pyx_n_s_lat2 +#define __pyx_n_s_lon1 __pyx_mstate_global->__pyx_n_s_lon1 +#define __pyx_n_s_lon2 __pyx_mstate_global->__pyx_n_s_lon2 +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_mi __pyx_mstate_global->__pyx_n_s_mi +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_np __pyx_mstate_global->__pyx_n_s_np +#define __pyx_n_s_numpy __pyx_mstate_global->__pyx_n_s_numpy +#define __pyx_kp_s_numpy_core_multiarray_failed_to __pyx_mstate_global->__pyx_kp_s_numpy_core_multiarray_failed_to +#define __pyx_kp_s_numpy_core_umath_failed_to_impor __pyx_mstate_global->__pyx_kp_s_numpy_core_umath_failed_to_impor +#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_zeros __pyx_mstate_global->__pyx_n_s_zeros +#define __pyx_tuple_ __pyx_mstate_global->__pyx_tuple_ +#define __pyx_tuple__2 __pyx_mstate_global->__pyx_tuple__2 +#define __pyx_tuple__4 __pyx_mstate_global->__pyx_tuple__4 +#define __pyx_tuple__6 __pyx_mstate_global->__pyx_tuple__6 +#define __pyx_codeobj__5 __pyx_mstate_global->__pyx_codeobj__5 +/* #### Code section: module_code ### */ + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":245 + * + * @property + * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { + PyObject *__pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":248 + * """Returns a borrowed reference to the object owning the data/memory. + * """ + * return PyArray_BASE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_BASE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":245 + * + * @property + * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< + * """Returns a borrowed reference to the object owning the data/memory. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":251 + * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ + */ + +static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self) { + PyArray_Descr *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyArray_Descr *__pyx_t_1; + __Pyx_RefNannySetupContext("descr", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":254 + * """Returns an owned reference to the dtype of the array. + * """ + * return PyArray_DESCR(self) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __pyx_t_1 = PyArray_DESCR(__pyx_v_self); + __Pyx_INCREF((PyObject *)((PyArray_Descr *)__pyx_t_1)); + __pyx_r = ((PyArray_Descr *)__pyx_t_1); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":251 + * + * @property + * cdef inline dtype descr(self): # <<<<<<<<<<<<<< + * """Returns an owned reference to the dtype of the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":257 + * + * @property + * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ + */ + +static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { + int __pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":260 + * """Returns the number of dimensions in the array. + * """ + * return PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_NDIM(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":257 + * + * @property + * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< + * """Returns the number of dimensions in the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":263 + * + * @property + * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":268 + * Can return NULL for 0-dimensional arrays. + * """ + * return PyArray_DIMS(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_DIMS(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":263 + * + * @property + * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the dimensions/shape of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":271 + * + * @property + * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + +static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { + npy_intp *__pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":275 + * The number of elements matches the number of dimensions of the array (ndim). + * """ + * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_STRIDES(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":271 + * + * @property + * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< + * """Returns a pointer to the strides of the array. + * The number of elements matches the number of dimensions of the array (ndim). + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":278 + * + * @property + * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ + */ + +static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { + npy_intp __pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":281 + * """Returns the total size (in number of elements) of the array. + * """ + * return PyArray_SIZE(self) # <<<<<<<<<<<<<< + * + * @property + */ + __pyx_r = PyArray_SIZE(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":278 + * + * @property + * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< + * """Returns the total size (in number of elements) of the array. + * """ + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":284 + * + * @property + * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. + */ + +static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { + char *__pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":290 + * of `PyArray_DATA()` instead, which returns a 'void*'. + * """ + * return PyArray_BYTES(self) # <<<<<<<<<<<<<< + * + * ctypedef unsigned char npy_bool + */ + __pyx_r = PyArray_BYTES(__pyx_v_self); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":284 + * + * @property + * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< + * """The pointer to the data buffer as a char*. + * This is provided for legacy reasons to avoid direct struct field access. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":776 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":777 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew2(a, b): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 777, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":776 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":779 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":780 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 780, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":779 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":782 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":783 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 783, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":782 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":785 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":786 + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 786, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":785 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":788 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":789 + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 789, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":788 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":791 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("PyDataType_SHAPE", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":792 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d); + if (__pyx_t_1) { + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":793 + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape # <<<<<<<<<<<<<< + * else: + * return () + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape)); + __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":792 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + } + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":795 + * return d.subarray.shape + * else: + * return () # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_empty_tuple); + __pyx_r = __pyx_empty_tuple; + goto __pyx_L0; + } + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":791 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":970 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + +static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":971 + * + * cdef inline void set_array_base(ndarray arr, object base): + * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< + * PyArray_SetBaseObject(arr, base) + * + */ + Py_INCREF(__pyx_v_base); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":972 + * cdef inline void set_array_base(ndarray arr, object base): + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): + */ + (void)(PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base)); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":970 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + + /* function exit code */ +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":974 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { + PyObject *__pyx_v_base; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("get_array_base", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":975 + * + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< + * if base is NULL: + * return None + */ + __pyx_v_base = PyArray_BASE(__pyx_v_arr); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":976 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + __pyx_t_1 = (__pyx_v_base == NULL); + if (__pyx_t_1) { + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":977 + * base = PyArray_BASE(arr) + * if base is NULL: + * return None # <<<<<<<<<<<<<< + * return base + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":976 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + } + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":978 + * if base is NULL: + * return None + * return base # <<<<<<<<<<<<<< + * + * # Versions of the import_* functions which are more suitable for + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_base)); + __pyx_r = ((PyObject *)__pyx_v_base); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":974 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":982 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_array", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":983 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":984 + * cdef inline int import_array() except -1: + * try: + * __pyx_import_array() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") + */ + __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 984, __pyx_L3_error) + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":983 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":985 + * try: + * __pyx_import_array() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.multiarray failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 985, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":986 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 986, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(1, 986, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":983 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":982 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":988 + * raise ImportError("numpy.core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_umath", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":989 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":990 + * cdef inline int import_umath() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.umath failed to import") + */ + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 990, __pyx_L3_error) + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":989 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":991 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.umath failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 991, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":992 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 992, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(1, 992, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":989 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":988 + * raise ImportError("numpy.core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":994 + * raise ImportError("numpy.core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("import_ufunc", 1); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":995 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":996 + * cdef inline int import_ufunc() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.umath failed to import") + */ + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 996, __pyx_L3_error) + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":995 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":997 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.umath failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 997, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":998 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 998, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(1, 998, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":995 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":994 + * raise ImportError("numpy.core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1001 + * + * + * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ + +static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1013 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1001 + * + * + * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1016 + * + * + * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ + +static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1028 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1016 + * + * + * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1031 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ + +static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { + npy_datetime __pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1038 + * also needed. That can be found using `get_datetime64_unit`. + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1031 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1041 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ + +static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { + npy_timedelta __pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1045 + * returns the int64 value underlying scalar numpy timedelta64 object + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1041 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1048 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + +static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { + NPY_DATETIMEUNIT __pyx_r; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1052 + * returns the unit part of the dtype for a numpy datetime64 object. + * """ + * return (obj).obmeta.base # <<<<<<<<<<<<<< + */ + __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); + goto __pyx_L0; + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":1048 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "haversine.pyx":25 + * ctypedef cnp.double_t DTYPE_t + * + * cdef DTYPE_t deg2rad(DTYPE_t deg): # <<<<<<<<<<<<<< + * """Convert degrees to radians.""" + * cdef DTYPE_t rad = deg * 0.017453293 + */ + +static __pyx_t_9haversine_DTYPE_t __pyx_f_9haversine_deg2rad(__pyx_t_9haversine_DTYPE_t __pyx_v_deg) { + __pyx_t_9haversine_DTYPE_t __pyx_v_rad; + __pyx_t_9haversine_DTYPE_t __pyx_r; + + /* "haversine.pyx":27 + * cdef DTYPE_t deg2rad(DTYPE_t deg): + * """Convert degrees to radians.""" + * cdef DTYPE_t rad = deg * 0.017453293 # <<<<<<<<<<<<<< + * return rad + * + */ + __pyx_v_rad = (__pyx_v_deg * 0.017453293); + + /* "haversine.pyx":28 + * """Convert degrees to radians.""" + * cdef DTYPE_t rad = deg * 0.017453293 + * return rad # <<<<<<<<<<<<<< + * + * cdef DTYPE_t c_haversine(DTYPE_t lon1, + */ + __pyx_r = __pyx_v_rad; + goto __pyx_L0; + + /* "haversine.pyx":25 + * ctypedef cnp.double_t DTYPE_t + * + * cdef DTYPE_t deg2rad(DTYPE_t deg): # <<<<<<<<<<<<<< + * """Convert degrees to radians.""" + * cdef DTYPE_t rad = deg * 0.017453293 + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "haversine.pyx":30 + * return rad + * + * cdef DTYPE_t c_haversine(DTYPE_t lon1, # <<<<<<<<<<<<<< + * DTYPE_t lat1, + * DTYPE_t lon2, + */ + +static __pyx_t_9haversine_DTYPE_t __pyx_f_9haversine_c_haversine(__pyx_t_9haversine_DTYPE_t __pyx_v_lon1, __pyx_t_9haversine_DTYPE_t __pyx_v_lat1, __pyx_t_9haversine_DTYPE_t __pyx_v_lon2, __pyx_t_9haversine_DTYPE_t __pyx_v_lat2, struct __pyx_opt_args_9haversine_c_haversine *__pyx_optional_args) { + PyObject *__pyx_v_dist = ((PyObject*)__pyx_n_s_mi); + __pyx_t_9haversine_DTYPE_t __pyx_v_rlon1; + __pyx_t_9haversine_DTYPE_t __pyx_v_rlon2; + __pyx_t_9haversine_DTYPE_t __pyx_v_rlat1; + __pyx_t_9haversine_DTYPE_t __pyx_v_rlat2; + __pyx_t_9haversine_DTYPE_t __pyx_v_dlon; + __pyx_t_9haversine_DTYPE_t __pyx_v_dlat; + __pyx_t_9haversine_DTYPE_t __pyx_v_a; + __pyx_t_9haversine_DTYPE_t __pyx_v_c; + __pyx_t_9haversine_DTYPE_t __pyx_v_R; + __pyx_t_9haversine_DTYPE_t __pyx_v_tmp_op; + __pyx_t_9haversine_DTYPE_t __pyx_r; + __pyx_t_9haversine_DTYPE_t __pyx_t_1; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v_dist = __pyx_optional_args->dist; + } + } + + /* "haversine.pyx":36 + * str dist="mi"): + * """Compute Haversine distance for a pair of Lat/Lon.""" + * cdef DTYPE_t rlon1 = deg2rad(lon1) # <<<<<<<<<<<<<< + * cdef DTYPE_t rlon2 = deg2rad(lon2) + * cdef DTYPE_t rlat1 = deg2rad(lat1) + */ + __pyx_t_1 = __pyx_f_9haversine_deg2rad(__pyx_v_lon1); if (unlikely(__pyx_t_1 == ((__pyx_t_9haversine_DTYPE_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L1_error) + __pyx_v_rlon1 = __pyx_t_1; + + /* "haversine.pyx":37 + * """Compute Haversine distance for a pair of Lat/Lon.""" + * cdef DTYPE_t rlon1 = deg2rad(lon1) + * cdef DTYPE_t rlon2 = deg2rad(lon2) # <<<<<<<<<<<<<< + * cdef DTYPE_t rlat1 = deg2rad(lat1) + * cdef DTYPE_t rlat2 = deg2rad(lat2) + */ + __pyx_t_1 = __pyx_f_9haversine_deg2rad(__pyx_v_lon2); if (unlikely(__pyx_t_1 == ((__pyx_t_9haversine_DTYPE_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L1_error) + __pyx_v_rlon2 = __pyx_t_1; + + /* "haversine.pyx":38 + * cdef DTYPE_t rlon1 = deg2rad(lon1) + * cdef DTYPE_t rlon2 = deg2rad(lon2) + * cdef DTYPE_t rlat1 = deg2rad(lat1) # <<<<<<<<<<<<<< + * cdef DTYPE_t rlat2 = deg2rad(lat2) + * + */ + __pyx_t_1 = __pyx_f_9haversine_deg2rad(__pyx_v_lat1); if (unlikely(__pyx_t_1 == ((__pyx_t_9haversine_DTYPE_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L1_error) + __pyx_v_rlat1 = __pyx_t_1; + + /* "haversine.pyx":39 + * cdef DTYPE_t rlon2 = deg2rad(lon2) + * cdef DTYPE_t rlat1 = deg2rad(lat1) + * cdef DTYPE_t rlat2 = deg2rad(lat2) # <<<<<<<<<<<<<< + * + * cdef DTYPE_t dlon = rlon2 - rlon1 + */ + __pyx_t_1 = __pyx_f_9haversine_deg2rad(__pyx_v_lat2); if (unlikely(__pyx_t_1 == ((__pyx_t_9haversine_DTYPE_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 39, __pyx_L1_error) + __pyx_v_rlat2 = __pyx_t_1; + + /* "haversine.pyx":41 + * cdef DTYPE_t rlat2 = deg2rad(lat2) + * + * cdef DTYPE_t dlon = rlon2 - rlon1 # <<<<<<<<<<<<<< + * cdef DTYPE_t dlat = rlat2 - rlat1 + * + */ + __pyx_v_dlon = (__pyx_v_rlon2 - __pyx_v_rlon1); + + /* "haversine.pyx":42 + * + * cdef DTYPE_t dlon = rlon2 - rlon1 + * cdef DTYPE_t dlat = rlat2 - rlat1 # <<<<<<<<<<<<<< + * + * cdef DTYPE_t a = sin(dlat/2)**2 + cos(rlat1) * cos(rlat2) * sin(dlon/2)**2 + */ + __pyx_v_dlat = (__pyx_v_rlat2 - __pyx_v_rlat1); + + /* "haversine.pyx":44 + * cdef DTYPE_t dlat = rlat2 - rlat1 + * + * cdef DTYPE_t a = sin(dlat/2)**2 + cos(rlat1) * cos(rlat2) * sin(dlon/2)**2 # <<<<<<<<<<<<<< + * + * cdef DTYPE_t c = 2 * asin(sqrt(a)) + */ + __pyx_v_a = (pow(sin((__pyx_v_dlat / 2.0)), 2.0) + ((cos(__pyx_v_rlat1) * cos(__pyx_v_rlat2)) * pow(sin((__pyx_v_dlon / 2.0)), 2.0))); + + /* "haversine.pyx":46 + * cdef DTYPE_t a = sin(dlat/2)**2 + cos(rlat1) * cos(rlat2) * sin(dlon/2)**2 + * + * cdef DTYPE_t c = 2 * asin(sqrt(a)) # <<<<<<<<<<<<<< + * cdef DTYPE_t R = 0.0 + * if dist == "km": # pragma: no cover + */ + __pyx_v_c = (2.0 * asin(sqrt(__pyx_v_a))); + + /* "haversine.pyx":47 + * + * cdef DTYPE_t c = 2 * asin(sqrt(a)) + * cdef DTYPE_t R = 0.0 # <<<<<<<<<<<<<< + * if dist == "km": # pragma: no cover + * R = 6372.8 + */ + __pyx_v_R = 0.0; + + /* "haversine.pyx":48 + * cdef DTYPE_t c = 2 * asin(sqrt(a)) + * cdef DTYPE_t R = 0.0 + * if dist == "km": # pragma: no cover # <<<<<<<<<<<<<< + * R = 6372.8 + * else: + */ + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_dist, __pyx_n_s_km, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 48, __pyx_L1_error) + if (__pyx_t_2) { + + /* "haversine.pyx":49 + * cdef DTYPE_t R = 0.0 + * if dist == "km": # pragma: no cover + * R = 6372.8 # <<<<<<<<<<<<<< + * else: + * R = 3959.87433 + */ + __pyx_v_R = 6372.8; + + /* "haversine.pyx":48 + * cdef DTYPE_t c = 2 * asin(sqrt(a)) + * cdef DTYPE_t R = 0.0 + * if dist == "km": # pragma: no cover # <<<<<<<<<<<<<< + * R = 6372.8 + * else: + */ + goto __pyx_L3; + } + + /* "haversine.pyx":51 + * R = 6372.8 + * else: + * R = 3959.87433 # <<<<<<<<<<<<<< + * cdef DTYPE_t tmp_op = R * c + * return tmp_op + */ + /*else*/ { + __pyx_v_R = 3959.87433; + } + __pyx_L3:; + + /* "haversine.pyx":52 + * else: + * R = 3959.87433 + * cdef DTYPE_t tmp_op = R * c # <<<<<<<<<<<<<< + * return tmp_op + * + */ + __pyx_v_tmp_op = (__pyx_v_R * __pyx_v_c); + + /* "haversine.pyx":53 + * R = 3959.87433 + * cdef DTYPE_t tmp_op = R * c + * return tmp_op # <<<<<<<<<<<<<< + * + * cpdef cnp.ndarray[DTYPE_t, + */ + __pyx_r = __pyx_v_tmp_op; + goto __pyx_L0; + + /* "haversine.pyx":30 + * return rad + * + * cdef DTYPE_t c_haversine(DTYPE_t lon1, # <<<<<<<<<<<<<< + * DTYPE_t lat1, + * DTYPE_t lon2, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("haversine.c_haversine", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "haversine.pyx":55 + * return tmp_op + * + * cpdef cnp.ndarray[DTYPE_t, # <<<<<<<<<<<<<< + * ndim=1] haversine_cy(cnp.ndarray[DTYPE_t, + * ndim=1] lon1, + */ + +static PyObject *__pyx_pw_9haversine_1haversine_cy(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyArrayObject *__pyx_f_9haversine_haversine_cy(PyArrayObject *__pyx_v_lon1, PyArrayObject *__pyx_v_lat1, PyArrayObject *__pyx_v_lon2, PyArrayObject *__pyx_v_lat2, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_9haversine_haversine_cy *__pyx_optional_args) { + PyObject *__pyx_v_dist = ((PyObject*)__pyx_n_s_mi); + Py_ssize_t __pyx_v_arr_len; + PyArrayObject *__pyx_v_op = 0; + __pyx_t_9haversine_DTYPE_t __pyx_v_a; + __pyx_t_9haversine_DTYPE_t __pyx_v_b; + __pyx_t_9haversine_DTYPE_t __pyx_v_c; + __pyx_t_9haversine_DTYPE_t __pyx_v_d; + __pyx_t_9haversine_DTYPE_t __pyx_v_e; + Py_ssize_t __pyx_v_i; + __Pyx_LocalBuf_ND __pyx_pybuffernd_lat1; + __Pyx_Buffer __pyx_pybuffer_lat1; + __Pyx_LocalBuf_ND __pyx_pybuffernd_lat2; + __Pyx_Buffer __pyx_pybuffer_lat2; + __Pyx_LocalBuf_ND __pyx_pybuffernd_lon1; + __Pyx_Buffer __pyx_pybuffer_lon1; + __Pyx_LocalBuf_ND __pyx_pybuffernd_lon2; + __Pyx_Buffer __pyx_pybuffer_lon2; + __Pyx_LocalBuf_ND __pyx_pybuffernd_op; + __Pyx_Buffer __pyx_pybuffer_op; + PyArrayObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + npy_intp *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_6 = NULL; + Py_ssize_t __pyx_t_7; + Py_ssize_t __pyx_t_8; + Py_ssize_t __pyx_t_9; + Py_ssize_t __pyx_t_10; + int __pyx_t_11; + __pyx_t_9haversine_DTYPE_t __pyx_t_12; + struct __pyx_opt_args_9haversine_c_haversine __pyx_t_13; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("haversine_cy", 1); + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v_dist = __pyx_optional_args->dist; + } + } + __pyx_pybuffer_op.pybuffer.buf = NULL; + __pyx_pybuffer_op.refcount = 0; + __pyx_pybuffernd_op.data = NULL; + __pyx_pybuffernd_op.rcbuffer = &__pyx_pybuffer_op; + __pyx_pybuffer_lon1.pybuffer.buf = NULL; + __pyx_pybuffer_lon1.refcount = 0; + __pyx_pybuffernd_lon1.data = NULL; + __pyx_pybuffernd_lon1.rcbuffer = &__pyx_pybuffer_lon1; + __pyx_pybuffer_lat1.pybuffer.buf = NULL; + __pyx_pybuffer_lat1.refcount = 0; + __pyx_pybuffernd_lat1.data = NULL; + __pyx_pybuffernd_lat1.rcbuffer = &__pyx_pybuffer_lat1; + __pyx_pybuffer_lon2.pybuffer.buf = NULL; + __pyx_pybuffer_lon2.refcount = 0; + __pyx_pybuffernd_lon2.data = NULL; + __pyx_pybuffernd_lon2.rcbuffer = &__pyx_pybuffer_lon2; + __pyx_pybuffer_lat2.pybuffer.buf = NULL; + __pyx_pybuffer_lat2.refcount = 0; + __pyx_pybuffernd_lat2.data = NULL; + __pyx_pybuffernd_lat2.rcbuffer = &__pyx_pybuffer_lat2; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon1.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon1, &__Pyx_TypeInfo_nn___pyx_t_9haversine_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 55, __pyx_L1_error) + } + __pyx_pybuffernd_lon1.diminfo[0].strides = __pyx_pybuffernd_lon1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lon1.diminfo[0].shape = __pyx_pybuffernd_lon1.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat1.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat1, &__Pyx_TypeInfo_nn___pyx_t_9haversine_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 55, __pyx_L1_error) + } + __pyx_pybuffernd_lat1.diminfo[0].strides = __pyx_pybuffernd_lat1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lat1.diminfo[0].shape = __pyx_pybuffernd_lat1.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon2.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon2, &__Pyx_TypeInfo_nn___pyx_t_9haversine_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 55, __pyx_L1_error) + } + __pyx_pybuffernd_lon2.diminfo[0].strides = __pyx_pybuffernd_lon2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lon2.diminfo[0].shape = __pyx_pybuffernd_lon2.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat2.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat2, &__Pyx_TypeInfo_nn___pyx_t_9haversine_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 55, __pyx_L1_error) + } + __pyx_pybuffernd_lat2.diminfo[0].strides = __pyx_pybuffernd_lat2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lat2.diminfo[0].shape = __pyx_pybuffernd_lat2.rcbuffer->pybuffer.shape[0]; + + /* "haversine.pyx":90 + * + * """ + * cdef Py_ssize_t arr_len = lon1.shape[0] # <<<<<<<<<<<<<< + * cdef cnp.ndarray[DTYPE_t, ndim=1] op = np.zeros([arr_len], dtype=DTYPE) + * cdef DTYPE_t a = 0.0 + */ + __pyx_t_1 = __pyx_f_5numpy_7ndarray_5shape_shape(((PyArrayObject *)__pyx_v_lon1)); if (unlikely(__pyx_t_1 == ((npy_intp *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L1_error) + __pyx_v_arr_len = (__pyx_t_1[0]); + + /* "haversine.pyx":91 + * """ + * cdef Py_ssize_t arr_len = lon1.shape[0] + * cdef cnp.ndarray[DTYPE_t, ndim=1] op = np.zeros([arr_len], dtype=DTYPE) # <<<<<<<<<<<<<< + * cdef DTYPE_t a = 0.0 + * cdef DTYPE_t b = 0.0 + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_arr_len); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 91, __pyx_L1_error) + __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_op.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_9haversine_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_op = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_op.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 91, __pyx_L1_error) + } else {__pyx_pybuffernd_op.diminfo[0].strides = __pyx_pybuffernd_op.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_op.diminfo[0].shape = __pyx_pybuffernd_op.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_6 = 0; + __pyx_v_op = ((PyArrayObject *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "haversine.pyx":92 + * cdef Py_ssize_t arr_len = lon1.shape[0] + * cdef cnp.ndarray[DTYPE_t, ndim=1] op = np.zeros([arr_len], dtype=DTYPE) + * cdef DTYPE_t a = 0.0 # <<<<<<<<<<<<<< + * cdef DTYPE_t b = 0.0 + * cdef DTYPE_t c = 0.0 + */ + __pyx_v_a = 0.0; + + /* "haversine.pyx":93 + * cdef cnp.ndarray[DTYPE_t, ndim=1] op = np.zeros([arr_len], dtype=DTYPE) + * cdef DTYPE_t a = 0.0 + * cdef DTYPE_t b = 0.0 # <<<<<<<<<<<<<< + * cdef DTYPE_t c = 0.0 + * cdef DTYPE_t d = 0.0 + */ + __pyx_v_b = 0.0; + + /* "haversine.pyx":94 + * cdef DTYPE_t a = 0.0 + * cdef DTYPE_t b = 0.0 + * cdef DTYPE_t c = 0.0 # <<<<<<<<<<<<<< + * cdef DTYPE_t d = 0.0 + * cdef DTYPE_t e = 0.0 + */ + __pyx_v_c = 0.0; + + /* "haversine.pyx":95 + * cdef DTYPE_t b = 0.0 + * cdef DTYPE_t c = 0.0 + * cdef DTYPE_t d = 0.0 # <<<<<<<<<<<<<< + * cdef DTYPE_t e = 0.0 + * for i in range(0, arr_len, 1): + */ + __pyx_v_d = 0.0; + + /* "haversine.pyx":96 + * cdef DTYPE_t c = 0.0 + * cdef DTYPE_t d = 0.0 + * cdef DTYPE_t e = 0.0 # <<<<<<<<<<<<<< + * for i in range(0, arr_len, 1): + * a = lon1[i] + */ + __pyx_v_e = 0.0; + + /* "haversine.pyx":97 + * cdef DTYPE_t d = 0.0 + * cdef DTYPE_t e = 0.0 + * for i in range(0, arr_len, 1): # <<<<<<<<<<<<<< + * a = lon1[i] + * b = lat1[i] + */ + __pyx_t_7 = __pyx_v_arr_len; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "haversine.pyx":98 + * cdef DTYPE_t e = 0.0 + * for i in range(0, arr_len, 1): + * a = lon1[i] # <<<<<<<<<<<<<< + * b = lat1[i] + * c = lon2[i] + */ + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = -1; + if (__pyx_t_10 < 0) { + __pyx_t_10 += __pyx_pybuffernd_lon1.diminfo[0].shape; + if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 0; + } else if (unlikely(__pyx_t_10 >= __pyx_pybuffernd_lon1.diminfo[0].shape)) __pyx_t_11 = 0; + if (unlikely(__pyx_t_11 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_11); + __PYX_ERR(0, 98, __pyx_L1_error) + } + __pyx_v_a = (*__Pyx_BufPtrStrided1d(__pyx_t_9haversine_DTYPE_t *, __pyx_pybuffernd_lon1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_lon1.diminfo[0].strides)); + + /* "haversine.pyx":99 + * for i in range(0, arr_len, 1): + * a = lon1[i] + * b = lat1[i] # <<<<<<<<<<<<<< + * c = lon2[i] + * d = lat2[i] + */ + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = -1; + if (__pyx_t_10 < 0) { + __pyx_t_10 += __pyx_pybuffernd_lat1.diminfo[0].shape; + if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 0; + } else if (unlikely(__pyx_t_10 >= __pyx_pybuffernd_lat1.diminfo[0].shape)) __pyx_t_11 = 0; + if (unlikely(__pyx_t_11 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_11); + __PYX_ERR(0, 99, __pyx_L1_error) + } + __pyx_v_b = (*__Pyx_BufPtrStrided1d(__pyx_t_9haversine_DTYPE_t *, __pyx_pybuffernd_lat1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_lat1.diminfo[0].strides)); + + /* "haversine.pyx":100 + * a = lon1[i] + * b = lat1[i] + * c = lon2[i] # <<<<<<<<<<<<<< + * d = lat2[i] + * e = c_haversine(a, b, c, d, dist=dist) + */ + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = -1; + if (__pyx_t_10 < 0) { + __pyx_t_10 += __pyx_pybuffernd_lon2.diminfo[0].shape; + if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 0; + } else if (unlikely(__pyx_t_10 >= __pyx_pybuffernd_lon2.diminfo[0].shape)) __pyx_t_11 = 0; + if (unlikely(__pyx_t_11 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_11); + __PYX_ERR(0, 100, __pyx_L1_error) + } + __pyx_v_c = (*__Pyx_BufPtrStrided1d(__pyx_t_9haversine_DTYPE_t *, __pyx_pybuffernd_lon2.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_lon2.diminfo[0].strides)); + + /* "haversine.pyx":101 + * b = lat1[i] + * c = lon2[i] + * d = lat2[i] # <<<<<<<<<<<<<< + * e = c_haversine(a, b, c, d, dist=dist) + * op[i] = e + */ + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = -1; + if (__pyx_t_10 < 0) { + __pyx_t_10 += __pyx_pybuffernd_lat2.diminfo[0].shape; + if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 0; + } else if (unlikely(__pyx_t_10 >= __pyx_pybuffernd_lat2.diminfo[0].shape)) __pyx_t_11 = 0; + if (unlikely(__pyx_t_11 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_11); + __PYX_ERR(0, 101, __pyx_L1_error) + } + __pyx_v_d = (*__Pyx_BufPtrStrided1d(__pyx_t_9haversine_DTYPE_t *, __pyx_pybuffernd_lat2.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_lat2.diminfo[0].strides)); + + /* "haversine.pyx":102 + * c = lon2[i] + * d = lat2[i] + * e = c_haversine(a, b, c, d, dist=dist) # <<<<<<<<<<<<<< + * op[i] = e + * return op + */ + __pyx_t_13.__pyx_n = 1; + __pyx_t_13.dist = __pyx_v_dist; + __pyx_t_12 = __pyx_f_9haversine_c_haversine(__pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_d, &__pyx_t_13); if (unlikely(__pyx_t_12 == ((__pyx_t_9haversine_DTYPE_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 102, __pyx_L1_error) + __pyx_v_e = __pyx_t_12; + + /* "haversine.pyx":103 + * d = lat2[i] + * e = c_haversine(a, b, c, d, dist=dist) + * op[i] = e # <<<<<<<<<<<<<< + * return op + */ + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = -1; + if (__pyx_t_10 < 0) { + __pyx_t_10 += __pyx_pybuffernd_op.diminfo[0].shape; + if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 0; + } else if (unlikely(__pyx_t_10 >= __pyx_pybuffernd_op.diminfo[0].shape)) __pyx_t_11 = 0; + if (unlikely(__pyx_t_11 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_11); + __PYX_ERR(0, 103, __pyx_L1_error) + } + *__Pyx_BufPtrStrided1d(__pyx_t_9haversine_DTYPE_t *, __pyx_pybuffernd_op.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_op.diminfo[0].strides) = __pyx_v_e; + } + + /* "haversine.pyx":104 + * e = c_haversine(a, b, c, d, dist=dist) + * op[i] = e + * return op # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_op); + __pyx_r = ((PyArrayObject *)__pyx_v_op); + goto __pyx_L0; + + /* "haversine.pyx":55 + * return tmp_op + * + * cpdef cnp.ndarray[DTYPE_t, # <<<<<<<<<<<<<< + * ndim=1] haversine_cy(cnp.ndarray[DTYPE_t, + * ndim=1] lon1, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lat1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lat2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_op.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("haversine.haversine_cy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lat1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lat2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_op.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_op); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_9haversine_1haversine_cy(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_9haversine_haversine_cy, "\n Haversine distance formula.\n\n Calculate the euclidean distance in miles between two points\n specified in decimal degrees using\n `Haversine formula `_.\n\n Parameters\n ----------\n lon1, lat1, lon2, lat2 : float\n\n Pair of Latitude and Longitude. All args must be of equal length.\n\n dist : str, `optional`\n\n Output distance in miles ('mi') or kilometers ('km')\n (the default is mi)\n\n Returns\n -------\n numpy.ndarray\n\n Euclidean distance between two points in miles.\n\n "); +static PyMethodDef __pyx_mdef_9haversine_1haversine_cy = {"haversine_cy", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9haversine_1haversine_cy, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9haversine_haversine_cy}; +static PyObject *__pyx_pw_9haversine_1haversine_cy(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyArrayObject *__pyx_v_lon1 = 0; + PyArrayObject *__pyx_v_lat1 = 0; + PyArrayObject *__pyx_v_lon2 = 0; + PyArrayObject *__pyx_v_lat2 = 0; + PyObject *__pyx_v_dist = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[5] = {0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("haversine_cy (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lon1,&__pyx_n_s_lat1,&__pyx_n_s_lon2,&__pyx_n_s_lat2,&__pyx_n_s_dist,0}; + values[4] = __Pyx_Arg_NewRef_FASTCALL(((PyObject*)__pyx_n_s_mi)); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lon1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lat1)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("haversine_cy", 0, 4, 5, 1); __PYX_ERR(0, 55, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lon2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("haversine_cy", 0, 4, 5, 2); __PYX_ERR(0, 55, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lat2)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("haversine_cy", 0, 4, 5, 3); __PYX_ERR(0, 55, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dist); + if (value) { values[4] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "haversine_cy") < 0)) __PYX_ERR(0, 55, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_lon1 = ((PyArrayObject *)values[0]); + __pyx_v_lat1 = ((PyArrayObject *)values[1]); + __pyx_v_lon2 = ((PyArrayObject *)values[2]); + __pyx_v_lat2 = ((PyArrayObject *)values[3]); + __pyx_v_dist = ((PyObject*)values[4]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("haversine_cy", 0, 4, 5, __pyx_nargs); __PYX_ERR(0, 55, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("haversine.haversine_cy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon1), __pyx_ptype_5numpy_ndarray, 1, "lon1", 0))) __PYX_ERR(0, 56, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lat1), __pyx_ptype_5numpy_ndarray, 1, "lat1", 0))) __PYX_ERR(0, 58, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon2), __pyx_ptype_5numpy_ndarray, 1, "lon2", 0))) __PYX_ERR(0, 60, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lat2), __pyx_ptype_5numpy_ndarray, 1, "lat2", 0))) __PYX_ERR(0, 62, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dist), (&PyString_Type), 1, "dist", 1))) __PYX_ERR(0, 64, __pyx_L1_error) + __pyx_r = __pyx_pf_9haversine_haversine_cy(__pyx_self, __pyx_v_lon1, __pyx_v_lat1, __pyx_v_lon2, __pyx_v_lat2, __pyx_v_dist); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9haversine_haversine_cy(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_lon1, PyArrayObject *__pyx_v_lat1, PyArrayObject *__pyx_v_lon2, PyArrayObject *__pyx_v_lat2, PyObject *__pyx_v_dist) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_lat1; + __Pyx_Buffer __pyx_pybuffer_lat1; + __Pyx_LocalBuf_ND __pyx_pybuffernd_lat2; + __Pyx_Buffer __pyx_pybuffer_lat2; + __Pyx_LocalBuf_ND __pyx_pybuffernd_lon1; + __Pyx_Buffer __pyx_pybuffer_lon1; + __Pyx_LocalBuf_ND __pyx_pybuffernd_lon2; + __Pyx_Buffer __pyx_pybuffer_lon2; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + struct __pyx_opt_args_9haversine_haversine_cy __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("haversine_cy", 1); + __pyx_pybuffer_lon1.pybuffer.buf = NULL; + __pyx_pybuffer_lon1.refcount = 0; + __pyx_pybuffernd_lon1.data = NULL; + __pyx_pybuffernd_lon1.rcbuffer = &__pyx_pybuffer_lon1; + __pyx_pybuffer_lat1.pybuffer.buf = NULL; + __pyx_pybuffer_lat1.refcount = 0; + __pyx_pybuffernd_lat1.data = NULL; + __pyx_pybuffernd_lat1.rcbuffer = &__pyx_pybuffer_lat1; + __pyx_pybuffer_lon2.pybuffer.buf = NULL; + __pyx_pybuffer_lon2.refcount = 0; + __pyx_pybuffernd_lon2.data = NULL; + __pyx_pybuffernd_lon2.rcbuffer = &__pyx_pybuffer_lon2; + __pyx_pybuffer_lat2.pybuffer.buf = NULL; + __pyx_pybuffer_lat2.refcount = 0; + __pyx_pybuffernd_lat2.data = NULL; + __pyx_pybuffernd_lat2.rcbuffer = &__pyx_pybuffer_lat2; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon1.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon1, &__Pyx_TypeInfo_nn___pyx_t_9haversine_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 55, __pyx_L1_error) + } + __pyx_pybuffernd_lon1.diminfo[0].strides = __pyx_pybuffernd_lon1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lon1.diminfo[0].shape = __pyx_pybuffernd_lon1.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat1.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat1, &__Pyx_TypeInfo_nn___pyx_t_9haversine_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 55, __pyx_L1_error) + } + __pyx_pybuffernd_lat1.diminfo[0].strides = __pyx_pybuffernd_lat1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lat1.diminfo[0].shape = __pyx_pybuffernd_lat1.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon2.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon2, &__Pyx_TypeInfo_nn___pyx_t_9haversine_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 55, __pyx_L1_error) + } + __pyx_pybuffernd_lon2.diminfo[0].strides = __pyx_pybuffernd_lon2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lon2.diminfo[0].shape = __pyx_pybuffernd_lon2.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lat2.rcbuffer->pybuffer, (PyObject*)__pyx_v_lat2, &__Pyx_TypeInfo_nn___pyx_t_9haversine_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 55, __pyx_L1_error) + } + __pyx_pybuffernd_lat2.diminfo[0].strides = __pyx_pybuffernd_lat2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lat2.diminfo[0].shape = __pyx_pybuffernd_lat2.rcbuffer->pybuffer.shape[0]; + __Pyx_XDECREF(__pyx_r); + __pyx_t_2.__pyx_n = 1; + __pyx_t_2.dist = __pyx_v_dist; + __pyx_t_1 = ((PyObject *)__pyx_f_9haversine_haversine_cy(__pyx_v_lon1, __pyx_v_lat1, __pyx_v_lon2, __pyx_v_lat2, 0, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lat1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lat2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon2.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("haversine.haversine_cy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lat1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lat2.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon1.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon2.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_DTYPE, __pyx_k_DTYPE, sizeof(__pyx_k_DTYPE), 0, 0, 1, 1}, + {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_n_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 1}, + {&__pyx_n_s__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_dist, __pyx_k_dist, sizeof(__pyx_k_dist), 0, 0, 1, 1}, + {&__pyx_n_s_double, __pyx_k_double, sizeof(__pyx_k_double), 0, 0, 1, 1}, + {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, + {&__pyx_n_s_haversine, __pyx_k_haversine, sizeof(__pyx_k_haversine), 0, 0, 1, 1}, + {&__pyx_n_s_haversine_cy, __pyx_k_haversine_cy, sizeof(__pyx_k_haversine_cy), 0, 0, 1, 1}, + {&__pyx_kp_s_haversine_pyx, __pyx_k_haversine_pyx, sizeof(__pyx_k_haversine_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_km, __pyx_k_km, sizeof(__pyx_k_km), 0, 0, 1, 1}, + {&__pyx_n_s_lat1, __pyx_k_lat1, sizeof(__pyx_k_lat1), 0, 0, 1, 1}, + {&__pyx_n_s_lat2, __pyx_k_lat2, sizeof(__pyx_k_lat2), 0, 0, 1, 1}, + {&__pyx_n_s_lon1, __pyx_k_lon1, sizeof(__pyx_k_lon1), 0, 0, 1, 1}, + {&__pyx_n_s_lon2, __pyx_k_lon2, sizeof(__pyx_k_lon2), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_mi, __pyx_k_mi, sizeof(__pyx_k_mi), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_kp_s_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 0, 1, 0}, + {&__pyx_kp_s_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 0, 1, 0}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 97, __pyx_L1_error) + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 986, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":986 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 986, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "../../../../anaconda3/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":992 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 992, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "haversine.pyx":55 + * return tmp_op + * + * cpdef cnp.ndarray[DTYPE_t, # <<<<<<<<<<<<<< + * ndim=1] haversine_cy(cnp.ndarray[DTYPE_t, + * ndim=1] lon1, + */ + __pyx_tuple__4 = PyTuple_Pack(5, __pyx_n_s_lon1, __pyx_n_s_lat1, __pyx_n_s_lon2, __pyx_n_s_lat2, __pyx_n_s_dist); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__4, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_haversine_pyx, __pyx_n_s_haversine_cy, 55, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_n_s_mi); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType_3_0_6(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyTypeObject), + #elif CYTHON_COMPILING_IN_LIMITED_API + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyTypeObject), + #else + sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyHeapTypeObject), + #endif + __Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_5numpy_dtype = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyArray_Descr),__Pyx_ImportType_CheckSize_Ignore_3_0_6); if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(1, 202, __pyx_L1_error) + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyArrayIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_6); if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(1, 225, __pyx_L1_error) + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyArrayMultiIterObject),__Pyx_ImportType_CheckSize_Ignore_3_0_6); if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(1, 229, __pyx_L1_error) + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyArrayObject),__Pyx_ImportType_CheckSize_Ignore_3_0_6); if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(1, 238, __pyx_L1_error) + __pyx_ptype_5numpy_generic = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "generic", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_5numpy_generic) __PYX_ERR(1, 812, __pyx_L1_error) + __pyx_ptype_5numpy_number = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "number", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_5numpy_number) __PYX_ERR(1, 814, __pyx_L1_error) + __pyx_ptype_5numpy_integer = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "integer", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_5numpy_integer) __PYX_ERR(1, 816, __pyx_L1_error) + __pyx_ptype_5numpy_signedinteger = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "signedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_5numpy_signedinteger) __PYX_ERR(1, 818, __pyx_L1_error) + __pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "unsignedinteger", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(1, 820, __pyx_L1_error) + __pyx_ptype_5numpy_inexact = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "inexact", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_5numpy_inexact) __PYX_ERR(1, 822, __pyx_L1_error) + __pyx_ptype_5numpy_floating = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "floating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_5numpy_floating) __PYX_ERR(1, 824, __pyx_L1_error) + __pyx_ptype_5numpy_complexfloating = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "complexfloating", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_5numpy_complexfloating) __PYX_ERR(1, 826, __pyx_L1_error) + __pyx_ptype_5numpy_flexible = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "flexible", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_5numpy_flexible) __PYX_ERR(1, 828, __pyx_L1_error) + __pyx_ptype_5numpy_character = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "character", sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyObject),__Pyx_ImportType_CheckSize_Warn_3_0_6); if (!__pyx_ptype_5numpy_character) __PYX_ERR(1, 830, __pyx_L1_error) + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType_3_0_6(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_6(PyUFuncObject),__Pyx_ImportType_CheckSize_Ignore_3_0_6); if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(1, 868, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_haversine(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_haversine}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "haversine", + __pyx_k_Haversine_distance_formula_Avai, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC inithaversine(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC inithaversine(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_haversine(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_haversine(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_haversine(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'haversine' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("haversine", __pyx_methods, __pyx_k_Haversine_distance_formula_Avai, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to haversine pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_haversine(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_haversine) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "haversine")) { + if (unlikely((PyDict_SetItemString(modules, "haversine", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + (void)__Pyx_modinit_type_init_code(); + if (unlikely((__Pyx_modinit_type_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "haversine.pyx":18 + * + * from libc.math cimport sin, cos, asin, sqrt + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as cnp + * + */ + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_numpy, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "haversine.pyx":21 + * cimport numpy as cnp + * + * cnp.import_array() # <<<<<<<<<<<<<< + * DTYPE = np.double + * ctypedef cnp.double_t DTYPE_t + */ + __pyx_t_3 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 21, __pyx_L1_error) + + /* "haversine.pyx":22 + * + * cnp.import_array() + * DTYPE = np.double # <<<<<<<<<<<<<< + * ctypedef cnp.double_t DTYPE_t + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_double); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPE, __pyx_t_4) < 0) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "haversine.pyx":55 + * return tmp_op + * + * cpdef cnp.ndarray[DTYPE_t, # <<<<<<<<<<<<<< + * ndim=1] haversine_cy(cnp.ndarray[DTYPE_t, + * ndim=1] lon1, + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9haversine_1haversine_cy, 0, __pyx_n_s_haversine_cy, NULL, __pyx_n_s_haversine, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__6); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_haversine_cy, __pyx_t_4) < 0) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "haversine.pyx":1 + * """ # <<<<<<<<<<<<<< + * Haversine distance formula. + * + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_4) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_4); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init haversine", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init haversine"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* IsLittleEndian */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } S; + S.u32 = 0x01020304; + return S.u8[0] == 4; +} + +/* BufferFormatCheck */ +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t <= '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case '?': return "'bool'"; + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparsable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, int is_complex) { + CYTHON_UNUSED_VAR(is_complex); + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, int is_complex) { + CYTHON_UNUSED_VAR(is_complex); + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case '?': case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; + } + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static int +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number, ndim; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return -1; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return -1; + ndim = ctx->head->field->type->ndim; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; + } + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return -1; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + return -1; + } + if (*ts != ',' && *ts != ')') { + PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + return -1; + } + if (*ts == ',') ts++; + i++; + } + if (i != ndim) { + PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + return -1; + } + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return -1; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return 0; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + CYTHON_FALLTHROUGH; + case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) && + (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + CYTHON_FALLTHROUGH; + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (__pyx_buffmt_parse_array(ctx, &ts) < 0) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} + +/* BufferGetAndValidate */ + static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (unlikely(info->buf == NULL)) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} +static void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} +static int __Pyx__GetBufferAndValidate( + Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, + int nd, int cast, __Pyx_BufFmt_StackElem* stack) +{ + buf->buf = NULL; + if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) { + __Pyx_ZeroBuffer(buf); + return -1; + } + if (unlikely(buf->ndim != nd)) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if (unlikely((size_t)buf->itemsize != dtype->size)) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_SafeReleaseBuffer(buf); + return -1; +} + +/* PyDictVersioning */ + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ + #if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* ExtTypeTest */ + static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + __Pyx_TypeName obj_type_name; + __Pyx_TypeName type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_TypeError, + "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME, + obj_type_name, type_name); + __Pyx_DECREF_TypeName(obj_type_name); + __Pyx_DECREF_TypeName(type_name); + return 0; +} + +/* BufferIndexError */ + static void __Pyx_RaiseBufferIndexError(int axis) { + PyErr_Format(PyExc_IndexError, + "Out of bounds on buffer access (axis %d)", axis); +} + +/* TupleAndListFromArray */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* fastcall */ + #if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; // error + return kwvalues[i]; + } + } + return NULL; // not found (no exception set) +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ + static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); // transfer ownership of value to values + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; // ownership transferred to values +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; // ownership transferred to values +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* ArgTypeTest */ + static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + __Pyx_TypeName type_name; + __Pyx_TypeName obj_type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + type_name = __Pyx_PyType_GetName(type); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME + ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); + __Pyx_DECREF_TypeName(type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} + +/* TypeImport */ + #ifndef __PYX_HAVE_RT_ImportType_3_0_6 +#define __PYX_HAVE_RT_ImportType_3_0_6 +static PyTypeObject *__Pyx_ImportType_3_0_6(PyObject *module, const char *module_name, const char *class_name, + size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_6 check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; + Py_ssize_t itemsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + PyObject *py_itemsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#if !CYTHON_COMPILING_IN_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; + itemsize = ((PyTypeObject *)result)->tp_itemsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; + py_itemsize = PyObject_GetAttrString(result, "__itemsize__"); + if (!py_itemsize) + goto bad; + itemsize = PyLong_AsSsize_t(py_itemsize); + Py_DECREF(py_itemsize); + py_itemsize = 0; + if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if (itemsize) { + if (size % alignment) { + alignment = size % alignment; + } + if (itemsize < (Py_ssize_t)alignment) + itemsize = (Py_ssize_t)alignment; + } + if ((size_t)(basicsize + itemsize) < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize+itemsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_6 && + ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd-%zd from PyObject", + module_name, class_name, size, basicsize, basicsize+itemsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_6 && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* Import */ + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportDottedModule */ + #if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__3; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* FixUpExtensionType */ + #if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ + static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ + static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + __Pyx_TypeName obj_type_name; + if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' does not have the buffer interface", + obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return -1; +} +static void __Pyx_ReleaseBuffer(Py_buffer *view) { + PyObject *obj = view->obj; + if (!obj) return; + if (PyObject_CheckBuffer(obj)) { + PyBuffer_Release(view); + return; + } + if ((0)) {} + view->obj = NULL; + Py_DECREF(obj); +} +#endif + + + /* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return ::std::complex< float >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return x + y*(__pyx_t_float_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + __pyx_t_float_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) +#else + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabsf(b.real) >= fabsf(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + float r = b.imag / b.real; + float s = (float)(1.0) / (b.real + b.imag * r); + return __pyx_t_float_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + float r = b.real / b.imag; + float s = (float)(1.0) / (b.imag + b.real * r); + return __pyx_t_float_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + float denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_float_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtf(z.real*z.real + z.imag*z.imag); + #else + return hypotf(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + float denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_float(a, a); + case 3: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, a); + case 4: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = powf(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2f(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_float(a); + theta = atan2f(a.imag, a.real); + } + lnr = logf(r); + z_r = expf(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosf(z_theta); + z.imag = z_r * sinf(z_theta); + return z; + } + #endif +#endif + +/* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return ::std::complex< double >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return x + y*(__pyx_t_double_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + __pyx_t_double_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) +#else + static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + if (b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabs(b.real) >= fabs(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + double r = b.imag / b.real; + double s = (double)(1.0) / (b.real + b.imag * r); + return __pyx_t_double_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + double r = b.real / b.imag; + double s = (double)(1.0) / (b.imag + b.real * r); + return __pyx_t_double_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + if (b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + double denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_double_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrt(z.real*z.real + z.imag*z.imag); + #else + return hypot(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + double denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_double(a, a); + case 3: + z = __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_double(z, a); + case 4: + z = __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_double(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = pow(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_double(a); + theta = atan2(a.imag, a.real); + } + lnr = log(r); + z_r = exp(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cos(z_theta); + z.imag = z_r * sin(z_theta); + return z; + } + #endif +#endif + +/* FormatTypeName */ + #if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__7); + } + return name; +} +#endif + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); +#if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } +#endif + if (likely(v)) { + int ret = -1; +#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (long) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (long) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((long) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + Py_DECREF(v); + if (likely(!ret)) + return val; + } + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); +#if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } +#endif + if (likely(v)) { + int ret = -1; +#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (int) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (int) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((int) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + Py_DECREF(v); + if (likely(!ret)) + return val; + } + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* InitStrings */ + #if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/bin/shared_obj/haversine.pyx b/bin/shared_obj/haversine.pyx new file mode 100644 index 0000000..b9178b6 --- /dev/null +++ b/bin/shared_obj/haversine.pyx @@ -0,0 +1,104 @@ +""" +Haversine distance formula. + +**Available functions:** + - ``haversine_cy``: Haversine distance + +Credits +------- +:: + + Authors: + - Diptesh + + Date: Feb 14, 2024 +""" + +from libc.math cimport sin, cos, asin, sqrt +import numpy as np +cimport numpy as cnp + +cnp.import_array() +DTYPE = np.double +ctypedef cnp.double_t DTYPE_t + +cdef DTYPE_t deg2rad(DTYPE_t deg): + """Convert degrees to radians.""" + cdef DTYPE_t rad = deg * 0.017453293 + return rad + +cdef DTYPE_t c_haversine(DTYPE_t lon1, + DTYPE_t lat1, + DTYPE_t lon2, + DTYPE_t lat2, + str dist="mi"): + """Compute Haversine distance for a pair of Lat/Lon.""" + cdef DTYPE_t rlon1 = deg2rad(lon1) + cdef DTYPE_t rlon2 = deg2rad(lon2) + cdef DTYPE_t rlat1 = deg2rad(lat1) + cdef DTYPE_t rlat2 = deg2rad(lat2) + + cdef DTYPE_t dlon = rlon2 - rlon1 + cdef DTYPE_t dlat = rlat2 - rlat1 + + cdef DTYPE_t a = sin(dlat/2)**2 + cos(rlat1) * cos(rlat2) * sin(dlon/2)**2 + + cdef DTYPE_t c = 2 * asin(sqrt(a)) + cdef DTYPE_t R = 0.0 + if dist == "km": # pragma: no cover + R = 6372.8 + else: + R = 3959.87433 + cdef DTYPE_t tmp_op = R * c + return tmp_op + +cpdef cnp.ndarray[DTYPE_t, + ndim=1] haversine_cy(cnp.ndarray[DTYPE_t, + ndim=1] lon1, + cnp.ndarray[DTYPE_t, + ndim=1] lat1, + cnp.ndarray[DTYPE_t, + ndim=1] lon2, + cnp.ndarray[DTYPE_t, + ndim=1] lat2, + str dist="mi"): + """ + Haversine distance formula. + + Calculate the euclidean distance in miles between two points + specified in decimal degrees using + `Haversine formula `_. + + Parameters + ---------- + lon1, lat1, lon2, lat2 : float + + Pair of Latitude and Longitude. All args must be of equal length. + + dist : str, `optional` + + Output distance in miles ('mi') or kilometers ('km') + (the default is mi) + + Returns + ------- + numpy.ndarray + + Euclidean distance between two points in miles. + + """ + cdef Py_ssize_t arr_len = lon1.shape[0] + cdef cnp.ndarray[DTYPE_t, ndim=1] op = np.zeros([arr_len], dtype=DTYPE) + cdef DTYPE_t a = 0.0 + cdef DTYPE_t b = 0.0 + cdef DTYPE_t c = 0.0 + cdef DTYPE_t d = 0.0 + cdef DTYPE_t e = 0.0 + for i in range(0, arr_len, 1): + a = lon1[i] + b = lat1[i] + c = lon2[i] + d = lat2[i] + e = c_haversine(a, b, c, d, dist=dist) + op[i] = e + return op diff --git a/bin/shared_obj/haversine.so b/bin/shared_obj/haversine.so new file mode 100755 index 0000000000000000000000000000000000000000..b49134ebd48577a8fa2691a41de7f8e5b67160b7 GIT binary patch literal 72048 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
=)- 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 literal 0 HcmV?d00001 diff --git a/bin/metrics/metrics.c b/bin/shared_obj/metrics.c similarity index 100% rename from bin/metrics/metrics.c rename to bin/shared_obj/metrics.c diff --git a/bin/metrics/metrics.pyx b/bin/shared_obj/metrics.pyx similarity index 100% rename from bin/metrics/metrics.pyx rename to bin/shared_obj/metrics.pyx diff --git a/bin/shared_obj/metrics.so b/bin/shared_obj/metrics.so new file mode 100755 index 0000000000000000000000000000000000000000..439d65d724a49e9c5a6595348a9d31fbe82755a2 GIT binary patch literal 71264 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 literal 0 HcmV?d00001 diff --git a/bin/metrics/setup.py b/bin/shared_obj/setup.py similarity index 52% rename from bin/metrics/setup.py rename to bin/shared_obj/setup.py index abd9145..8301480 100644 --- a/bin/metrics/setup.py +++ b/bin/shared_obj/setup.py @@ -2,6 +2,9 @@ from setuptools import setup from Cython.Build import cythonize +import numpy as np setup(name="Shared objects", - ext_modules=cythonize("*.pyx")) + ext_modules=cythonize("*.pyx"), + include_dirs=[np.get_include()] + ) diff --git a/logs/cov.out b/logs/cov.out index 807cfdc..a99fcb4 100644 --- a/logs/cov.out +++ b/logs/cov.out @@ -3,8 +3,8 @@ Name Stmts Miss Cover Missing mllib/lib/cluster.py 103 0 100% mllib/lib/knn.py 70 0 100% mllib/lib/model.py 45 0 100% -mllib/lib/opt.py 157 0 100% +mllib/lib/opt.py 147 0 100% mllib/lib/timeseries.py 60 0 100% mllib/lib/tree.py 158 0 100% ------------------------------------------------------- -TOTAL 593 0 100% +TOTAL 583 0 100% diff --git a/logs/pylint/lib-opt-py.out b/logs/pylint/lib-opt-py.out index d7495ee..70b7512 100644 --- a/logs/pylint/lib-opt-py.out +++ b/logs/pylint/lib-opt-py.out @@ -1,3 +1,6 @@ +************* Module opt +opt.py:128:21: I1101: Module 'haversine' has no 'haversine_cy' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +opt.py:445:24: I1101: Module 'haversine' has no 'haversine_cy' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) -------------------------------------------------------------------- Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00) diff --git a/logs/pylint/metrics-setup-py.out b/logs/pylint/shared_obj-setup-py.out similarity index 100% rename from logs/pylint/metrics-setup-py.out rename to logs/pylint/shared_obj-setup-py.out diff --git a/mllib/lib/haversine.so b/mllib/lib/haversine.so new file mode 100755 index 0000000000000000000000000000000000000000..b49134ebd48577a8fa2691a41de7f8e5b67160b7 GIT binary patch literal 72048 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
=)- zdj4>rygGc(wxn#R|$xoBWXIaP(B#?7KKaLzE zvL=!L@w8&KGJ&kvkd)^U`QXQ*T`yb6mkVU7$FmrG3Ca_R{CkP~xP?3<1#%{lyCia_ zh5T2vN{M#>Xh z^34`O+<> zc1G(jWETB|!Bb6VHxOfgl^F9B#%zH>*I95B21WGv>C*4`3Rbng%i%vQ{3Q&;?`+n- z)8m^u?tW0vzOx03XXYN@PaXFu0D+<4%5?T4iaBBZQFUKM0!n8BcHQiVe9coVAID~6#Pu^~{7Hw<$E!(!mbl!(zs0>Yy z7K{4Kz-Hv{`W;0ueJ;?jo?+er8W)TkK!$8&1J`se{W+;@)x+&;DEM$iCR#HNsDTW) zUE#D1mu1u3%g~M9z5~8+ZjD!K+=oRoi;sE;>~<$x*R z^a4jLthL}gb`8shGu|Y*!jjAY-IG_dN$_vpr4X5>{Ktb>Y$OWM{J^xQ3Ar7{TpWa` zqM67>={m%z1+4NjZ~{s#R+UW0UWS~^tm#m~G@wiYdSJYnwNa!a`46L31LDtkmSv@T z^$~Cvdx*u>Jah_{>0=u5(@=0lj)ZLFeu8N2gI8xr2*^F;MmJO!R6yMCi~q9yq&oNOTvLlfEWByeRYN zy-xt#9$0epK1PZH^MNw9we;xMWwKZge}6GM4tfPK&(4A+U$}YoclD`(E!lyaaX`>_ z7WR<&sI$nUR z3T@HO)>IC}0}T-s@BopSbpGV0+~!0tR6%<_e+-8z{Z z#c|O$+;sN-lV^{4=QnRMMO0hM}p5q$;QIl}(N%_@cf#}hVH;f^(|GhE<< zYhN1)h2j=OaOjkPSnjjA#}Biccof zR8mK-7Rte9CHgVM6gv+w%(j31HL>%bK;RWB(A7?cI(KU!zRa#0I6#0%pSzRsfZJs{ zv(QdGjHu4T1nMiLBXJopm?k^C-@ z^t`YIym-3*3PdppR0-ljC|XXn8#`8E*(>p&%Eei_p(n(X89g5aD4xu?cr-xt&Nnbi z8E;1iiNr@t9FBfALQFrD;^AmiB;M6R??R2JX|DkgdkqQj*aywl!($#}P`EfdcmXyg z4+W4@QD=Vh%l1z z^IsCF1QKt+X+TLc!SSWQXZT$J775&)B|1Y0#%J7B2Jm79E@0?0f)!Xr*e5vM930NL z8H715jhkzCcD54*&$tIE`kkF!GKnZ&#KZ&8It9{3c0PnCg7pZd--`lTD2V^>zG(Wr z%n04a#F&m_nOdlc(NP`825X@PL_3b9YazNj(YqraMG(mkRzdeRjT7tgl_)MW@Ezts zJ$9dpadoz5)8P2BjsB7=cl1}t(>tbTK%$PoEX1BegB*dep7!_B0%u`LTIk0&u#6+c z*j`7bUynre;c=ut{Z&Yx!}M}&dbc9ZCwdF3y1;Z^wU(LKIDy6Ej7Rd%Mp?nuY_ioc z{aYxLc2-ZU8Ux0&DO>P{{~WP$%$Zc;QK047bR>BLH3!*(p%dUPQcau@CUbt2c3Nh_@VfMzSy<5FuJyY)Li-I1AXE~;1 zdF*-H3LzmbnWwNkCPG)=WT5Ckfdqdb^G#~hPm`~XfHCS&< z6UF;j9DWi}7B=InKtZ94Sx6(tyjAJ`0`~j>*wX?=1x$FI z)(Y4Q17PA(LOx@+7A4`T?7#c2Hy10tjFM?l8> zJ_z%B2d;!@V~YWZOn>Du1{r%86dnsWf%-iZBph1V)3vM5-9A1QTb@tj8+Cbp-ERhAR&HRz88cYz=6?>>JNnY}!u_r1OZs|8Pa5p) zame+UqltJn5exUXycf;J6mpYi$&QQ@kV@LkV5MjPKe6#ZQ0;?1v~|VVSUSI53Hwsp zVCq%r8}+nas~r$j+s&dmA@EK1GHzlT;gKaWd{u=TRJcNgqlnje6trW2pgmeJ z0^gKCuLT6cwW{PGRl|=|`fU~NR$;9QXRGjH6`sRT)Yyd>2>yiuYeanSO_JSL7($4u zJ>gkp82pe?JY6v`ol!~U5GcinglE;VqlZWc=M|4VUwYiV#y;HQ`3$#A{;7xWZsxi( z0vAxsKhqeSC?=9ST>=U}u!No|p+y6s{IV&|5NJXMM#ORZ*b(77;qkIV|16=42SQ(v z(29XjOogO?rr0TbTSA37o2czB0ez0^Khd!_7c2*B_3(3RlY#RAd?p!ql`p)!ji&cy z;f{7>cJ{2EP?C3)dg-m&;SI0aK9KTh9&<-=;ZsDt`z;=2sQXdcSgc>ijL(gJ^X0ai z^{SWk&F`dp3KwK%uA0?puD&+!XkV7n>$|RqG^Z7wxNDs8#e`3cU7Mq0({{abEUjO! zg8v?c!oJMR!dF)BH+B}DSoKEX9_>;1Aoiy9TI1G(We;n~`&d|M@vzI&+2xp9vULL+ zA*{n3rhsD)inMM>L~PAFwq@J(sc3+{B+3`Eyev9P;P3*PC|oniQpYu%%h2ZViXvb5 zx@@ic?&7GIv!mDn0NyORBQW0k-0#YxMezS9s+rpYIY&{PTz(XO8`cEm`1H zbKFF5BIj404ILXWzM#B`@dEvr1+x~z0yos|`#uO8GXw$~f78}A95xs!V&qU%z~%-G zUXqRj8Z61c^>@3mHP=Fz+F)4@4z8xeu=wi69_UGY{)QnMtm0;>^Ko`xcutny@kN@} zd9D~xw`Z$TstDTw)Rz@%-cck2Z(?(bL!SHzYcvxo(z#2Fk3ecNZifn&U^8w;p6X93?A1_WEVOvnZXGv?#I2||7YQ9s6r z9Eds@sEV&x4J#yHuaN`E*D7>G-#v*w8c6Svuh1L8s(+opSF~@A)4nr7+XdRO3s4|| zj`pu8(~aZQlj+Yd;vzf>btDjUQwyBBHIc^s%YpgO@9=%xiu(H<2734kp@>{$)qD-lN2};OTD^MsD&5?J3qF~Bdz4l)msSikSJt>4eUn#6J!AG6P-4@@gtsT0yG(z;(mYcCRAFC=s+I8hR^ zV|v+sdXLBkTV$MxGu%1Kr+~sK3Bg zKk-i9#xWe96=HmL?hTIT@Wi~yWd#g~`j?Aw`3-cm6hPl!#C$n{b&B!$a;1GdZiXyU zjK?2fxE;ZkRgTAg6jQ@3f-=^4d?k+Xv-xp^dLn#vJT8xqN6LY&+#iBXOhK7wl;2y} zADHM3cUc;RP3=m0zF=YW^o@}HXZGlYI|EbTX{A01eHBxQ(kq|QGf=N~1l~}3m0tk? z1pb63jRnV8nzAAOcb8%}94>;2i;?$xpjfg{bTVFv06UWZ&OFgL)A`#65;*bkjco;2 zSG3Cf{yIt?lL#O?an6wK*#rPY-+@(}GYQ6~3#qj#g_(LJn^25vz@8;s!l5Uo^AM{| zfK~fEn;=2+B=7~O8%y>tNR=+D)8y&JHaJ%gfU4f{0@-o|E)-T&)CVfqKEEXlAyusJ z#l(CCFWNh3XWz3{y%v48;eSB?LwPwoPM^h+=-*?fPkZJZ=)qzgZZl&AywE*#J7xyX zz-Xslhx6wW|4nQDfTZCWHl17VKS^)Ytl@?J`BEe`n3Uet9@qj7bmLQK(y64!d2d@F z8}r^)n;vDM2Rt`#tyzPO|Lky}5BVno2hm~i`R_*SNMNq*0D)$Gd*D{f>r-hv9;i~s z1D(6?KD{qLv3^pIH^afs6NBI4BG`EZhZY69W9I^t=v=m+<8NyIm#7QJEfD@0 zY>vEY?+SR(3w@_>KEp|qvc!!)tVgBsemO0^K(zx5CldPN$}oE918dwoixkGqo^mz^ zR_98jp8+3c-wyN-Ub*lZU-GRBauS~2Dr`KuiiKkq=aoajTkz6nx$x1~{;}zN0dtyl z%zqBx90pMD#5Sb}e0+?iYoTIfo4r6r-v?haozqm&aK=wT7F!?pV(Xyj3R0rCdKYR+ z>eO_t^Co5|&V;nk=Ri|RpoI=0A$ng6y-m10Aksp61ug54NDE2(cQ$6T-K(nxu8-7% zGNlJz9G%qGXoq`BVWd`gt-JFc-igQ1(6rD~Ak3o>yiRhO7Gjt1+$BplOC7;s!tM53 z1F!L$&VzAb1xCRs7JC^ZGNA&P1z$&h_~4L(&vg!)C?>$C0gOEcR5i{_=UzY{$JkQ< zn$9Od97A)hkYIvQvYpH=MLG{U%Oth5v!dEEWDG z8lr^`0us9r#pV2{-V{0^U)#Y<`>NEVMVQH_kA=l%I=?^_(wC#rg2P1Y#jQS{@ik6g zXR7Iu`Xl$bm}SJg`#6fR>VwoS2vp|Au7wvcAwID`JB|lQDt8>f!`e79S`h z2COGyoM>GbCsAvhd=n{j!e07JI8NpwEyf8M09WnkV>w<=R-Z2G!^xbQFi%q7qxaeC zJ73oKEvvqFko%ST_%amdPmITm{VY(pgC|O#qRl}_8^`S#l@OG;QwQdMY!SNz#Psm< za-|!r8$T8?7}y!ykqnixz#U1`IgCslw(Q%47}JA41MyX)6Uld4bf;NN_H_%n+4(Ct zIe(i0w)l%!bngGU;BPHOYLY(@I~jks0`p}2xdeZ2l1?N)!=n2mq~+u$`4gfW*k7)| zjnI!G*NLOxdny#BBpaA!q^pJ=9cpq(?yB&!%Xv?JvGmLgXsl{^c_s!l1SgmbZsJi zBhxL3^lYYACDK!v{(2&P5!2sGq|avh=ZW+%rZ-q=j%U;P2ozuMxGM)Yk;GEA`d*}Q zHggpwUxYWCoI^>22x_?x-J2Hcp!?ul}axZ;BFazl% zGJAZ+&qzk3q*0XF--A=eom$bBDaUs$xWZ>?;X={!QJ#gLW{>@N(9 zOQEaCgES*FqbSL6e+&7fiqoRpurHonO^l%yzHnO#kB?c^Vn}%=U~Pt?FsEr@Xw&&xX+C! ztV%(PQdoIaL;=LiuOuCny5}E}_ ztR2>C$v`!y$Lae!0|qW z?RUEzn!#7!JncAZM*I=Pp~qR?sm1Ort@8yS>EVUhyp@g})1D&jyLc<Nq&0%MpF7u!`%Jp0<3N$Fm3*RY*h9avu=6{<7^H=+1zK1u4xi#F+!f5zg|C`? z;dDXAD+qY+8*)S+e5VJ_y1r4k>XO#ZhW{-%I@A;31+I>5Sse1x4)hkj8B7oD4Ss;G z+z7G3ZhYT#etk8HsB>v*7hWSw-k0Fa>Di8;wg_ce4y4T9ezs;193`iIMD5T3Op`TmLF2pvKDKLL?wrPM*mHD zyVWMtQ!f30LjL1dp?~iea?X3BuS4`__!=C;K>xvP;1?w9njM+u(l>uF826xrdSOV3 zmTwaYnW_ zGCd7P)^P9k20z4BNAEar!gF+68r(zS1>3P#T7t@q(U^rXu5H6=U>Airr;i<4?N58-d2(*e%$_ z7J-7JZ)!q+Nmo~Q-O4icuRXpF2zq#dn_g?(95mY~{sioS;%sAdzt_a)4PJ+eU=-ro zis_7iQS8y4)r~&hOU&^>t#j2a#5c6ir-GQcNEdKJf1nG8J?3A;awDKP!!O1)KXaFE zqy<)!gbSixeFLv9X2Vv4-*&sV@WX(PeeOpz>Vj}TEWQJ6cwdeiY81SX;fz-S#N1bg z%|JgaUA2vF0DrLuVYMXoH>=$Eq{N?B0=@!pp&vs?5Oey=rt@FS2yi-QXXo|E?lDGh zmX506;n)oriKg>i;N`s$yPO6Q`YbE&4b$1qvKI(QMlsom)tOxA3uk3(oe{wB`pSuWsp7bK$#oqU z4v(Vh(!wtS=lQ0N_y#!FLdTgw0sRbF9N#ej=+1ZtA;xKm@qy>_w|TM=x&i8193C?W z3>O>6ea36W##_%rsco5Brx?azXh8|u>pTQr@^<4x z4#Gd-hM_HIn!x1-rY*X+vMCtO=+Zd#5(R32uEZ6%j%@|D83gtO@D4%k24K(8NKCp^#Y`o>Ng8UR?`u-?G?i%oLj< zx#g+HY|8U!xP^vlq1#0Y+aWKvLq$lTCqH2YG%9yNlZ3=fA+Zs?$lx1X5ZFu6(+}X@ zT;VP)auAswI? zxan-Z-IA#m;mc{>dhqYr|-+X(7H$&1n_M;chMTDv}V+KFGX;9;+i5M?yFkp%~QZ zDP$zn>9e<>PR2H&Q3jc*!mXtDp;CV-E?mtkm@HH{=3W%SJxw5ZBG=*?;$QWu-Ms$b zOMAtdpS7l;des&ln#QuIm5}G~L7u{WtKRdNTZ;``Ei@(-8)Gg9B`Rp_M(_oF|KIe3 z=>^9%foh!WQ0V0UI8cLCobp<+TgalnhFAtuqX8>{0wD=VJ(c z#62k6`4og+5?PKF>NRiGXY3rjw}{%k#ulMtqfo?K^$+yy>+KM&k?~gsKr1#T{*lqN z9VLZtYWL58++w#;_XXc#)ma4YV!vaZYkasSjynYP~AT}r%F#Eb98 zFsy&T)jgcQ6h>e4$KnNCIX`~Po0X6l*57Uv6iabuj~*VPb#hu14IZL}W>DR*-VmiQ zqn-lod=o`uAL9%F{J=-R*Ir|ibMPL>l`sCf*fXbAJ%d-!1sN zJ{x{^)ZxWV7mmq4fCX{;7I2X{}tF0#hySWCe{C% zi?oq(JK9`qv_YqxRfy`?AXBHm4kSyTs{Ww{QtV&gNj1826fm$ZyairMY1H{BCBD;1 zp}S(eU$B;|FjVN5>AV8iIG;my>|)k0h5Ahtmgtuw8>>z(ng^l=;C)Z3`n3(Sim`*| zmgg0;B>oDwa)ZJYS(NPyPw|Fv>u4^mLM`+KBvTyrES}b?g`P*5Y0X;b_XxEOD`w&N zyeNdz&1S4~>Xs)C#>aai&A3E6H(P>WPJQB1_4~BnOvd+FGWEh&f}idvndJxvi*O%2 z7oF~yHdlM_#|*F19{d+37_GY(iZC0^#7h5Z36~9QR)zciGqedCvuu?1g$uL|CB+u~ z$heiL^^t5B* za$*Raz_t$-$wq*=2Y5&o(I095Vx)FoIpV_W>UrJ^JpI*!pKsZ`Z4i`oC2~3rUaoZ> zLL1t7Dd;jlJkRSui!DJ^+Q%8U-9}~Ei?*GKwyB1li-wWsyrXhF3Xb1n1>yNw+J+fR z^ui-rXePupZH5-218$)s`unvLaR>6hDNISxF zl~cWuIVN_DFX?G}^zhBOy0OruNA83&-IeR(i~84qh!@)6jbQI$NI;yOzeT8ruf_ZhQ*E6{lwh;J z2v*5mx%yz(?`WTF9Ntth%Cg06dNFTyXR>z}p^WUeZVV7dY*r$THaKEe3Yr-!nkcIL zS}2Y<37Lho?DW`hV04^F)6c?Hhxh-*n?|ugcF-|^vSNohw~2bEU9R1?9w{iVw<(?V?{ZN-|s0lv|SCSpu zhiu7@7q{;VzYNAK`x|3B8!g9V3C{>m6nB&q(}ifgUxIsV#YX%FCN5j6aU9V%tI@TP zr8&BWUYL#!J_obrv@$KU7T{^uX`QcOY4ALM9a1p|vOo+ZiZJyaj=Ek$mOQNZzQvCR z4ijIvG`C3m&W@t4;4B}9#m`XMBfNgGNgyZ6NAl0YfW`c?r-6Z(b?!z#NrJH%Y8-cq ze!U(wL#`!fedOtQPxEwapAl;nd|{^q=Q5(ye5j=l-)zVQy~v2w2%>N8l*3&}kG3J*J#E3==W_nN93x%3Zv+3|(5qLC{SMy-a8ZH745&FPE zc0ijJdKh!cw7ay`g}Jw||iyxC9GK-;c%ku=Exhd(Xk47iOSSUkjc+ zZGjg0HISzj1^0E8l%RpJ2hcCv*X4awfW<2`8o6xgl4DA2vWH7@C=9%4f@!m)t7Inn z2p*AQqoJs)q!?q1Zz|xlS_V?)64DmXqUbWY2yoeE>6Wfo0UV>dyCqL>$ z|LG9)K9+HO$VT$Qrac8D2>P41qDeS(7YjG`d)RW{0#J;fWZY3wGM%WLYUpfDo8pB- zB@IWfW>0&;l;AO6q#`YLD{|ZKDt6#De8*kc4!nX22~GK2NrWOi@+7ZAv&tWn#rzzu<*My-2yq(urOhvUBEP;O+n0WK)1;j^{w zER_v;z_}ZG8pR=iyGDDfFf2ZSC+9VIg8!m*wsBB&XSE-{Brue!*f~w8-X(B1dq8c& zUSGtW6)Tmsqhc>!T}_MV55qvXJ#$*M)|m}_-0PQbwNNKIKLm1dVFT92gNRWB3QA^T zi9@3Ou34B1|A-hygwT<+l3c3~Vv{i)sd_OVdl3eabm*8U~#JmS2 zEvM$!f$TMRmSU-RM{IP3F?|Os#VQ@Ujgd(H;TcdDUPs?}BWsJ~e+)A%Rv;=;{vCdl zvm46BZ!ZENf)c{HAjbF0bwEE4=s*}O5&m_Jg#i0{8L~~$(2RExNBLjbvVY6$12TI% z;_%}a8+%ASlHZAX)Fg5%D|uF;JtC<*D059G{)nd|_Av6GjMARuc^=$|y74)_fI0E1 zW>_}H`{E;*a3%f`({OFFn;EZ`e0d2}V`sXX9mMyId*yrl!`-H{8qE^Z?0l#X-a2r* z#Wi$psNhgJ*Ny)&3TR%!n~C$=8JVP^Kg0hWMMdbrsqNEG2N(1C*~(n@AKjQPX6wch zxDK(mDAOjuGed-;;FY?83mqsJhBaioj;}=}sD=mW#_8>COXdgOQDx^M(<9b@`r~t= ztGSPXLwE(;es1hDMwDWO6HD+mR0wY%zCuvs2wXr1DShap#hY1L=c#BM-Ph9dgaw{` z^%FGR3uCdUuQ##4p{LKPN!*9XM}Mk*+Je6Dc1&}_RQ(-W7s;p~fkL!O3w;X^v9)yj z)%}K88)m+mHR1#-GV%AY)luanlz;;RUkk+x-`mj(J%Ry%AUtt0iIx2?IfDA%Ca}IQ zU~Ob9!g8z|FX`GW*j&fcbnUub;PWF4# zaSx0med_dGWDwwW5<|q-+Ty!xMSE17>eMn3JPUBPnARyhN86V~|=INFJ$rz^k_hE2;%QV2kJ2 z;x1cUx0R*m(<<9#!)aIX67JDGvaz>9hGJ?U1N{~<1eXIM(2YG%R&C^u#Agoi)e=37 z+sV-00FODK%gVVE?LV#V8pDBtM+bf7Y>E;KN^zbn7CC+L2DTBpwq6+Pk#5yIhM33&0oP7j~ zkIF$I31W}A`3WV-8SbFC*w6~na#2%4rNc3Z!?-vR9)?=KWC?OI zosU(5p4tbuBVS$2a8{5Rc@nsi#o(_JSv~`1)^9{1enbbyXv{ShgVcnj2~s0QuuR5V zG||HOD;N|uqd6G@K8ALhu-9)UC%8X`??{N|!)cA#=W0*_?JiT~o~nh;V}$oT!fV^1 zhe8sQS#f0gO@;KA{k~k3=q%MJ4jfwWUWmus2YbMD7J*$+qzSp=azQ8pg3^usoQT1@ z|5HRTjxPhU))_pF#4{cNBhZ;dH%Fz;oKi2ld7Y&*kGc675v9vmWT=5pi;p04%IE^m z+5;0=JMwZ7FFBRim`tb~Vo^GxW#woO{Fj2~D0rCz@NDgYnM|Y0^^!ao8%x{;u)}@E zW8%}wcoVVI_*dRX>_(8J9;49k9N*Mxw@Zs`1j!@X4HNI3E~}(!)@YL^-iq{*YqTtP z&K;-V96@4@SOO?=NB9sDUJogw^q67^A9J~aKPKVhE|KtY{CjZ3e-rQ;Eoa*iZDhT> z?TEHyD@tdahFn0Z-L?4temDCNk#k{REJ4SC+jHGW7wmf8QF9M>e}ia+%(8IT_zfV zdjnaXlra<#AzGnWk4Y_v{2eKF6IBN`GJ0TSdakdqn#;vtj1ER~anG6aj8YKreF>Z) z)tt;$DY#IO!S$Gz216TsgQc>uKhH&~-d*7vyvnV!P?^^G9_(^oSZWJKW!EjRh3FR? zKLrc?^O(xuTm9iERw&HcW5|yU27kg1x?g-%RgY{E>+QyKfsNr6{kF2pJG)?Wc{aUy zI>3?X-@5=*A`@Rm&Er{Z4v7_CAuVK_i!M|RpR_f428DvS8#e4^9 zq?8F>90Gfz!WQdkXtcs+KJFVSY;rEK?^oFC0MSAx(j{%?n@(L}?}}sJqOdau5t|=k zB`3_sxg@d09VQqTzVM6++>5I98LhS2NO`kU9!S1{LcHUOBS@T!y(d!fGq_(PiBE;# zp2o&2!6A1+%W+UEb|}&qvt1OqpK~uhK7cXhb-Dy}#K`r7!PCt1LRB1)bL&w?< z`M@pwu!2iWwrC;3*hUaMY5g1{@pk+jCq-f-Lr)87R3MiljFv-eGiV5V7ozh#Pg#1p z-ySLM|IfZ5p?{>vll!*CzHr-D^>3QgKfc~i{i_AG^mDVev3K=+Fb&hb}wl&AAg@i zVXup0uUFVnfqkRGX1?jHC$`kq(L!5!<<4i^32mJ(?jcKUZ9t)fwyq!vo*2tTw;f5$ z5iRGDjfqbnC^ili^DmElLCyUwrdKS}0Zp8V%1`J`M75qx2caynBi!cVeWG~(yo>&c zErHS`>o40E*So%c)$d!#4Enttx$Jiud9gF#x)A+t*E`Bym52UY<#}Gg@;xHN2d)vu zz7{VJV|N!Id}31tQ|*k?2<}2nd}4PGgj3D}{@sD_91DK_KzOZ1|5upLt@9`&9joXm ziy&E;k>bXpXpeY5;_&sT^iB}5?O%C*`5NK8g3R+woNw-Ax(^dF?r(zMsAS6#+nzXA zBwU9C1;1|$gs-#UpA3X&TKo<{*Twlo{fk&%vFJ~}-)%Z)0wDMwB`}LQL*b&xrNkRS zy!iRAt^Z@9|KWWR{m;{J6TbY|KDHx{kMrV@mGFe`+e6pSR!{dCT<35e-q|JEOCvA{ zT?1E}QJRVxxK@3uOT#5&o}7O@Q~GqwQ$5dPh`>C2A3TZk_y}v&hk9;pxv-03qT$#I-4s--jT2^pC=IMkBfNr!3Yz7`4jQ z#=bzWCg#`h^pz+d4eb^s`d(E13j2)p8rx%EM|qq4VaIoV4f}8?nx{JhR7DR`jHdIt z1>ovol8^V7r<-42#LX;uLmsEqUwXQSiDG8#y2N;}nKRF#^}?K4oJXFQiUtQ!M42-a zs703x)hq%VYI9&ZKS4R=FYJ6DObhwuz2WIT8)ajE7h?cF3y614NXBrAZ4Kd z-pYd{y8i)dc%vH?U_BnOC7TRRe-A-)#Ow49y*wWfcI7~)$2xNVv+!Pf!2aSUpMS2)@m6H8;@ zVlHb31WEiY0EDs2@Xd9pe{wWnJiaOh5PN$hTIw_Y?&%)KKE%2}qI`6d<0-b!K40K_ zm~)XMT?w6!NMHHR>i~-6_e`KBaI|5hn$Dk;q2_uNwp3ldg(58{Y0sQS#fw{3hq$80 zEvr2wI>53z07i+;by*AjNnv*(WjcSPu%ld~gdO%fh0WC$FN7*==EKjfuywXnV22cT zm%#qE!e&1F4GMc*9Q%5O9TnKOD{SVQ&QZXYSLm`(SA3TvYB|p;hic{5TG?LO=ce$R3=&}H`6j_9QATU-EfbaH}LTZux z*{Dru^;krNK8|Gb(lIaDUl!S-g`T7m%h$r43(hiHX;HXe8}p3%kE&RDe&dlCHe z(l6aF-zoUBc#G(s52+&fYZ=`zpW&aE#~ixx9pNwHTIpPc9C0LrKlCO3))+2OZo#c% zcuYBy^AFNwGP0K<>yi?~HXMIu1sBqBU{ma_P9Vq1SQb zG&?f0f`~ zJy;@`E1d~@25+ntMzs*{gZZZN8wMZ2ZHgmt_}aL{g`PqQulW*R#(0qTYI(;!m)F~I zbcwSeel-#-LMHGT&4Q)jEfm**#`O6xScc;D7p*fFJ_T=KFq6r@X`Nn?yj>*U(mI!l zI=TPHZ@~D`d;ho6j1!ZAV|`-rJqJ`&^_DO+g|=@J>2X&aud8W zH`Ce@f0GgKfE2zjCUa?@3VDTo!vgGw(2ry+9et5El0wY541q`cF`QbZyYPw;&dhq! zF-$JI7P)+nIpX{$R#~X^Svf#lh`$*!Uqf2Dj-E%W7k7XCbo>EBQ0(GzEF2S&>6;Lb zzSPSh_myS@GeJN$Bk{E~aaRX)8=(&nFE-pb(8Kkwa4p=xE+4+}p!21PA|Kz7;CmFg zF^*_!pAlXT)afO#iA2YL7nTY-ezB=tAD`ZiiK==d_#-w$Mo8Da*suAaIJ zuNu6s*72n;yq(mo;_0wINTx96Vs5la{IB0Ty6j91d+9{Ck2t3`!+6?#FK zQ7Eq$&dAapc>5F}gacb~H4N{yVnGK_IXpPPrMFdX7w)&fKEMq!@$F*+e*q@icb0Yj zD+WnNPo^*+9_1jLIvMxpt?GOeqM(tUn`g#&a|8Q7j3&tGF4$mX<$*%f4LOaD)8qK) z*Fp=xV$%4)l|2Y;BnrTDl?9pgjl_H&K1B{t9OcNdH%gGk*gGFOY`0UyxVxW2YT&pl z5OhBkGMO*vj!3L0P;jvO7uo?ZksfFO7O$kl`Niu!_{`*%z%qO^e$LcYeHhQzhSNW! z2#W;WsceYkH+E2LzS`M6pn*^C6~Ttt?kmJu$tLIr`k)V!xfva@i;myG-?gs)0vPkd zhp{)*zD?GRa;VqKf^V=OUTw3={&A-$`?l7#*(%G=rN!kdzHM|0{v?t7W=NJ6Dg%dJ z<8Yso{NQ?JrWbRu=x}+>5tiUgyofX_D|it8OkEz8{D@tR2`M{>5A#4txX+n@_a;`2 zMmIsl0$4qCeCeWdIV1dL?%tU!0o2%HfGmD&auCg_x68rYVaZ{k)s}0;kSoG6b}#6~ z+=5gwJGP0`GA2@CMo9Uk%gEC?^+{2CB36MleI3{zy5 zkf;~=!j1l0;KWW-dV+PIxn%!`XshU|*jNb9bl#&fLf-^#_j1ggu^vVy`0i=ynP`&X9xW9~t zO_BU>UO;{X%O^w&aD2trhUIK^A1DYlNr3JKsJoebW`j?we!QCRwl-?P2YTlpJ^f9l8ld?2e(=J_EUhxxa&Y^yf=yJl#Sq@SeBMxYU zI1Yov4Yzbxv#Ars#u|FQmvl&1erqA)Y(>{1ke^1fgFtpF$YK?IT^!jIfb0b%@ zo*TN$Siz04R+_MAKj}oAR|)L=eW0N_eJHSFr--F4qm)QOInMYB-aBY$>@5s%)A>K8ND6R?xpOW2SBuYF=HWNTK~g?{l=5sa|mg%RT%ts-}ky_ z61qg-jRqO4Q?dEVZ^G{#Ls%tOgKHcY1TMuZ-tW!FM~yENkPkC0e^)QQG>PlXc*7BB z!G7FHJ+>R~|88Y-VJ1bl{v7SB=(%H==Lel}+SF7(-Z8$awz365 zYu&O&f3-`cf{g>yt+h=p0bs@97ND+i09YpLn;MtdkyV<3>tuNru%^DLlH{tJf=lcD zh=>was?yaOXbDyY9Azs5wM~t#rlq&~k*ahxH=$a83t~X1!_8EGW3?mL*j(AtS_wL? znx>Y9%7B$QzN)FAx!&I6)=}X0Wj;P}kJx zm{zs2M#Wv@7P?T|xaO-I<>hElwZEmj+#w@?)YR4ck#1_KTUOVIbaQ3Z^2%idfnR@P zK!5_ZNVf);HZ)ZSf!^w`Y^kaRv8qbe*6J8HX>x9EYt95$qu*cM>Z)vXRkkb(Hn4bU zU27|3;0mm4_FE!qtZeYR#*bS#-c{G?YHSL)s{J)}=xxVx|H>6jEuhd4Yz?@U`jw1Y z9krFW`&&TAKdH(wuGN(@u64?|>Isge!MgfD9T=z*T~OW^g(HLxKUg>}g19j}Or7aLpRb^|y(O6yC(o(t7vCQA-Z>g&y;!+@3 z3dbH^hBR1et3P86NPF0Vn4)}gZuA{GQs~(f3qGrw7H(E76~--B>6(ih>k&PH>sEl&Dt@OwzX81H!uF!i&?Ef~WC z__f>cnv>#8+hHv8fAVAf{8_YEXD@yS@MGMfY2{mKdl|;x+-{otw#lD8ZowFCgS+Bs z{4AI~{utoa&&vNl4Ou^bgW)zJjegL63BP|=Kk-?#7!7{d7?OpF@kdm} zb@&n&7h?R6l~}|lyQaW$gn28QP1%%H*0s2rYFs|rLcwZ3%(!Zo4>qz$O>%i)Y{INd z7-zusb3Mko-?%JLtC*prKpdv;C9aC5W*Uf<^%aR~t_ud5gE09l`NsvCGrpm2`~(*a z+2wWhO|m_%obk&W#!nFKAdflh6}1A>1Zt?8ASuuD2ZAk)1KKYN3Hxr6GUgIYlzg>g zzuKSdLDAQ$Wp-`)YFySN3_D@WxoRq*C)KV%lS`UkUoA2KVk@7p3;!2HhQ$>mAzP&> z;QykFJhy`%x&Kf*gVre*T_l7w(N$4VYmE%paupR*PBK!44VwYGtuD|yOzGFKDO03G zJwa@MT3V;XyJ@1UxUM^R2#TZXhTr>SkU3r&Z;+mX0`Eqy`F|r!{Fj~t4u#f#q zvF#Wj4o79{%Eqd?CYs99plX%*aYiT6e1-dPfYHS?EZVxt`no%4hdUBRER9q=USSKD zw6rv}Fqy~~DU>f))-rbv-1j-|@V7LzI$A0lm-*FxL7KPE5t?bo! zenTZ%%`F(MVr3)?`#8_RQQ>H8b~MyEmNz)AcHq4H8ksb$zojZ)7ceeOm9XCB@S2W_M*vNeF6fghTB_Av8%7m=R!F)21Lu+NMCjlujD* z0q!)N@f1V#M_LRGRD2{D3T%Jp-gDl*eY-c9kKwP}nbmpsch5cd>)dniyYIcDRFUFz zF9;jDcYI>JJQKFN-H}44?JMRd?U+55rTg#=dc*`y%na%y1YItTh5frLZx`-lS*6Hq zxCa#K2u9t(ZiRxRSvzo^E`z&H_s}|fELBpiFBUOMx+B|NnVN}Pth#=^)-%VcxrwUY z`ez{nN(XBOX?(bXERIvX2drn-CoUd#@ay^a%XqyvdiA{JDV))G#nO#Ebh1QstRA+6 zYor_;$C63s8|f+ZNv;ePP2u*MItRy-TL=kh0Yy$RZ+M;JOVS6ZhjjRtP zb>A*Czcf{#GZOG{#c38}0k`Qu$>t+IbqIwaYRiP%GPGA>3xp}K5eH!FV0~>qgR*OQ zA#)f9K^WUZ1FG2J$;)(T~IrDbTp+O$vuh(mXrQC{NLlh*@( zk^@_%r+HLRP0XC!{#^cG&c^ZTcq+%kW|{e6j>~AgX5XON2y|Ys5hv&);2_vimCAuc2`+Rv(pnP z)Ll+caR@!NS3`a&x*qQGM3xpuwk5JbU{xzm+Z|J~NKI*W%jL%ma5I#c3$vc5ihJsc z-8wdU=r3vu4pp%R)+{fo96)q$GRo)Q*!GXETOU?avElybdYm**mu=i7^(ce zeK0jP?M!GdL{t_ZRr9X#(QEY3BV8SG(wuOoJ$4JWRuJK0RnxmfcORBY-##^7!VWW^ z+ge@P*WI}erk%Db>yo@e#?-QgLCs~LHpOfqi%kNCl}?puoviH!d;uiK)G&UylcUb6 zF1=D^wehUYiN3Y)J7NQ{}lSm*-5Re$iXA4_NRMi z%GtKkdZ-juSsH7#b9PzP{@2T>q*)e^TRNYEor4~!y$Y@J`pUxnE7eUcQYF$FE;E&; zjiue5nub2o!wC*L8x}CVKW+ z{bb~Y=Mi3dk|2cTFRuLV{eRu_pZDWs0t!n^@o$bbU^QLYeEk_jwj$n|sZ`G4+6E=h z3>~01G-D46x(xah=!O-Rb=kg3a}n$&c#5NL4O81e_y2%K|L2hlc0rp@PVEJodr$Yk27b` zjt{^o38?h|&U8U%LG6{OA7~sj@Xw7WqKuKMx$V<3+R^l)`12SWR~fSxwWeO;@hIuw@=& zd^PZ^@N30unXSYVYV8TF-L@upuw~Zz!#7|5j?GuUjbO?j$M0MU=c5F0pgj0)#9BUF zsr=Z36>xn9dLX>ScNo9ZK8#*0ei0Z~(;~jd@H++UN>B=&_?^U$Yb;2SVE{u%R4j|a** z)SL`0u4?}1Mbh!Qk2B!yL!G@kPhb1SfqjkSB9M+91!lo^sY9&0LalqzCc=+Xe&FxH zwH3HUB~V|`JHd;xcyuwj9pX2nv0FwHGfqszQpw_J$khWq4 z^bfXC9n4|Ojs~Jyx9l0MPna;h!ENq!UvQgJGnz*>@{`xXJ;;AEm80@waFeS-t=*v( zsGi~>yZgb{;8E=d&nfW4NlsbMl@44U2i^i(eJPLWF`DB?n=x94FvmO4Y#S9u!KhFS z<p1VmF`X&%pZC5(_Bc$ztt=|e=@#tucj@-GbRz;PA6tL5`6SrVJQ2THc zc?>F~>oQ07=FkP0ktLnity52MPziGZ$f5DO3$o@RYaG{9$4NCV1vTd>{X_xO46Qn{C5ty+sU?Ou{wt(WS+4S=>F z{Rq+@<^EIpGN;F*`Pn8E4YPx>pgyCq$bkPG)zP$;>_e2+$<m1lU`!-adhK`37p! zcA5j|%Q@;xrDM%&&@8F}Iu$MJ2?mZLjulbIVWs*)Enj~6`94_26?4r;19w5pEwqMX zP5&2~*J#^)0oc)dX>B^TqC3=nlr(1r2PLQ|l3Rj3o{gJy%pU8=SP12FNO z=m%dyJeUQ(Ez}XK&Cr7;StIzJLHWxcu2e1p)#XE|w|vOt@_Rys=IhbKPE^TPOjmG6 zL%b(=6k=&#au)l&vowKK8>?k>xowP68+$`bf#z6K=xktrXc_%=F3=O2ZN7<6yBTN~ z&>lvkp(D_zdHf#6Zvnp(&9Ts;=KkKAM)lNfK85Gpcx@`+BwKV_ZMGb35Q`b6f=(ylu(#| zSyN`Srr)gNFn=m6(xgCuIZ#3J3uV~C=PRmy((YeyypQFfe`?Z~Ild2{7*Y5M$9r}3 zxBvHle)}R{m-u=Qyxs$b9#}Tu4Eyb+pIg#@T`G3SFZaZA8ae4pNZh6YHpjlyYIIiJ zoL1wet7T>FOsO864lX@mKB*&%qaF~K?X^)iX8%B6jxasR)Mem{+1<5Bq&E6HkA3HH zUE~6JOhPb?mrkw!`wHimb(7%f&U^_eR|NRzjpxaCEAx%~5_z|sC*J|)EBq39 zv**co5A!Xn!!(?u82b64^W;0ueDf@CcAu}~IQlsAjqtdgOf}~FGV{%{{c6nhtE1;T zAMfIM7rdw1?yZ*K{23BL>POK#lMv3cWWyL|}HkNfbbTjAGi+PvP<%+Xv5 zk1I1Ndo-P1Z*SZf-V`>kO4Ls)tnXJmMXF0`PrwRVmw77#jP~t~_}>n^2`BkW-@%0^ zY{Yewb+NVV!~YOC$?x#Vk1{^u!;_3J_;6C&ChKy`W_^)yKfri9<1#*f!g4x>ap4K3 zb{zu`wd<^}{*NepjrGiFj}Tm*z>nHB&-Y=H`UPAx>bGZ^Kf?9l>RM+7r-ma){a2!a zBwy^O;BRMK?4aDQMHm-*CeN(Mi>az7%U92>P)?cg+tDuQ>ugGV6(#iOz7++vq zJ(oh-R~TPn`~%GY65|n8NxuE0%BcFtKI01Jzm#!V_pW998pcoU)_{5*h0A`C!~3i^ zGQT5oeE4mQ-^lf$^HK_j85jGZo+AN&2zV2ohS}HM z0t@|HQ0jl#AH;Pwi=HbJe)T2|sOLwxT!R~K!Y$tKJjnbvFurHA2GnyPT#f*zd2x~z z>NNVD!kr3#gY_9wNCesc+{5@7<8r?6Va6~2qUJ~SR5-!-r9S*|##>p=rOf|T#+TX7 z3;u1!FJL)xF7Ybk53rmIS{ILd}W<1MyD+``s{4nFPpJOv&9cNtjje`FZKP@{e$Ke;|L$h~w_rk1{Ududpq@eEax>$z8I7ywi@4m$xRurTxF*&F<8nVD z_#ET1-+h$%kBj_$8W5b`H=+8-{e^nw2bOO#F88zQSs(CM7?=C*4J@A?=#d=R&#LEn zNb6vHX}@Mv&*pG>Bjbyc8duNVa9L(t?!(oyGvMSBhvc6uX@2!g3zr`UPWE=;CmL_n z#QJ;26KsbORpB|t`+WF+0VnygPgT#eC4?$H12q3~vfUv53j<%)cIHbnJl z@vTP@#%F!y?qYn}hvyZJa$nWu*_v1n0H=DMxa))w3yFKFfGwPUGr1 z6E1(i@)ubCm`=9d3Ik5r?hHsB8dw>|Zi%f}7;&l>RmHsC)t z;Pj7(8nx?92K;IRew_gyFyM{>pE2N%81PRU@GltfXASr_4EW0i{AUJyH8zlq`m@b| zZv}pdwc3*Bbu#V|1OILVKCa|Q?kYWO;D5+~KW@NR!X7kg*Ov|aFB`M@G%2^z<|HkfWO~>)4w5W)UFc-{3!$ef&u@w0skp*yH0EIZYB1qhYfN@4EP-e{D=X6*nnHobv-c?{ zQ-*5Eig_Y!Z&VV)*nFqA9iNBhDGkmfcUO8>d!1X*I}N^`_M* zQG3+#rNGkzeLG6NwhE}rUVOL+w_Ry+yQROPq@MHTp;~%A5O2(&J|5Otx%or%Riu2f z#+ec`{n`&&G?UR^4G(4axoJDp_r}i7?7_xm&{yR3DfB(3&RL&^Z~oBji5Vx}9UJQI zVTN?RFykl}5#>C4KSK)jM_~rv&N^v)w_MIz%1MOBdjXUMx}q5;>&v%5DIEahXvjc6AiZj`>ucICU1s~#a|B9h5vqn5hpxYD(1)a#W*a@M#m5fF|) zn{z)eg`f_gkOEaT^pkg&3e5PYF9Q+Ip2s+ zdAo637VSR8Wz=p{q%hKZH;MeFxDoASrEdCbPl4bftxU{7E1X{PJK}x{y@Q-OW=l!( z&%kUR8|Rr8J<;K0EIKgYZ128#_ux=`_*dh0c62BE2IH@pY3E>cs8{4VaF9XsC#hRW z_4ibaoDjI41?z>s~w04x_B~=C(Im?$WL{cUG;S15}&Q zUgdGoljLbA2^5DNjceN2u&OpxoiO^kk5XT&e^hSm8q$|D4JVZi7DG7snt(sk`Wn(m z_@=2=MgE{4oe(XTi?DV(^J23!!>-)8TH3m)`K3m7)AiS?+yX>PH46zAsif-}NzWf8 zE}eqDqn-sQ6s>y>yJHB82~eQo$~fv%VQe=vyIx?j({NAZ+AL10j+j~(JZ6wRsq(6! zo0yo1(r4`2QE7cmI=$7asfpO`Nhq)L`)(zijnzwKSg8kj4N7Q_JyfmO7+gL;wkI_< zmQC;1OARNGS|TgFIbb2W34Wk5Sa=%rJ_+p4?aMnkIAc<6D0^!p-aB<^ljFIm5^wFO zbg@=62!)!KcpKs?m6&Tr?48Dby3U&-1H8ox)^w|^j)jBXCipv*%GcgG(EBW_I_~`4 zwk)AF3G_jJg9OYCOf*T@@ASDo#KgOs_^NZr`xqCgzYmvOZiSrEMBbG}9$-D{;q6pN zQTuOqS6s?No5{(7<-~8^8Qswz0}I}tak~2)y@BqF4*^Q3abo5&9K^Q?aIMWr1xhtm=MUKO?4dej;aH|=_U_bLs>W{Dq%^boh;BEbvHu0U}VWo zIz4b)h)X@AoFVx3fg=(Cb>@$}&eZR)DJ%RilprV19fD~&Oif31T_MWHGMm!faGpXP zR4oJ@!!}kILc4(7sUkK3dV9^bTiQsYr6ofI@$Sr{CHbNnF+?HGO_mzOaKl8+*X(eA z1^;nXe=F6h42`G9V&vb8{0PIb$vBeut^(EPKCY>JZ_J@lCA)=fZyHOOSK=KUF%28W$et^kMV<$WZA z*0wI{k3J|lB`e=&7%R`fv+@nVGmKUsaux%Z%E*ptQjwU3liA7iWWnDQbY4s?_4VVU zl%@x3GTpO~19y0ecJKRf-!1LalRz{?`vGSiB_7XI16pkXYbyX6!NIh0{*^(L^+Xe` zDk!>Ym1&=$Zu_dH0&_&!3hruWJ2^b+OO?hT&KbzU-umaSJ2b-+<7w(wZ+_O76x@)i zPS^>P!hPTlKz}J&oT7{ksymQ9ke%?)9j=ZTPj_~ph9t?AuPUPZl(fAcZf>SU)7(zx zrCaK~6JCCBP0o*)g$5ocDJ7s%Vzjg?+0zLirrldPipOhS%2aluT=ZnB+9MCB6h2pz zq^jz187aow)qP?h>og9pL+;EWkf$>lDs8s71#D=g_Nua_+i~JlZBZPayx@{tYmmDV zN%No#3H}!YdZN?LTY6H&RvRJq)-{jFPyJyzw8Xsj0s~fR8)`yRe246j)6*$3e#%JJ zOg!a$6Wm%06J+)SFG&co@^q3jp%uEh!nxgJuO5r_JO~gT3F$>qf$Y6!(j?4-d zCiI^$JnmTGGO1r!nfY)rkBwx?3TMY0ePTD3L4Ju@VRa^lLg{Eum7SWz5l2{O+FJrf zZkBL@QhV(AYscP-oOo3U?;>!J3#KiUh#>Ew;lx!1d0uiQV)$1=dC4Z<2?~|>J^lGv zjMatLSLghP1Dc|3IdL510gx9rn zkOG-XKS{ETo5WMN@aDHUpU_reWGZo?^g5O|e+TCmD)kjH5*M2H<(Kz+h2DRs3?gH*_pOpRg>MaYopd7#J&0Dy%eG3d&(R9<=^ki zzx;yc7J7#DUt~zXN&HdHFZvli;{K)AR;m0B7tt3joWIY96E6iX^%bGg6P&;O3Kdn~Puzn` sX}8R4yawmiU32Qc)4$O4F+8vG1}RrCJPvJ`|LRLL=hMQ-)Sv(V0onT@;Q#;t literal 0 HcmV?d00001 diff --git a/mllib/lib/metrics.so b/mllib/lib/metrics.so index a09aa5098906ee4886ce047ca7fd35b7ef95f465..439d65d724a49e9c5a6595348a9d31fbe82755a2 100755 GIT binary patch literal 71264 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 literal 72056 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 diff --git a/mllib/lib/opt.py b/mllib/lib/opt.py index d9a3b62..9a45a7b 100644 --- a/mllib/lib/opt.py +++ b/mllib/lib/opt.py @@ -26,6 +26,7 @@ # pylint: disable=invalid-name # pylint: disable-msg=too-many-arguments # pylint: disable=too-many-instance-attributes +# pylint: disable=C0413 # ============================================================================= # --- Import libraries @@ -33,12 +34,23 @@ from typing import List, Tuple, Dict +import re +import sys +from inspect import getsourcefile +from os.path import abspath + import copy import math import pandas as pd import numpy as np import pulp +path = abspath(getsourcefile(lambda: 0)) +path = re.sub(r"(.+\/)(.+.py)", "\\1", path) +sys.path.insert(0, path) + +import haversine + # ============================================================================= # --- User defined functions # ============================================================================= @@ -68,51 +80,6 @@ class TSP: _paired_loc = None - @staticmethod - def haversine_np(lon1: List[float], - lat1: List[float], - lon2: List[float], - lat2: List[float], - dist: str = "mi" - ) -> np.ndarray: - """ - Haversine distance formula. - - Calculate the euclidean distance in miles between two points - specified in decimal degrees using - `Haversine formula `_. - - Parameters - ---------- - lon1, lat1, lon2, lat2 : float - - Pair of Latitude and Longitude. All args must be of equal length. - - dist : str, `optional` - - Output distance in miles ('mi') or kilometers ('km') - (the default is mi) - - Returns - ------- - numpy.ndarray - - Euclidean distance between two points in miles. - - """ - if dist == "km": # pragma: no cover - R = 6372.8 - else: - R = 3959.87433 - lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2]) - dlon = lon2 - lon1 - dlat = lat2 - lat1 - a = (np.sin(dlat / 2.0) ** 2 - + np.cos(lat1) * np.cos(lat2) - * np.sin(dlon / 2.0) ** 2) - op = R * 2 * np.arcsin(np.sqrt(a)) - return op - @staticmethod def pair_dist(loc: List[str], lat: List[float], @@ -158,8 +125,10 @@ def pair_dist(loc: List[str], copy=False) df = df.drop(labels=["key"], axis=1) df = df[df["loc_x"] != df["loc_y"]] - df["dist"] = TSP.haversine_np(df["y_x"], df["x_x"], - df["y_y"], df["x_y"]) + df["dist"] = haversine.haversine_cy(np.array(df["y_x"]), + np.array(df["x_x"]), + np.array(df["y_y"]), + np.array(df["x_y"])) df = df[["loc_x", "loc_y", "dist"]] df = dict(zip(zip(df.loc_x, df.loc_y), df.dist)) return (loc, df) @@ -419,51 +388,6 @@ def __init__(self, self._inputs = None self.output = None - @staticmethod - def haversine_np(lon1: List[float], - lat1: List[float], - lon2: List[float], - lat2: List[float], - dist: str = "mi" - ) -> np.ndarray: - """ - Haversine distance formula. - - Calculate the euclidean distance in miles between two points - specified in decimal degrees using - `Haversine formula `_. - - Parameters - ---------- - lon1, lat1, lon2, lat2 : float - - Pair of Latitude and Longitude. All args must be of equal length. - - dist : str, `optional` - - Output distance in miles ('mi') or kilometers ('km') - (the default is mi) - - Returns - ------- - numpy.ndarray - - Euclidean distance between two points in miles. - - """ - if dist == "km": # pragma: no cover - R = 6372.8 - else: - R = 3959.87433 - lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2]) - dlon = lon2 - lon1 - dlat = lat2 - lat1 - a = (np.sin(dlat / 2.0) ** 2 - + np.cos(lat1) * np.cos(lat2) - * np.sin(dlon / 2.0) ** 2) - op = R * 2 * np.arcsin(np.sqrt(a)) - return op - def _opt_ip(self) -> Tuple[Dict[str, int], Dict[str, int], Dict[Tuple[str, str], float]]: @@ -518,10 +442,10 @@ def _opt_ip(self) -> Tuple[Dict[str, int], how="outer", copy=False) df_wt = df_wt.drop(labels=["key"], axis=1) - df_wt["dist"] = Transport.haversine_np(df_wt["lon_x"], - df_wt["lat_x"], - df_wt["lon_y"], - df_wt["lat_y"]) + df_wt["dist"] = haversine.haversine_cy(np.array(df_wt["lon_x"]), + np.array(df_wt["lat_x"]), + np.array(df_wt["lon_y"]), + np.array(df_wt["lat_y"])) df_wt = df_wt.sort_values(["loc_x", "loc_y"]) df_wt.loc[(df_wt["loc_x"] == "Dummy") | (df_wt["loc_y"] == "Dummy"), "dist"] = 0 From 817efafea9a065871f571a4799bacc1865c4daf0 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Thu, 15 Feb 2024 02:01:19 +0100 Subject: [PATCH 12/18] v0.4.3 --- logs/pylint/tests-test_haversine-py.out | 7 +++ tests/test_haversine.py | 82 +++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 logs/pylint/tests-test_haversine-py.out create mode 100644 tests/test_haversine.py diff --git a/logs/pylint/tests-test_haversine-py.out b/logs/pylint/tests-test_haversine-py.out new file mode 100644 index 0000000..e18220d --- /dev/null +++ b/logs/pylint/tests-test_haversine-py.out @@ -0,0 +1,7 @@ +************* Module tests.test_haversine +test_haversine.py:63:18: I1101: Module 'mllib.lib.haversine' has no 'haversine_cy' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) +test_haversine.py:73:16: I1101: Module 'mllib.lib.haversine' has no 'haversine_cy' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) + +-------------------------------------------------------------------- +Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00) + diff --git a/tests/test_haversine.py b/tests/test_haversine.py new file mode 100644 index 0000000..5a57cf4 --- /dev/null +++ b/tests/test_haversine.py @@ -0,0 +1,82 @@ +""" +Test suite module for ``metrics``. + +Credits +------- +:: + + Authors: + - Diptesh + + Date: Feb 14, 2024 +""" + +# pylint: disable=invalid-name +# pylint: disable=wrong-import-position + +import unittest +import warnings +import re +import sys + +from inspect import getsourcefile +from os.path import abspath + +import numpy as np + +# Set base path +path = abspath(getsourcefile(lambda: 0)) +path = re.sub(r"(.+)(\/tests.*)", "\\1", path) + +sys.path.insert(0, path) + +from mllib.lib import haversine # noqa: F841 + +# ============================================================================= +# --- User defined functions +# ============================================================================= + + +def ignore_warnings(test_func): + """Suppress warnings.""" + + def do_test(self, *args, **kwargs): + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + test_func(self, *args, **kwargs) + return do_test + + +class TestHaversine(unittest.TestCase): + """Test suite for module ``haversine``.""" + + def setUp(self): + """Set up for module ``haversine``.""" + + def test_haversine_distance_miles(self): + """Haversine: Test for distance (miles)""" + lon1 = np.array([20.0]) + lat1 = np.array([10.0]) + lon2 = np.array([25.0]) + lat2 = np.array([5.0]) + exp_op_mile = 487.0 + op_mile = haversine.haversine_cy(lon1, lat1, lon2, lat2, dist="mi") + self.assertEqual(np.round(op_mile[0]), exp_op_mile) + + def test_haversine_distance_km(self): + """Haversine: Test for distance (km)""" + lon1 = np.array([20.0]) + lat1 = np.array([10.0]) + lon2 = np.array([25.0]) + lat2 = np.array([5.0]) + exp_op_km = 783.0 + op_km = haversine.haversine_cy(lon1, lat1, lon2, lat2, dist="km") + self.assertEqual(np.round(op_km[0]), exp_op_km) + + +# ============================================================================= +# --- Main +# ============================================================================= + +if __name__ == '__main__': + unittest.main() From 81ad04b84a79839ec0e1454462543223354f5031 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Fri, 16 Feb 2024 00:04:47 +0100 Subject: [PATCH 13/18] v0.4.3 changelog: - added BatesGranger method in TimeSeries module --- data/input/test_time_series.xlsx | Bin 24767 -> 55660 bytes mllib/lib/cluster.py | 4 -- mllib/lib/timeseries.py | 89 +++++++++++++++++++++++++++++++ tests/test_timeseries.py | 16 ++++++ 4 files changed, 105 insertions(+), 4 deletions(-) diff --git a/data/input/test_time_series.xlsx b/data/input/test_time_series.xlsx index 395be646bd57345d3e9779c289d2eb0a244e060b..2b98daaa01df7964e6dfadbcc1b4ed8323b26202 100644 GIT binary patch literal 55660 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 JC+B=m{{p=-??V6p literal 24767 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 mod = BatesGrager(df=df_ip, + y="y", + y_hat=["y_hat_01", "y_hat_02", + "y_hat_03", "y_hat_04"], + lag=53) + >>> df_op = mod.predict() + """ + def __init__(self, + df: pd.DataFrame, + y: str, + y_hat: List[str], + lag: int = 1 + ): + """Initialize variables.""" + self.df = df + self.y = y + self.y_hat = y_hat + self.lag = lag + # Set default parameters + self.var = ["ts", y] + self.var.extend(y_hat) + self.df = self.df[self.var].reset_index(drop=True) + self.dict_weights = {} + self.fcst = np.zeros(len(self.df)) + self.df_op = self.df.copy() + + def predict(self): + """Predict module. + + Returns + ------- + pd.DataFrame + + Pandas dataframe containing `y`, `y_hat` and `y_hat_bg`. + + """ + for i in self.y_hat: + self.df["sq_error_" + i] = (abs(self.df[i] - self.df[self.y]) + * 100 / self.df[self.y] ) ** 2 + for epoch in range(len(self.fcst)-self.lag): + df_tmp = self.df.iloc[epoch:self.lag+epoch] + mse_val = [np.mean(df_tmp["sq_error_" + i]) for i in self.y_hat] + weights = [1/i for i in mse_val] + tot = sum(weights) + weights = [i/tot for i in weights] + self.dict_weights[epoch+self.lag] = [weights, mse_val] + df_tmp_fcst = self.df.iloc[self.lag+epoch] + fcst_tmp = 0 + for i, _ in enumerate(self.y_hat): + fcst_tmp += df_tmp_fcst[self.y_hat[i]] * weights[i] + self.fcst[self.lag+epoch] = fcst_tmp + self.df_op["y_hat_bg"] = self.fcst + return self.df_op diff --git a/tests/test_timeseries.py b/tests/test_timeseries.py index c709c08..9e36c0a 100644 --- a/tests/test_timeseries.py +++ b/tests/test_timeseries.py @@ -34,6 +34,7 @@ sys.path.insert(0, path) from mllib.lib.timeseries import AutoArima # noqa: F841 +from mllib.lib.timeseries import BatesGrager # noqa: F841 __all__ = ["xlrd", "openpyxl", ] @@ -91,6 +92,21 @@ def test_univariate(self): op = mod.predict() self.assertAlmostEqual(op["Passengers"].values[0], 445.634, places=1) + def test_bates_granger(self): + """TimesSeries: Test for Bates & Granger""" + df_raw = pd.read_excel(path + "test_time_series.xlsx", + sheet_name="bates_granger") + exp_op = df_raw[["ts", "y", "y_hat_01", "y_hat_02", + "y_hat_03", "y_hat_04", "y_hat_bg"]].fillna(0) + df_ip = exp_op.drop("y_hat_bg", axis=1) + mod = BatesGrager(df=df_ip, + y="y", + y_hat=["y_hat_01", "y_hat_02", + "y_hat_03", "y_hat_04"], + lag=53) + op = mod.predict() + pd.testing.assert_frame_equal(op, exp_op) + # ============================================================================= # --- Main From b0b4226cc1a3e75dc5832c665e3e8774bf397e54 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Fri, 16 Feb 2024 00:18:11 +0100 Subject: [PATCH 14/18] v0.4.3 changelog: - added BatesGranger method in TimeSeries module --- bin/run_tests.sh | 8 ++++---- logs/cov.out | 4 ++-- logs/pylint/lib-timeseries-py.out | 4 ++-- mllib/lib/timeseries.py | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/bin/run_tests.sh b/bin/run_tests.sh index d36dec2..368a41d 100755 --- a/bin/run_tests.sh +++ b/bin/run_tests.sh @@ -31,6 +31,10 @@ printf "=%.0s" {1..70} # Run unit tests if [[ $module == "-a" || $module == "-u" ]] then + printf "\nRunning unit & integration tests ...\n\n" + coverage run -m unittest discover -v -s $test_dir -p "test_*.py" + printf "=%.0s" {1..70} + printf "\n" printf "\nComputing test coverage ...\n\n" coverage report -m --omit="*/tests/test_*,*/opt/spark-*" 2>&1 | tee "$proj_dir/logs/cov.out" COV_SCORE=`grep "TOTAL" $proj_dir/logs/cov.out | tail -1 | awk '{ printf("%d", $4) }'` @@ -41,10 +45,6 @@ then fi sed -i "3s/.*/\[\!\[Coverage score\]\(\https\:\/\/img\.shields\.io\/badge\/coverage\-$COV_SCORE\%25\-$COV_COLOR.svg\)\]\(\.\/logs\/cov\.out\)/" "$proj_dir/README.md" printf "=%.0s" {1..70} - printf "\n" - printf "\nRunning unit & integration tests ...\n\n" - coverage run -m unittest discover -v -s $test_dir -p "test_*.py" - printf "=%.0s" {1..70} fi # Rate coding styles for all python scripts diff --git a/logs/cov.out b/logs/cov.out index a99fcb4..cb954e5 100644 --- a/logs/cov.out +++ b/logs/cov.out @@ -4,7 +4,7 @@ mllib/lib/cluster.py 103 0 100% mllib/lib/knn.py 70 0 100% mllib/lib/model.py 45 0 100% mllib/lib/opt.py 147 0 100% -mllib/lib/timeseries.py 60 0 100% +mllib/lib/timeseries.py 89 0 100% mllib/lib/tree.py 158 0 100% ------------------------------------------------------- -TOTAL 583 0 100% +TOTAL 612 0 100% diff --git a/logs/pylint/lib-timeseries-py.out b/logs/pylint/lib-timeseries-py.out index b9912f8..41e71b2 100644 --- a/logs/pylint/lib-timeseries-py.out +++ b/logs/pylint/lib-timeseries-py.out @@ -4,6 +4,6 @@ timeseries.py:202:41: I1101: Module 'metrics' has no 'mae' member, but source is timeseries.py:203:42: I1101: Module 'metrics' has no 'mape' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) timeseries.py:204:42: I1101: Module 'metrics' has no 'rmse' member, but source is unavailable. Consider adding this module to extension-pkg-allow-list if you want to perform analysis based on run-time introspection of living objects. (c-extension-no-member) --------------------------------------------------------------------- -Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00) +------------------------------------------------------------------- +Your code has been rated at 10.00/10 (previous run: 9.89/10, +0.11) diff --git a/mllib/lib/timeseries.py b/mllib/lib/timeseries.py index 0e4150f..63f1b63 100644 --- a/mllib/lib/timeseries.py +++ b/mllib/lib/timeseries.py @@ -294,7 +294,7 @@ def __init__(self, y: str, y_hat: List[str], lag: int = 1 - ): + ): """Initialize variables.""" self.df = df self.y = y @@ -320,7 +320,7 @@ def predict(self): """ for i in self.y_hat: self.df["sq_error_" + i] = (abs(self.df[i] - self.df[self.y]) - * 100 / self.df[self.y] ) ** 2 + * 100 / self.df[self.y]) ** 2 for epoch in range(len(self.fcst)-self.lag): df_tmp = self.df.iloc[epoch:self.lag+epoch] mse_val = [np.mean(df_tmp["sq_error_" + i]) for i in self.y_hat] From 44f5acdac1222023845d66e0b8f7bfa7338cb99a Mon Sep 17 00:00:00 2001 From: Diptesh Date: Fri, 16 Feb 2024 00:21:47 +0100 Subject: [PATCH 15/18] v0.4.3 changelog: - added BatesGranger method in TimeSeries module --- mllib/lib/timeseries.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mllib/lib/timeseries.py b/mllib/lib/timeseries.py index 63f1b63..fbd919d 100644 --- a/mllib/lib/timeseries.py +++ b/mllib/lib/timeseries.py @@ -267,7 +267,7 @@ class BatesGrager(): lag: int, optional - Time periods to be considered for creating the model + Time periods to be considered for creating the model (the default is 1). Returns From 8a474ebb9e188ab6bbdcb0b823bf904839e4dfaa Mon Sep 17 00:00:00 2001 From: Diptesh Date: Sat, 17 Feb 2024 17:27:07 +0100 Subject: [PATCH 16/18] v0.5.0 --- data/input/test_time_series.xlsx | Bin 55660 -> 82521 bytes logs/cov.out | 4 +- logs/pylint/lib-timeseries-py.out | 5 +- mllib/lib/timeseries.py | 73 ++++++++++++++++++++---------- tests/test_timeseries.py | 19 +++++++- 5 files changed, 72 insertions(+), 29 deletions(-) diff --git a/data/input/test_time_series.xlsx b/data/input/test_time_series.xlsx index 2b98daaa01df7964e6dfadbcc1b4ed8323b26202..d7d5105c0ceb220a0c9c6400c9954256a24b5421 100644 GIT binary patch literal 82521 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 delta 52909 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 df_op = mod.predict() + lag=53, pred_period=1) + >>> op = mod.solve() """ + def __init__(self, df: pd.DataFrame, y: str, y_hat: List[str], - lag: int = 1 + pred_period: int = 1, + lag: int = 53 ): """Initialize variables.""" self.df = df self.y = y self.y_hat = y_hat + self.pred_period = pred_period self.lag = lag # Set default parameters self.var = ["ts", y] self.var.extend(y_hat) self.df = self.df[self.var].reset_index(drop=True) - self.dict_weights = {} + self.weights = {} self.fcst = np.zeros(len(self.df)) self.df_op = self.df.copy() - def predict(self): + def _predict(self, df): """Predict module. + Returns + ------- + tuple + + Tuple containing `forecast`, `weights` and `MSE`. + + """ + df_bg_pred = None + pred_period=self.pred_period + y_hat = self.y_hat + df_bg_train = df.iloc[:-pred_period] + df_bg_pred = df.iloc[-pred_period:] + mse_val = [metrics.mse(df_bg_train["y"].tolist(), + df_bg_train[i].tolist()) + for i in y_hat] + weights = [1/i for i in mse_val] + tot = sum(weights) + weights = [i/tot for i in weights] + pred_op = [df_bg_pred[j] * weights[i] for i, j in enumerate(y_hat)] + pred_op = sum(pred_op) + return (pred_op, weights, mse_val) + + def solve(self): + """Forecast for all possible time periods. + Returns ------- pd.DataFrame @@ -318,20 +350,15 @@ def predict(self): Pandas dataframe containing `y`, `y_hat` and `y_hat_bg`. """ - for i in self.y_hat: - self.df["sq_error_" + i] = (abs(self.df[i] - self.df[self.y]) - * 100 / self.df[self.y]) ** 2 - for epoch in range(len(self.fcst)-self.lag): - df_tmp = self.df.iloc[epoch:self.lag+epoch] - mse_val = [np.mean(df_tmp["sq_error_" + i]) for i in self.y_hat] - weights = [1/i for i in mse_val] - tot = sum(weights) - weights = [i/tot for i in weights] - self.dict_weights[epoch+self.lag] = [weights, mse_val] - df_tmp_fcst = self.df.iloc[self.lag+epoch] - fcst_tmp = 0 - for i, _ in enumerate(self.y_hat): - fcst_tmp += df_tmp_fcst[self.y_hat[i]] * weights[i] - self.fcst[self.lag+epoch] = fcst_tmp + df = self.df + pred_period = self.pred_period + lag = self.lag + if pred_period + lag > len(df): + raise AssertionError("Insufficient data to predict.") + for epoch in range(len(df)-lag): + df_bg = df.iloc[epoch:lag+epoch+pred_period] + fcst_tmp = self._predict(df=df_bg) + self.fcst[lag+epoch] = fcst_tmp[0] + self.weights[epoch+self.lag] = [fcst_tmp[1], fcst_tmp[2]] self.df_op["y_hat_bg"] = self.fcst return self.df_op diff --git a/tests/test_timeseries.py b/tests/test_timeseries.py index 9e36c0a..fa80406 100644 --- a/tests/test_timeseries.py +++ b/tests/test_timeseries.py @@ -103,10 +103,25 @@ def test_bates_granger(self): y="y", y_hat=["y_hat_01", "y_hat_02", "y_hat_03", "y_hat_04"], - lag=53) - op = mod.predict() + lag=53, pred_period=1) + op = mod.solve() pd.testing.assert_frame_equal(op, exp_op) + def test_bates_granger_infeasible(self): + """TimesSeries: Test for Bates & Granger infeasibility""" + df_raw = pd.read_excel(path + "test_time_series.xlsx", + sheet_name="bates_granger") + exp_op = df_raw[["ts", "y", "y_hat_01", "y_hat_02", + "y_hat_03", "y_hat_04", "y_hat_bg"]].fillna(0) + df_ip = exp_op.drop("y_hat_bg", axis=1) + mod = BatesGrager(df=df_ip, + y="y", + y_hat=["y_hat_01", "y_hat_02", + "y_hat_03", "y_hat_04"], + lag=100, pred_period=10) + with self.assertRaises(AssertionError): + mod.solve() + # ============================================================================= # --- Main From cedd14c5e64d84fca5ed1bd66d18a633ffb67a17 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Sat, 17 Feb 2024 17:28:27 +0100 Subject: [PATCH 17/18] v0.5.0 --- mllib/lib/timeseries.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mllib/lib/timeseries.py b/mllib/lib/timeseries.py index 15cc136..2fcea64 100644 --- a/mllib/lib/timeseries.py +++ b/mllib/lib/timeseries.py @@ -326,7 +326,7 @@ def _predict(self, df): """ df_bg_pred = None - pred_period=self.pred_period + pred_period = self.pred_period y_hat = self.y_hat df_bg_train = df.iloc[:-pred_period] df_bg_pred = df.iloc[-pred_period:] From 37a0efd54dcb53a0fe284db45cdcf21fbbd295f8 Mon Sep 17 00:00:00 2001 From: Diptesh Date: Sun, 18 Feb 2024 01:15:19 +0100 Subject: [PATCH 18/18] v0.5.0 --- mllib/lib/cfg.py | 2 +- mllib/lib/timeseries.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mllib/lib/cfg.py b/mllib/lib/cfg.py index 05614b9..053d336 100644 --- a/mllib/lib/cfg.py +++ b/mllib/lib/cfg.py @@ -44,7 +44,7 @@ from inspect import getsourcefile from os.path import abspath -__version__: str = "0.4.2" +__version__: str = "0.5.0" __doc__: str = "Machine Learning Library" module: str = "mllib" diff --git a/mllib/lib/timeseries.py b/mllib/lib/timeseries.py index 2fcea64..4d06657 100644 --- a/mllib/lib/timeseries.py +++ b/mllib/lib/timeseries.py @@ -4,6 +4,7 @@ **Available routines:** - class ``AutoArima``: Builds time series model using SARIMAX. +- class ``BatesGranger``: Combines multiple forecasts. Credits ------- @@ -13,7 +14,7 @@ - Diptesh - Madhu - Date: Feb 16, 2024 + Date: Feb 17, 2024 """ # pylint: disable=invalid-name