From 884520946fc6f4074e12a1cc607eec3055437191 Mon Sep 17 00:00:00 2001 From: Ines Chami Date: Wed, 2 Dec 2020 15:55:49 +0100 Subject: [PATCH] added visualization code --- data/zoo/zoo.data | 101 + data/zoo/zoo.names | 68 + .../mst.cpython-37m-darwin.so | Bin 0 -> 189124 bytes mst/build/temp.macosx-10.9-x86_64-3.7/mst.o | Bin 0 -> 726580 bytes mst/mst.c | 25281 ++++++++++++++++ mst/mst.cpython-37m-darwin.so | Bin 0 -> 189124 bytes mst/mst.html | 1049 + .../unionfind.cpython-37m-darwin.so | Bin 0 -> 57940 bytes .../temp.macosx-10.9-x86_64-3.7/unionfind.o | Bin 0 -> 179272 bytes unionfind/unionfind.c | 9573 ++++++ unionfind/unionfind.cpython-37m-darwin.so | Bin 0 -> 57940 bytes unionfind/unionfind.html | 1155 + utils/training.py | 3 +- utils/visualization.py | 111 + visualize.py | 42 + 15 files changed, 37381 insertions(+), 2 deletions(-) create mode 100644 data/zoo/zoo.data create mode 100644 data/zoo/zoo.names create mode 100755 mst/build/lib.macosx-10.9-x86_64-3.7/mst.cpython-37m-darwin.so create mode 100644 mst/build/temp.macosx-10.9-x86_64-3.7/mst.o create mode 100644 mst/mst.c create mode 100755 mst/mst.cpython-37m-darwin.so create mode 100644 mst/mst.html create mode 100755 unionfind/build/lib.macosx-10.9-x86_64-3.7/unionfind.cpython-37m-darwin.so create mode 100644 unionfind/build/temp.macosx-10.9-x86_64-3.7/unionfind.o create mode 100644 unionfind/unionfind.c create mode 100755 unionfind/unionfind.cpython-37m-darwin.so create mode 100644 unionfind/unionfind.html create mode 100644 utils/visualization.py create mode 100644 visualize.py diff --git a/data/zoo/zoo.data b/data/zoo/zoo.data new file mode 100644 index 0000000..ca71f7d --- /dev/null +++ b/data/zoo/zoo.data @@ -0,0 +1,101 @@ +aardvark,1,0,0,1,0,0,1,1,1,1,0,0,4,0,0,1,1 +antelope,1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,1,1 +bass,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,4 +bear,1,0,0,1,0,0,1,1,1,1,0,0,4,0,0,1,1 +boar,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1 +buffalo,1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,1,1 +calf,1,0,0,1,0,0,0,1,1,1,0,0,4,1,1,1,1 +carp,0,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,4 +catfish,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,4 +cavy,1,0,0,1,0,0,0,1,1,1,0,0,4,0,1,0,1 +cheetah,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1 +chicken,0,1,1,0,1,0,0,0,1,1,0,0,2,1,1,0,2 +chub,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,4 +clam,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,7 +crab,0,0,1,0,0,1,1,0,0,0,0,0,4,0,0,0,7 +crayfish,0,0,1,0,0,1,1,0,0,0,0,0,6,0,0,0,7 +crow,0,1,1,0,1,0,1,0,1,1,0,0,2,1,0,0,2 +deer,1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,1,1 +dogfish,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,1,4 +dolphin,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1 +dove,0,1,1,0,1,0,0,0,1,1,0,0,2,1,1,0,2 +duck,0,1,1,0,1,1,0,0,1,1,0,0,2,1,0,0,2 +elephant,1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,1,1 +flamingo,0,1,1,0,1,0,0,0,1,1,0,0,2,1,0,1,2 +flea,0,0,1,0,0,0,0,0,0,1,0,0,6,0,0,0,6 +frog,0,0,1,0,0,1,1,1,1,1,0,0,4,0,0,0,5 +frog,0,0,1,0,0,1,1,1,1,1,1,0,4,0,0,0,5 +fruitbat,1,0,0,1,1,0,0,1,1,1,0,0,2,1,0,0,1 +giraffe,1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,1,1 +girl,1,0,0,1,0,0,1,1,1,1,0,0,2,0,1,1,1 +gnat,0,0,1,0,1,0,0,0,0,1,0,0,6,0,0,0,6 +goat,1,0,0,1,0,0,0,1,1,1,0,0,4,1,1,1,1 +gorilla,1,0,0,1,0,0,0,1,1,1,0,0,2,0,0,1,1 +gull,0,1,1,0,1,1,1,0,1,1,0,0,2,1,0,0,2 +haddock,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,0,4 +hamster,1,0,0,1,0,0,0,1,1,1,0,0,4,1,1,0,1 +hare,1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,0,1 +hawk,0,1,1,0,1,0,1,0,1,1,0,0,2,1,0,0,2 +herring,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,4 +honeybee,1,0,1,0,1,0,0,0,0,1,1,0,6,0,1,0,6 +housefly,1,0,1,0,1,0,0,0,0,1,0,0,6,0,0,0,6 +kiwi,0,1,1,0,0,0,1,0,1,1,0,0,2,1,0,0,2 +ladybird,0,0,1,0,1,0,1,0,0,1,0,0,6,0,0,0,6 +lark,0,1,1,0,1,0,0,0,1,1,0,0,2,1,0,0,2 +leopard,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1 +lion,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1 +lobster,0,0,1,0,0,1,1,0,0,0,0,0,6,0,0,0,7 +lynx,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1 +mink,1,0,0,1,0,1,1,1,1,1,0,0,4,1,0,1,1 +mole,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,0,1 +mongoose,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1 +moth,1,0,1,0,1,0,0,0,0,1,0,0,6,0,0,0,6 +newt,0,0,1,0,0,1,1,1,1,1,0,0,4,1,0,0,5 +octopus,0,0,1,0,0,1,1,0,0,0,0,0,8,0,0,1,7 +opossum,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,0,1 +oryx,1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,1,1 +ostrich,0,1,1,0,0,0,0,0,1,1,0,0,2,1,0,1,2 +parakeet,0,1,1,0,1,0,0,0,1,1,0,0,2,1,1,0,2 +penguin,0,1,1,0,0,1,1,0,1,1,0,0,2,1,0,1,2 +pheasant,0,1,1,0,1,0,0,0,1,1,0,0,2,1,0,0,2 +pike,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,1,4 +piranha,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,4 +pitviper,0,0,1,0,0,0,1,1,1,1,1,0,0,1,0,0,3 +platypus,1,0,1,1,0,1,1,0,1,1,0,0,4,1,0,1,1 +polecat,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1 +pony,1,0,0,1,0,0,0,1,1,1,0,0,4,1,1,1,1 +porpoise,0,0,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1 +puma,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1 +pussycat,1,0,0,1,0,0,1,1,1,1,0,0,4,1,1,1,1 +raccoon,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1 +reindeer,1,0,0,1,0,0,0,1,1,1,0,0,4,1,1,1,1 +rhea,0,1,1,0,0,0,1,0,1,1,0,0,2,1,0,1,2 +scorpion,0,0,0,0,0,0,1,0,0,1,1,0,8,1,0,0,7 +seahorse,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,0,4 +seal,1,0,0,1,0,1,1,1,1,1,0,1,0,0,0,1,1 +sealion,1,0,0,1,0,1,1,1,1,1,0,1,2,1,0,1,1 +seasnake,0,0,0,0,0,1,1,1,1,0,1,0,0,1,0,0,3 +seawasp,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,7 +skimmer,0,1,1,0,1,1,1,0,1,1,0,0,2,1,0,0,2 +skua,0,1,1,0,1,1,1,0,1,1,0,0,2,1,0,0,2 +slowworm,0,0,1,0,0,0,1,1,1,1,0,0,0,1,0,0,3 +slug,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,7 +sole,0,0,1,0,0,1,0,1,1,0,0,1,0,1,0,0,4 +sparrow,0,1,1,0,1,0,0,0,1,1,0,0,2,1,0,0,2 +squirrel,1,0,0,1,0,0,0,1,1,1,0,0,2,1,0,0,1 +starfish,0,0,1,0,0,1,1,0,0,0,0,0,5,0,0,0,7 +stingray,0,0,1,0,0,1,1,1,1,0,1,1,0,1,0,1,4 +swan,0,1,1,0,1,1,0,0,1,1,0,0,2,1,0,1,2 +termite,0,0,1,0,0,0,0,0,0,1,0,0,6,0,0,0,6 +toad,0,0,1,0,0,1,0,1,1,1,0,0,4,0,0,0,5 +tortoise,0,0,1,0,0,0,0,0,1,1,0,0,4,1,0,1,3 +tuatara,0,0,1,0,0,0,1,1,1,1,0,0,4,1,0,0,3 +tuna,0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,1,4 +vampire,1,0,0,1,1,0,0,1,1,1,0,0,2,1,0,0,1 +vole,1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,0,1 +vulture,0,1,1,0,1,0,1,0,1,1,0,0,2,1,0,1,2 +wallaby,1,0,0,1,0,0,0,1,1,1,0,0,2,1,0,1,1 +wasp,1,0,1,0,1,0,0,0,0,1,1,0,6,0,0,0,6 +wolf,1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1 +worm,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,7 +wren,0,1,1,0,1,0,0,0,1,1,0,0,2,1,0,0,2 diff --git a/data/zoo/zoo.names b/data/zoo/zoo.names new file mode 100644 index 0000000..27b2063 --- /dev/null +++ b/data/zoo/zoo.names @@ -0,0 +1,68 @@ +1. Title: Zoo database + +2. Source Information + -- Creator: Richard Forsyth + -- Donor: Richard S. Forsyth + 8 Grosvenor Avenue + Mapperley Park + Nottingham NG3 5DX + 0602-621676 + -- Date: 5/15/1990 + +3. Past Usage: + -- None known other than what is shown in Forsyth's PC/BEAGLE User's Guide. + +4. Relevant Information: + -- A simple database containing 17 Boolean-valued attributes. The "type" + attribute appears to be the class attribute. Here is a breakdown of + which animals are in which type: (I find it unusual that there are + 2 instances of "frog" and one of "girl"!) + + Class# Set of animals: + ====== =============================================================== + 1 (41) aardvark, antelope, bear, boar, buffalo, calf, + cavy, cheetah, deer, dolphin, elephant, + fruitbat, giraffe, girl, goat, gorilla, hamster, + hare, leopard, lion, lynx, mink, mole, mongoose, + opossum, oryx, platypus, polecat, pony, + porpoise, puma, pussycat, raccoon, reindeer, + seal, sealion, squirrel, vampire, vole, wallaby,wolf + 2 (20) chicken, crow, dove, duck, flamingo, gull, hawk, + kiwi, lark, ostrich, parakeet, penguin, pheasant, + rhea, skimmer, skua, sparrow, swan, vulture, wren + 3 (5) pitviper, seasnake, slowworm, tortoise, tuatara + 4 (13) bass, carp, catfish, chub, dogfish, haddock, + herring, pike, piranha, seahorse, sole, stingray, tuna + 5 (4) frog, frog, newt, toad + 6 (8) flea, gnat, honeybee, housefly, ladybird, moth, termite, wasp + 7 (10) clam, crab, crayfish, lobster, octopus, + scorpion, seawasp, slug, starfish, worm + +5. Number of Instances: 101 + +6. Number of Attributes: 18 (animal name, 15 Boolean attributes, 2 numerics) + +7. Attribute Information: (name of attribute and type of value domain) + 1. animal name: Unique for each instance + 2. hair Boolean + 3. feathers Boolean + 4. eggs Boolean + 5. milk Boolean + 6. airborne Boolean + 7. aquatic Boolean + 8. predator Boolean + 9. toothed Boolean + 10. backbone Boolean + 11. breathes Boolean + 12. venomous Boolean + 13. fins Boolean + 14. legs Numeric (set of values: {0,2,4,5,6,8}) + 15. tail Boolean + 16. domestic Boolean + 17. catsize Boolean + 18. type Numeric (integer values in range [1,7]) + +8. Missing Attribute Values: None + +9. Class Distribution: Given above + diff --git a/mst/build/lib.macosx-10.9-x86_64-3.7/mst.cpython-37m-darwin.so b/mst/build/lib.macosx-10.9-x86_64-3.7/mst.cpython-37m-darwin.so new file mode 100755 index 0000000000000000000000000000000000000000..dae3ab91a278ca856c76f6c8dac8fb958662147d GIT binary patch literal 189124 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%0A=lk|C$@^HwN9~P57}q=+!s29s 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 literal 0 HcmV?d00001 diff --git a/mst/build/temp.macosx-10.9-x86_64-3.7/mst.o b/mst/build/temp.macosx-10.9-x86_64-3.7/mst.o new file mode 100644 index 0000000000000000000000000000000000000000..d25b3b636c9063ed1d93a4e1d4e46def2a35b2e8 GIT binary patch literal 726580 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 literal 0 HcmV?d00001 diff --git a/mst/mst.c b/mst/mst.c new file mode 100644 index 0000000..9cb7d35 --- /dev/null +++ b/mst/mst.c @@ -0,0 +1,25281 @@ +/* Generated by Cython 0.29.21 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "depends": [], + "name": "mst", + "sources": [ + "mst.pyx" + ] + }, + "module_name": "mst" +} +END: Cython Metadata */ + +#define PY_SSIZE_T_CLEAN +#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+. +#else +#define CYTHON_ABI "0_29_21" +#define CYTHON_HEX_VERSION 0x001D15F0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !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 + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#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 CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 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_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 + #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) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #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 + #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 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 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 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #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) + #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 + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(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 + #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_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #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(__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_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# 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; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#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]] + #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 + +#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 + +#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 +#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) +#else + #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) +#endif + #define __Pyx_DefaultClassType PyType_Type +#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 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_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))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#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) +#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 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#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 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 CYTHON_COMPILING_IN_CPYTHON || 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 >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if 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))) + #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_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) + #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #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) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (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_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 && !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) +#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 +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_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_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#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 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 +#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 PyInt_AsLong +#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) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#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(MS_WINDOWS) + #define _USE_MATH_DEFINES +#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; } + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__mst +#define __PYX_HAVE_API__mst +/* Early includes */ +#include +#include +#include "numpy/arrayobject.h" +#include "numpy/ufuncobject.h" +#include "numpy/npy_math.h" +#include "pythread.h" +#include +#include "pystate.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 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)) +#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_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_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) +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); +} +#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); +#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 +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +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] = 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 +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; } + +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; +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) + #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 + + +static const char *__pyx_f[] = { + "mst.pyx", + "__init__.pxd", + "stringsource", + "type.pxd", +}; +/* MemviewSliceStruct.proto */ +struct __pyx_memoryview_obj; +typedef struct { + struct __pyx_memoryview_obj *memview; + char *data; + Py_ssize_t shape[8]; + Py_ssize_t strides[8]; + Py_ssize_t suboffsets[8]; +} __Pyx_memviewslice; +#define __Pyx_MemoryView_Len(m) (m.shape[0]) + +/* Atomics.proto */ +#include +#ifndef CYTHON_ATOMICS + #define CYTHON_ATOMICS 1 +#endif +#define __pyx_atomic_int_type int +#if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 ||\ + (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) &&\ + !defined(__i386__) + #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1) + #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using GNU atomics" + #endif +#elif CYTHON_ATOMICS && defined(_MSC_VER) && 0 + #include + #undef __pyx_atomic_int_type + #define __pyx_atomic_int_type LONG + #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #pragma message ("Using MSVC atomics") + #endif +#elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0 + #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using Intel atomics" + #endif +#else + #undef CYTHON_ATOMICS + #define CYTHON_ATOMICS 0 + #ifdef __PYX_DEBUG_ATOMICS + #warning "Not using atomics" + #endif +#endif +typedef volatile __pyx_atomic_int_type __pyx_atomic_int; +#if CYTHON_ATOMICS + #define __pyx_add_acquisition_count(memview)\ + __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) +#else + #define __pyx_add_acquisition_count(memview)\ + __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) +#endif + +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* NoFastGil.proto */ +#define __Pyx_PyGILState_Ensure PyGILState_Ensure +#define __Pyx_PyGILState_Release PyGILState_Release +#define __Pyx_FastGIL_Remember() +#define __Pyx_FastGIL_Forget() +#define __Pyx_FastGilFuncInit() + +/* BufferFormatStructs.proto */ +#define IS_UNSIGNED(type) (((type) -1) > 0) +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; + + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":775 + * # 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":776 + * + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":777 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":778 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":782 + * #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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":783 + * + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":784 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":785 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":789 + * #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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":790 + * + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":799 + * # 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":800 + * # 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":801 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":803 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":804 + * + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ +typedef npy_ulonglong __pyx_t_5numpy_ulong_t; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":805 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":807 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ +typedef npy_intp __pyx_t_5numpy_intp_t; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":808 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":810 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":811 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ +typedef npy_double __pyx_t_5numpy_double_t; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":812 + * 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; +/* Declarations.proto */ +#if CYTHON_CCOMPLEX + #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 + #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); + + +/*--- Type declarations ---*/ +struct __pyx_array_obj; +struct __pyx_MemviewEnum_obj; +struct __pyx_memoryview_obj; +struct __pyx_memoryviewslice_obj; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":814 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":815 + * + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< + * ctypedef npy_clongdouble clongdouble_t + * + */ +typedef npy_cdouble __pyx_t_5numpy_cdouble_t; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":816 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":818 + * ctypedef npy_clongdouble clongdouble_t + * + * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew1(a): + */ +typedef npy_cdouble __pyx_t_5numpy_complex_t; + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ +struct __pyx_array_obj { + PyObject_HEAD + struct __pyx_vtabstruct_array *__pyx_vtab; + char *data; + Py_ssize_t len; + char *format; + int ndim; + Py_ssize_t *_shape; + Py_ssize_t *_strides; + Py_ssize_t itemsize; + PyObject *mode; + PyObject *_format; + void (*callback_free_data)(void *); + int free_data; + int dtype_is_object; +}; + + +/* "View.MemoryView":279 + * + * @cname('__pyx_MemviewEnum') + * cdef class Enum(object): # <<<<<<<<<<<<<< + * cdef object name + * def __init__(self, name): + */ +struct __pyx_MemviewEnum_obj { + PyObject_HEAD + PyObject *name; +}; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ +struct __pyx_memoryview_obj { + PyObject_HEAD + struct __pyx_vtabstruct_memoryview *__pyx_vtab; + PyObject *obj; + PyObject *_size; + PyObject *_array_interface; + PyThread_type_lock lock; + __pyx_atomic_int acquisition_count[2]; + __pyx_atomic_int *acquisition_count_aligned_p; + Py_buffer view; + int flags; + int dtype_is_object; + __Pyx_TypeInfo *typeinfo; +}; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ +struct __pyx_memoryviewslice_obj { + struct __pyx_memoryview_obj __pyx_base; + __Pyx_memviewslice from_slice; + PyObject *from_object; + PyObject *(*to_object_func)(char *); + int (*to_dtype_func)(char *, PyObject *); +}; + + + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ + +struct __pyx_vtabstruct_array { + PyObject *(*get_memview)(struct __pyx_array_obj *); +}; +static struct __pyx_vtabstruct_array *__pyx_vtabptr_array; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ + +struct __pyx_vtabstruct_memoryview { + char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *); + PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *); +}; +static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ + +struct __pyx_vtabstruct__memoryviewslice { + struct __pyx_vtabstruct_memoryview __pyx_base; +}; +static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#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 (*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__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #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) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #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_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) + +/* 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 + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* 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 **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* 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) {\ + 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);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +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 + +/* 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 + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +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); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* MemviewSliceInit.proto */ +#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d +#define __Pyx_MEMVIEW_DIRECT 1 +#define __Pyx_MEMVIEW_PTR 2 +#define __Pyx_MEMVIEW_FULL 4 +#define __Pyx_MEMVIEW_CONTIG 8 +#define __Pyx_MEMVIEW_STRIDED 16 +#define __Pyx_MEMVIEW_FOLLOW 32 +#define __Pyx_IS_C_CONTIG 1 +#define __Pyx_IS_F_CONTIG 2 +static int __Pyx_init_memviewslice( + struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference); +static CYTHON_INLINE int __pyx_add_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p) +#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview)) +#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) +#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__) +static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int); + +/* 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() +#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) +#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 + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK +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 + +/* 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 + +/* 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 + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely((Py_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 +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* UnaryNegOverflows.proto */ +#define UNARY_NEG_WOULD_OVERFLOW(x)\ + (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) + +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* decode_c_string_utf16.proto */ +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) { + int byteorder = 0; + return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); +} +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) { + int byteorder = -1; + return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); +} +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) { + int byteorder = 1; + return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); +} + +/* decode_c_string.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(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_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_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +/* ListCompAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) +#endif + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* ListExtend.proto */ +static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { +#if CYTHON_COMPILING_IN_CPYTHON + PyObject* none = _PyList_Extend((PyListObject*)L, v); + if (unlikely(!none)) + return -1; + Py_DECREF(none); + return 0; +#else + return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); +#endif +} + +/* ListAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) +#endif + +/* None.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto +#define __PYX_HAVE_RT_ImportType_proto +enum __Pyx_ImportType_CheckSize { + __Pyx_ImportType_CheckSize_Error = 0, + __Pyx_ImportType_CheckSize_Warn = 1, + __Pyx_ImportType_CheckSize_Ignore = 2 +}; +static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +#endif + +/* 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 */ +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); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +#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 + + +/* 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; + +/* MemviewSliceIsContig.proto */ +static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim); + +/* OverlappingSlices.proto */ +static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, + __Pyx_memviewslice *slice2, + int ndim, size_t itemsize); + +/* Capsule.proto */ +static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig); + +/* 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); + +/* TypeInfoCompare.proto */ +static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b); + +/* MemviewSliceValidateAndInit.proto */ +static int __Pyx_ValidateAndInit_memviewslice( + int *axes_specs, + int c_or_f_flag, + int buf_flags, + int ndim, + __Pyx_TypeInfo *dtype, + __Pyx_BufFmt_StackElem stack[], + __Pyx_memviewslice *memviewslice, + PyObject *original_obj); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_double(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_long(PyObject *, int writable_flag); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* 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 + #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 + #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 + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value); + +/* MemviewSliceCopyTemplate.proto */ +static __Pyx_memviewslice +__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, + const char *mode, int ndim, + size_t sizeof_dtype, int contig_flag, + int dtype_is_object); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_long(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_double(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_int(PyObject *, int writable_flag); + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/ +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/ +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ + +/* Module declarations from 'cython.view' */ + +/* Module declarations from 'cython' */ + +/* Module declarations from 'cpython.buffer' */ + +/* Module declarations from 'libc.string' */ + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.type' */ +static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; + +/* Module declarations from 'cpython' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from 'cpython.ref' */ + +/* Module declarations from 'cpython.mem' */ + +/* Module declarations from 'numpy' */ + +/* Module declarations from 'numpy' */ +static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; +static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; +static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; +static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; +static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; +static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ + +/* Module declarations from 'mst' */ +static PyTypeObject *__pyx_array_type = 0; +static PyTypeObject *__pyx_MemviewEnum_type = 0; +static PyTypeObject *__pyx_memoryview_type = 0; +static PyTypeObject *__pyx_memoryviewslice_type = 0; +static PyObject *generic = 0; +static PyObject *strided = 0; +static PyObject *indirect = 0; +static PyObject *contiguous = 0; +static PyObject *indirect_contiguous = 0; +static int __pyx_memoryview_thread_locks_used; +static PyThread_type_lock __pyx_memoryview_thread_locks[8]; +static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ +static void *__pyx_align_pointer(void *, size_t); /*proto*/ +static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/ +static PyObject *_unellipsify(PyObject *, int); /*proto*/ +static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/ +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/ +static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/ +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/ +static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/ +static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/ +static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/ +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/ +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/ +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/ +static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/ +static int __pyx_memoryview_err(PyObject *, char *); /*proto*/ +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/ +static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_long = { "long", NULL, sizeof(long), { 0 }, 0, IS_UNSIGNED(long) ? 'U' : 'I', IS_UNSIGNED(long), 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; +#define __Pyx_MODULE_NAME "mst" +extern int __pyx_module_is_main_mst; +int __pyx_module_is_main_mst = 0; + +/* Implementation of 'mst' */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_RuntimeError; +static PyObject *__pyx_builtin_ImportError; +static PyObject *__pyx_builtin_MemoryError; +static PyObject *__pyx_builtin_enumerate; +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_Ellipsis; +static PyObject *__pyx_builtin_id; +static PyObject *__pyx_builtin_IndexError; +static const char __pyx_k_A[] = "A"; +static const char __pyx_k_B[] = "B"; +static const char __pyx_k_D[] = "D"; +static const char __pyx_k_O[] = "O"; +static const char __pyx_k_Z[] = "Z"; +static const char __pyx_k_c[] = "c"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_j[] = "j"; +static const char __pyx_k_k[] = "k"; +static const char __pyx_k_l[] = "l"; +static const char __pyx_k_n[] = "n"; +static const char __pyx_k_x[] = "x"; +static const char __pyx_k_y[] = "y"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_ij[] = "ij"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_B_2[] = "B_"; +static const char __pyx_k_idx[] = "idx"; +static const char __pyx_k_int[] = "int"; +static const char __pyx_k_l_2[] = "l_"; +static const char __pyx_k_mst[] = "mst"; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_obj[] = "obj"; +static const char __pyx_k_row[] = "row"; +static const char __pyx_k_base[] = "base"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_dist[] = "dist"; +static const char __pyx_k_intc[] = "intc"; +static const char __pyx_k_kind[] = "kind"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mode[] = "mode"; +static const char __pyx_k_name[] = "name"; +static const char __pyx_k_ndim[] = "ndim"; +static const char __pyx_k_pack[] = "pack"; +static const char __pyx_k_size[] = "size"; +static const char __pyx_k_step[] = "step"; +static const char __pyx_k_stop[] = "stop"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_ASCII[] = "ASCII"; +static const char __pyx_k_class[] = "__class__"; +static const char __pyx_k_dists[] = "dists"; +static const char __pyx_k_dtype[] = "dtype"; +static const char __pyx_k_empty[] = "empty"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_flags[] = "flags"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_order[] = "order"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_shape[] = "shape"; +static const char __pyx_k_start[] = "start"; +static const char __pyx_k_zeros[] = "zeros"; +static const char __pyx_k_encode[] = "encode"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_merged[] = "merged"; +static const char __pyx_k_name_2[] = "__name__"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_struct[] = "struct"; +static const char __pyx_k_unpack[] = "unpack"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_argsort[] = "argsort"; +static const char __pyx_k_fortran[] = "fortran"; +static const char __pyx_k_memview[] = "memview"; +static const char __pyx_k_mst_pyx[] = "mst.pyx"; +static const char __pyx_k_reorder[] = "reorder"; +static const char __pyx_k_Ellipsis[] = "Ellipsis"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_itemsize[] = "itemsize"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_enumerate[] = "enumerate"; +static const char __pyx_k_mergesort[] = "mergesort"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_IndexError[] = "IndexError"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_ImportError[] = "ImportError"; +static const char __pyx_k_MemoryError[] = "MemoryError"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_current_max[] = "current_max"; +static const char __pyx_k_RuntimeError[] = "RuntimeError"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_View_MemoryView[] = "View.MemoryView"; +static const char __pyx_k_allocate_buffer[] = "allocate_buffer"; +static const char __pyx_k_dtype_is_object[] = "dtype_is_object"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_strided_and_direct[] = ""; +static const char __pyx_k_strided_and_indirect[] = ""; +static const char __pyx_k_contiguous_and_direct[] = ""; +static const char __pyx_k_MemoryView_of_r_object[] = ""; +static const char __pyx_k_MemoryView_of_r_at_0x_x[] = ""; +static const char __pyx_k_contiguous_and_indirect[] = ""; +static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'"; +static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d."; +static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array"; +static const char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous"; +static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data."; +static const char __pyx_k_strided_and_direct_or_indirect[] = ""; +static const char __pyx_k_MST_algorithm_Adapted_from_scip[] = " MST algorithm. Adapted from scipy.cluster._hierarchy.pyx "; +static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import"; +static const char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)"; +static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides"; +static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory."; +static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview"; +static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview"; +static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array"; +static const char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd"; +static const char __pyx_k_Incompatible_checksums_s_vs_0xb0[] = "Incompatible checksums (%s vs 0xb068931 = (name))"; +static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported"; +static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s"; +static const char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported"; +static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)"; +static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object"; +static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)"; +static const char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous"; +static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__"; +static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import"; +static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides."; +static const char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short."; +static PyObject *__pyx_n_s_A; +static PyObject *__pyx_n_s_ASCII; +static PyObject *__pyx_n_s_B; +static PyObject *__pyx_n_s_B_2; +static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri; +static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is; +static PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor; +static PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi; +static PyObject *__pyx_kp_s_Cannot_index_with_type_s; +static PyObject *__pyx_n_s_D; +static PyObject *__pyx_n_s_Ellipsis; +static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr; +static PyObject *__pyx_kp_u_Format_string_allocated_too_shor; +static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2; +static PyObject *__pyx_n_s_ImportError; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb0; +static PyObject *__pyx_n_s_IndexError; +static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte; +static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr; +static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d; +static PyObject *__pyx_n_s_MemoryError; +static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x; +static PyObject *__pyx_kp_s_MemoryView_of_r_object; +static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor; +static PyObject *__pyx_n_b_O; +static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a; +static PyObject *__pyx_n_s_PickleError; +static PyObject *__pyx_n_s_RuntimeError; +static PyObject *__pyx_n_s_TypeError; +static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_View_MemoryView; +static PyObject *__pyx_n_s_Z; +static PyObject *__pyx_n_s_allocate_buffer; +static PyObject *__pyx_n_s_argsort; +static PyObject *__pyx_n_s_base; +static PyObject *__pyx_n_s_c; +static PyObject *__pyx_n_u_c; +static PyObject *__pyx_n_s_class; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_kp_s_contiguous_and_direct; +static PyObject *__pyx_kp_s_contiguous_and_indirect; +static PyObject *__pyx_n_s_current_max; +static PyObject *__pyx_n_s_dict; +static PyObject *__pyx_n_s_dist; +static PyObject *__pyx_n_s_dists; +static PyObject *__pyx_n_s_dtype; +static PyObject *__pyx_n_s_dtype_is_object; +static PyObject *__pyx_n_s_empty; +static PyObject *__pyx_n_s_encode; +static PyObject *__pyx_n_s_enumerate; +static PyObject *__pyx_n_s_error; +static PyObject *__pyx_n_s_flags; +static PyObject *__pyx_n_s_format; +static PyObject *__pyx_n_s_fortran; +static PyObject *__pyx_n_u_fortran; +static PyObject *__pyx_n_s_getstate; +static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi; +static PyObject *__pyx_n_s_i; +static PyObject *__pyx_n_s_id; +static PyObject *__pyx_n_s_idx; +static PyObject *__pyx_n_s_ij; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_int; +static PyObject *__pyx_n_s_intc; +static PyObject *__pyx_n_s_itemsize; +static PyObject *__pyx_kp_s_itemsize_0_for_cython_array; +static PyObject *__pyx_n_s_j; +static PyObject *__pyx_n_s_k; +static PyObject *__pyx_n_s_kind; +static PyObject *__pyx_n_s_l; +static PyObject *__pyx_n_s_l_2; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_memview; +static PyObject *__pyx_n_s_merged; +static PyObject *__pyx_n_u_mergesort; +static PyObject *__pyx_n_s_mode; +static PyObject *__pyx_n_s_mst; +static PyObject *__pyx_kp_s_mst_pyx; +static PyObject *__pyx_n_s_n; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_name_2; +static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous; +static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou; +static PyObject *__pyx_n_s_ndim; +static PyObject *__pyx_n_s_new; +static PyObject *__pyx_kp_s_no_default___reduce___due_to_non; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_kp_u_numpy_core_multiarray_failed_to; +static PyObject *__pyx_kp_u_numpy_core_umath_failed_to_impor; +static PyObject *__pyx_n_s_obj; +static PyObject *__pyx_n_s_order; +static PyObject *__pyx_n_s_pack; +static PyObject *__pyx_n_s_pickle; +static PyObject *__pyx_n_s_pyx_PickleError; +static PyObject *__pyx_n_s_pyx_checksum; +static PyObject *__pyx_n_s_pyx_getbuffer; +static PyObject *__pyx_n_s_pyx_result; +static PyObject *__pyx_n_s_pyx_state; +static PyObject *__pyx_n_s_pyx_type; +static PyObject *__pyx_n_s_pyx_unpickle_Enum; +static PyObject *__pyx_n_s_pyx_vtable; +static PyObject *__pyx_n_s_range; +static PyObject *__pyx_n_s_reduce; +static PyObject *__pyx_n_s_reduce_cython; +static PyObject *__pyx_n_s_reduce_ex; +static PyObject *__pyx_n_s_reorder; +static PyObject *__pyx_n_s_row; +static PyObject *__pyx_n_s_setstate; +static PyObject *__pyx_n_s_setstate_cython; +static PyObject *__pyx_n_s_shape; +static PyObject *__pyx_n_s_size; +static PyObject *__pyx_n_s_start; +static PyObject *__pyx_n_s_step; +static PyObject *__pyx_n_s_stop; +static PyObject *__pyx_kp_s_strided_and_direct; +static PyObject *__pyx_kp_s_strided_and_direct_or_indirect; +static PyObject *__pyx_kp_s_strided_and_indirect; +static PyObject *__pyx_kp_s_stringsource; +static PyObject *__pyx_n_s_struct; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_kp_s_unable_to_allocate_array_data; +static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str; +static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd; +static PyObject *__pyx_n_s_unpack; +static PyObject *__pyx_n_s_update; +static PyObject *__pyx_n_s_x; +static PyObject *__pyx_n_s_y; +static PyObject *__pyx_n_s_zeros; +static PyObject *__pyx_pf_3mst_mst(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_dists, int __pyx_v_n); /* proto */ +static PyObject *__pyx_pf_3mst_2reorder(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_idx, int __pyx_v_n); /* proto */ +static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */ +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */ +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */ +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_2; +static PyObject *__pyx_int_184977713; +static PyObject *__pyx_int_neg_1; +static PyObject *__pyx_slice_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__4; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__8; +static PyObject *__pyx_tuple__9; +static PyObject *__pyx_slice__23; +static PyObject *__pyx_tuple__10; +static PyObject *__pyx_tuple__11; +static PyObject *__pyx_tuple__12; +static PyObject *__pyx_tuple__13; +static PyObject *__pyx_tuple__14; +static PyObject *__pyx_tuple__15; +static PyObject *__pyx_tuple__16; +static PyObject *__pyx_tuple__17; +static PyObject *__pyx_tuple__18; +static PyObject *__pyx_tuple__19; +static PyObject *__pyx_tuple__20; +static PyObject *__pyx_tuple__21; +static PyObject *__pyx_tuple__22; +static PyObject *__pyx_tuple__24; +static PyObject *__pyx_tuple__25; +static PyObject *__pyx_tuple__26; +static PyObject *__pyx_tuple__27; +static PyObject *__pyx_tuple__29; +static PyObject *__pyx_tuple__31; +static PyObject *__pyx_tuple__32; +static PyObject *__pyx_tuple__33; +static PyObject *__pyx_tuple__34; +static PyObject *__pyx_tuple__35; +static PyObject *__pyx_tuple__36; +static PyObject *__pyx_codeobj__28; +static PyObject *__pyx_codeobj__30; +static PyObject *__pyx_codeobj__37; +/* Late includes */ + +/* "mst.pyx":16 + * NPY_INFINITYF + * + * def mst(double[:,:] dists, int n): # <<<<<<<<<<<<<< + * """ MAXIMUM Spanning Tree of a dense adjacency matrix using Prim's Algorithm + * Parameters + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_3mst_1mst(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_3mst_mst[] = " MAXIMUM Spanning Tree of a dense adjacency matrix using Prim's Algorithm\n Parameters\n ----------\n dists : ndarray\n A condensed matrix stores the pairwise distances of the observations.\n n : int\n The number of observations.\n Returns\n -------\n Z : ndarray[int64], shape (n-1, 2)\n d : ndarray[float64], shape (n-1, 1)\n Edges in the MST in sorted order; indices, lengths\n "; +static PyMethodDef __pyx_mdef_3mst_1mst = {"mst", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3mst_1mst, METH_VARARGS|METH_KEYWORDS, __pyx_doc_3mst_mst}; +static PyObject *__pyx_pw_3mst_1mst(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + __Pyx_memviewslice __pyx_v_dists = { 0, 0, { 0 }, { 0 }, { 0 } }; + int __pyx_v_n; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("mst (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dists,&__pyx_n_s_n,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__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); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dists)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("mst", 1, 2, 2, 1); __PYX_ERR(0, 16, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mst") < 0)) __PYX_ERR(0, 16, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_dists = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dists.memview)) __PYX_ERR(0, 16, __pyx_L3_error) + __pyx_v_n = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 16, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("mst", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 16, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("mst.mst", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_3mst_mst(__pyx_self, __pyx_v_dists, __pyx_v_n); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_3mst_mst(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_dists, int __pyx_v_n) { + PyObject *__pyx_v_ij = NULL; + __Pyx_memviewslice __pyx_v_Z = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyObject *__pyx_v_l = NULL; + __Pyx_memviewslice __pyx_v_l_ = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_merged = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_D = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_j = { 0, 0, { 0 }, { 0 }, { 0 } }; + int __pyx_v_i; + int __pyx_v_k; + int __pyx_v_x; + int __pyx_v_y; + double __pyx_v_dist; + double __pyx_v_current_max; + PyObject *__pyx_v_order = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + __Pyx_memviewslice __pyx_t_6 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_t_7 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_t_8 = { 0, 0, { 0 }, { 0 }, { 0 } }; + long __pyx_t_9; + long __pyx_t_10; + int __pyx_t_11; + Py_ssize_t __pyx_t_12; + int __pyx_t_13; + int __pyx_t_14; + int __pyx_t_15; + int __pyx_t_16; + Py_ssize_t __pyx_t_17; + Py_ssize_t __pyx_t_18; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("mst", 0); + + /* "mst.pyx":31 + * """ + * + * ij = np.empty((n - 1, 2), dtype=np.int) # <<<<<<<<<<<<<< + * cdef long[:, :] Z = ij + * l = np.empty(n-1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_n - 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_INCREF(__pyx_int_2); + __Pyx_GIVEREF(__pyx_int_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_int); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 31, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_ij = __pyx_t_5; + __pyx_t_5 = 0; + + /* "mst.pyx":32 + * + * ij = np.empty((n - 1, 2), dtype=np.int) + * cdef long[:, :] Z = ij # <<<<<<<<<<<<<< + * l = np.empty(n-1) + * cdef double[:] l_ = l + */ + __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_long(__pyx_v_ij, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 32, __pyx_L1_error) + __pyx_v_Z = __pyx_t_6; + __pyx_t_6.memview = NULL; + __pyx_t_6.data = NULL; + + /* "mst.pyx":33 + * ij = np.empty((n - 1, 2), dtype=np.int) + * cdef long[:, :] Z = ij + * l = np.empty(n-1) # <<<<<<<<<<<<<< + * cdef double[:] l_ = l + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_n - 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_l = __pyx_t_5; + __pyx_t_5 = 0; + + /* "mst.pyx":34 + * cdef long[:, :] Z = ij + * l = np.empty(n-1) + * cdef double[:] l_ = l # <<<<<<<<<<<<<< + * + * # Which nodes were already merged. + */ + __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_l, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 34, __pyx_L1_error) + __pyx_v_l_ = __pyx_t_7; + __pyx_t_7.memview = NULL; + __pyx_t_7.data = NULL; + + /* "mst.pyx":37 + * + * # Which nodes were already merged. + * cdef int[:] merged = np.zeros(n, dtype=np.intc) # <<<<<<<<<<<<<< + * + * # Best distance of node i to current tree + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_intc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 37, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_merged = __pyx_t_8; + __pyx_t_8.memview = NULL; + __pyx_t_8.data = NULL; + + /* "mst.pyx":40 + * + * # Best distance of node i to current tree + * cdef double[:] D = np.empty(n) # <<<<<<<<<<<<<< + * D[:] = -NPY_INFINITYF + * cdef int[:] j = np.empty(n, dtype=np.intc) + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_D = __pyx_t_7; + __pyx_t_7.memview = NULL; + __pyx_t_7.data = NULL; + + /* "mst.pyx":41 + * # Best distance of node i to current tree + * cdef double[:] D = np.empty(n) + * D[:] = -NPY_INFINITYF # <<<<<<<<<<<<<< + * cdef int[:] j = np.empty(n, dtype=np.intc) + * + */ + { + double __pyx_temp_scalar = (-NPY_INFINITYF); + { + Py_ssize_t __pyx_temp_extent_0 = __pyx_v_D.shape[0]; + Py_ssize_t __pyx_temp_stride_0 = __pyx_v_D.strides[0]; + char *__pyx_temp_pointer_0; + Py_ssize_t __pyx_temp_idx_0; + __pyx_temp_pointer_0 = __pyx_v_D.data; + for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) { + *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar; + __pyx_temp_pointer_0 += __pyx_temp_stride_0; + } + } + } + + /* "mst.pyx":42 + * cdef double[:] D = np.empty(n) + * D[:] = -NPY_INFINITYF + * cdef int[:] j = np.empty(n, dtype=np.intc) # <<<<<<<<<<<<<< + * + * cdef int i, k + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_intc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_j = __pyx_t_8; + __pyx_t_8.memview = NULL; + __pyx_t_8.data = NULL; + + /* "mst.pyx":45 + * + * cdef int i, k + * cdef int x = 0 # The node just added to the tree # <<<<<<<<<<<<<< + * cdef int y # stores the next candidate node to add + * cdef double dist, current_max + */ + __pyx_v_x = 0; + + /* "mst.pyx":50 + * + * # x = 0 + * for k in range(n - 1): # <<<<<<<<<<<<<< + * merged[x] = 1 + * current_max = -NPY_INFINITYF + */ + __pyx_t_9 = (__pyx_v_n - 1); + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_k = __pyx_t_11; + + /* "mst.pyx":51 + * # x = 0 + * for k in range(n - 1): + * merged[x] = 1 # <<<<<<<<<<<<<< + * current_max = -NPY_INFINITYF + * for i in range(n): + */ + __pyx_t_12 = __pyx_v_x; + *((int *) ( /* dim=0 */ (__pyx_v_merged.data + __pyx_t_12 * __pyx_v_merged.strides[0]) )) = 1; + + /* "mst.pyx":52 + * for k in range(n - 1): + * merged[x] = 1 + * current_max = -NPY_INFINITYF # <<<<<<<<<<<<<< + * for i in range(n): + * if merged[i] == 1: + */ + __pyx_v_current_max = (-NPY_INFINITYF); + + /* "mst.pyx":53 + * merged[x] = 1 + * current_max = -NPY_INFINITYF + * for i in range(n): # <<<<<<<<<<<<<< + * if merged[i] == 1: + * continue + */ + __pyx_t_13 = __pyx_v_n; + __pyx_t_14 = __pyx_t_13; + for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { + __pyx_v_i = __pyx_t_15; + + /* "mst.pyx":54 + * current_max = -NPY_INFINITYF + * for i in range(n): + * if merged[i] == 1: # <<<<<<<<<<<<<< + * continue + * + */ + __pyx_t_12 = __pyx_v_i; + __pyx_t_16 = (((*((int *) ( /* dim=0 */ (__pyx_v_merged.data + __pyx_t_12 * __pyx_v_merged.strides[0]) ))) == 1) != 0); + if (__pyx_t_16) { + + /* "mst.pyx":55 + * for i in range(n): + * if merged[i] == 1: + * continue # <<<<<<<<<<<<<< + * + * dist = dists[x,i] + */ + goto __pyx_L5_continue; + + /* "mst.pyx":54 + * current_max = -NPY_INFINITYF + * for i in range(n): + * if merged[i] == 1: # <<<<<<<<<<<<<< + * continue + * + */ + } + + /* "mst.pyx":57 + * continue + * + * dist = dists[x,i] # <<<<<<<<<<<<<< + * if D[i] < dist: + * D[i] = dist + */ + __pyx_t_12 = __pyx_v_x; + __pyx_t_17 = __pyx_v_i; + __pyx_v_dist = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_dists.data + __pyx_t_12 * __pyx_v_dists.strides[0]) ) + __pyx_t_17 * __pyx_v_dists.strides[1]) ))); + + /* "mst.pyx":58 + * + * dist = dists[x,i] + * if D[i] < dist: # <<<<<<<<<<<<<< + * D[i] = dist + * j[i] = x + */ + __pyx_t_17 = __pyx_v_i; + __pyx_t_16 = (((*((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_17 * __pyx_v_D.strides[0]) ))) < __pyx_v_dist) != 0); + if (__pyx_t_16) { + + /* "mst.pyx":59 + * dist = dists[x,i] + * if D[i] < dist: + * D[i] = dist # <<<<<<<<<<<<<< + * j[i] = x + * + */ + __pyx_t_17 = __pyx_v_i; + *((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_17 * __pyx_v_D.strides[0]) )) = __pyx_v_dist; + + /* "mst.pyx":60 + * if D[i] < dist: + * D[i] = dist + * j[i] = x # <<<<<<<<<<<<<< + * + * if current_max < D[i]: + */ + __pyx_t_17 = __pyx_v_i; + *((int *) ( /* dim=0 */ (__pyx_v_j.data + __pyx_t_17 * __pyx_v_j.strides[0]) )) = __pyx_v_x; + + /* "mst.pyx":58 + * + * dist = dists[x,i] + * if D[i] < dist: # <<<<<<<<<<<<<< + * D[i] = dist + * j[i] = x + */ + } + + /* "mst.pyx":62 + * j[i] = x + * + * if current_max < D[i]: # <<<<<<<<<<<<<< + * current_max = D[i] + * y = i + */ + __pyx_t_17 = __pyx_v_i; + __pyx_t_16 = ((__pyx_v_current_max < (*((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_17 * __pyx_v_D.strides[0]) )))) != 0); + if (__pyx_t_16) { + + /* "mst.pyx":63 + * + * if current_max < D[i]: + * current_max = D[i] # <<<<<<<<<<<<<< + * y = i + * # print(x, i, current_max) + */ + __pyx_t_17 = __pyx_v_i; + __pyx_v_current_max = (*((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_17 * __pyx_v_D.strides[0]) ))); + + /* "mst.pyx":64 + * if current_max < D[i]: + * current_max = D[i] + * y = i # <<<<<<<<<<<<<< + * # print(x, i, current_max) + * + */ + __pyx_v_y = __pyx_v_i; + + /* "mst.pyx":62 + * j[i] = x + * + * if current_max < D[i]: # <<<<<<<<<<<<<< + * current_max = D[i] + * y = i + */ + } + __pyx_L5_continue:; + } + + /* "mst.pyx":68 + * + * # for linkage, this works if you assign it x instead, but the proof is subtle + * Z[k, 0] = j[y] # <<<<<<<<<<<<<< + * # Z[k, 0] = x + * Z[k, 1] = y + */ + __pyx_t_17 = __pyx_v_y; + __pyx_t_12 = __pyx_v_k; + __pyx_t_18 = 0; + *((long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_Z.data + __pyx_t_12 * __pyx_v_Z.strides[0]) ) + __pyx_t_18 * __pyx_v_Z.strides[1]) )) = (*((int *) ( /* dim=0 */ (__pyx_v_j.data + __pyx_t_17 * __pyx_v_j.strides[0]) ))); + + /* "mst.pyx":70 + * Z[k, 0] = j[y] + * # Z[k, 0] = x + * Z[k, 1] = y # <<<<<<<<<<<<<< + * # Z[k, 2] = current_min + * l_[k] = current_max + */ + __pyx_t_17 = __pyx_v_k; + __pyx_t_18 = 1; + *((long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_Z.data + __pyx_t_17 * __pyx_v_Z.strides[0]) ) + __pyx_t_18 * __pyx_v_Z.strides[1]) )) = __pyx_v_y; + + /* "mst.pyx":72 + * Z[k, 1] = y + * # Z[k, 2] = current_min + * l_[k] = current_max # <<<<<<<<<<<<<< + * x = y + * + */ + __pyx_t_18 = __pyx_v_k; + *((double *) ( /* dim=0 */ (__pyx_v_l_.data + __pyx_t_18 * __pyx_v_l_.strides[0]) )) = __pyx_v_current_max; + + /* "mst.pyx":73 + * # Z[k, 2] = current_min + * l_[k] = current_max + * x = y # <<<<<<<<<<<<<< + * + * # Sort Z by distances + */ + __pyx_v_x = __pyx_v_y; + } + + /* "mst.pyx":76 + * + * # Sort Z by distances + * order = np.argsort(l, kind='mergesort')[::-1] # <<<<<<<<<<<<<< + * ij = ij[order] + * l = l[order] + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_argsort); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_l); + __Pyx_GIVEREF(__pyx_v_l); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_l); + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_kind, __pyx_n_u_mergesort) < 0) __PYX_ERR(0, 76, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_slice_); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_order = __pyx_t_5; + __pyx_t_5 = 0; + + /* "mst.pyx":77 + * # Sort Z by distances + * order = np.argsort(l, kind='mergesort')[::-1] + * ij = ij[order] # <<<<<<<<<<<<<< + * l = l[order] + * + */ + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_ij, __pyx_v_order); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF_SET(__pyx_v_ij, __pyx_t_5); + __pyx_t_5 = 0; + + /* "mst.pyx":78 + * order = np.argsort(l, kind='mergesort')[::-1] + * ij = ij[order] + * l = l[order] # <<<<<<<<<<<<<< + * + * # # Find correct cluster labels and compute cluster sizes inplace. + */ + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_l, __pyx_v_order); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF_SET(__pyx_v_l, __pyx_t_5); + __pyx_t_5 = 0; + + /* "mst.pyx":83 + * # label(ij, n) + * + * return ij, l # <<<<<<<<<<<<<< + * + * def reorder(double[:,:] A, long[:] idx, int n): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 83, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_ij); + __Pyx_GIVEREF(__pyx_v_ij); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_ij); + __Pyx_INCREF(__pyx_v_l); + __Pyx_GIVEREF(__pyx_v_l); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_l); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "mst.pyx":16 + * NPY_INFINITYF + * + * def mst(double[:,:] dists, int n): # <<<<<<<<<<<<<< + * """ MAXIMUM Spanning Tree of a dense adjacency matrix using Prim's Algorithm + * Parameters + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); + __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1); + __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1); + __Pyx_AddTraceback("mst.mst", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_ij); + __PYX_XDEC_MEMVIEW(&__pyx_v_Z, 1); + __Pyx_XDECREF(__pyx_v_l); + __PYX_XDEC_MEMVIEW(&__pyx_v_l_, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_merged, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_D, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_j, 1); + __Pyx_XDECREF(__pyx_v_order); + __PYX_XDEC_MEMVIEW(&__pyx_v_dists, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "mst.pyx":85 + * return ij, l + * + * def reorder(double[:,:] A, long[:] idx, int n): # <<<<<<<<<<<<<< + * """ + * A : (n, n) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_3mst_3reorder(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_3mst_2reorder[] = "\n A : (n, n)\n idx: (n)\n "; +static PyMethodDef __pyx_mdef_3mst_3reorder = {"reorder", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3mst_3reorder, METH_VARARGS|METH_KEYWORDS, __pyx_doc_3mst_2reorder}; +static PyObject *__pyx_pw_3mst_3reorder(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_idx = { 0, 0, { 0 }, { 0 }, { 0 } }; + int __pyx_v_n; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("reorder (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_idx,&__pyx_n_s_n,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("reorder", 1, 3, 3, 1); __PYX_ERR(0, 85, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("reorder", 1, 3, 3, 2); __PYX_ERR(0, 85, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reorder") < 0)) __PYX_ERR(0, 85, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 85, __pyx_L3_error) + __pyx_v_idx = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx.memview)) __PYX_ERR(0, 85, __pyx_L3_error) + __pyx_v_n = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 85, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("reorder", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 85, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("mst.reorder", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_3mst_2reorder(__pyx_self, __pyx_v_A, __pyx_v_idx, __pyx_v_n); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_3mst_2reorder(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_idx, int __pyx_v_n) { + PyObject *__pyx_v_B = NULL; + __Pyx_memviewslice __pyx_v_B_ = { 0, 0, { 0 }, { 0 }, { 0 } }; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_v_k; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + __Pyx_memviewslice __pyx_t_6 = { 0, 0, { 0 }, { 0 }, { 0 } }; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + Py_ssize_t __pyx_t_10; + int __pyx_t_11; + int __pyx_t_12; + int __pyx_t_13; + Py_ssize_t __pyx_t_14; + Py_ssize_t __pyx_t_15; + Py_ssize_t __pyx_t_16; + Py_ssize_t __pyx_t_17; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("reorder", 0); + + /* "mst.pyx":90 + * idx: (n) + * """ + * B = np.empty((n, n)) # <<<<<<<<<<<<<< + * cdef double[:,:] B_ = B + * cdef int i, j, k + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); + __pyx_t_2 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_B = __pyx_t_1; + __pyx_t_1 = 0; + + /* "mst.pyx":91 + * """ + * B = np.empty((n, n)) + * cdef double[:,:] B_ = B # <<<<<<<<<<<<<< + * cdef int i, j, k + * cdef double[:] row + */ + __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_B, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 91, __pyx_L1_error) + __pyx_v_B_ = __pyx_t_6; + __pyx_t_6.memview = NULL; + __pyx_t_6.data = NULL; + + /* "mst.pyx":94 + * cdef int i, j, k + * cdef double[:] row + * for i in range(n): # <<<<<<<<<<<<<< + * k = idx[i] + * # row = A[k] + */ + __pyx_t_7 = __pyx_v_n; + __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; + + /* "mst.pyx":95 + * cdef double[:] row + * for i in range(n): + * k = idx[i] # <<<<<<<<<<<<<< + * # row = A[k] + * for j in range(n): + */ + __pyx_t_10 = __pyx_v_i; + __pyx_v_k = (*((long *) ( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_10 * __pyx_v_idx.strides[0]) ))); + + /* "mst.pyx":97 + * k = idx[i] + * # row = A[k] + * for j in range(n): # <<<<<<<<<<<<<< + * B_[i, j] = A[k,idx[j]] + * # B_[i, j] = row[idx[j]] + */ + __pyx_t_11 = __pyx_v_n; + __pyx_t_12 = __pyx_t_11; + for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) { + __pyx_v_j = __pyx_t_13; + + /* "mst.pyx":98 + * # row = A[k] + * for j in range(n): + * B_[i, j] = A[k,idx[j]] # <<<<<<<<<<<<<< + * # B_[i, j] = row[idx[j]] + * return B + */ + __pyx_t_10 = __pyx_v_j; + __pyx_t_14 = __pyx_v_k; + __pyx_t_15 = (*((long *) ( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_10 * __pyx_v_idx.strides[0]) ))); + __pyx_t_16 = __pyx_v_i; + __pyx_t_17 = __pyx_v_j; + *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B_.data + __pyx_t_16 * __pyx_v_B_.strides[0]) ) + __pyx_t_17 * __pyx_v_B_.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_14 * __pyx_v_A.strides[0]) ) + __pyx_t_15 * __pyx_v_A.strides[1]) ))); + } + } + + /* "mst.pyx":100 + * B_[i, j] = A[k,idx[j]] + * # B_[i, j] = row[idx[j]] + * return B # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_B); + __pyx_r = __pyx_v_B; + goto __pyx_L0; + + /* "mst.pyx":85 + * return ij, l + * + * def reorder(double[:,:] A, long[:] idx, int n): # <<<<<<<<<<<<<< + * """ + * A : (n, n) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); + __Pyx_AddTraceback("mst.reorder", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_B); + __PYX_XDEC_MEMVIEW(&__pyx_v_B_, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_idx, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":258 + * # experimental exception made for __getbuffer__ and __releasebuffer__ + * # -- the details of this may change. + * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< + * # This implementation of getbuffer is geared towards Cython + * # requirements, and does not yet fulfill the PEP. + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_v_i; + int __pyx_v_ndim; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + int __pyx_v_t; + char *__pyx_v_f; + PyArray_Descr *__pyx_v_descr = 0; + int __pyx_v_offset; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + PyArray_Descr *__pyx_t_7; + PyObject *__pyx_t_8 = NULL; + char *__pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":265 + * + * cdef int i, ndim + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * + */ + __pyx_v_endian_detector = 1; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":266 + * cdef int i, ndim + * cdef int endian_detector = 1 + * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * + * ndim = PyArray_NDIM(self) + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":268 + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * + * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + */ + __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":270 + * ndim = PyArray_NDIM(self) + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + __pyx_t_2 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":271 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not C contiguous") + * + */ + __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_ARRAY_C_CONTIGUOUS) != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":270 + * ndim = PyArray_NDIM(self) + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + if (unlikely(__pyx_t_1)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":272 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 272, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":270 + * ndim = PyArray_NDIM(self) + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":274 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + __pyx_t_2 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L7_bool_binop_done; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":275 + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not Fortran contiguous") + * + */ + __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_ARRAY_F_CONTIGUOUS) != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L7_bool_binop_done:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":274 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + if (unlikely(__pyx_t_1)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":276 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 276, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":274 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":278 + * raise ValueError(u"ndarray is not Fortran contiguous") + * + * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< + * info.ndim = ndim + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":279 + * + * info.buf = PyArray_DATA(self) + * info.ndim = ndim # <<<<<<<<<<<<<< + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * # Allocate new buffer for strides and shape info. + */ + __pyx_v_info->ndim = __pyx_v_ndim; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":280 + * info.buf = PyArray_DATA(self) + * info.ndim = ndim + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + */ + __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":283 + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + * info.strides = PyObject_Malloc(sizeof(Py_ssize_t) * 2 * ndim) # <<<<<<<<<<<<<< + * info.shape = info.strides + ndim + * for i in range(ndim): + */ + __pyx_v_info->strides = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * 2) * ((size_t)__pyx_v_ndim)))); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":284 + * # This is allocated as one block, strides first. + * info.strides = PyObject_Malloc(sizeof(Py_ssize_t) * 2 * ndim) + * info.shape = info.strides + ndim # <<<<<<<<<<<<<< + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + */ + __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":285 + * info.strides = PyObject_Malloc(sizeof(Py_ssize_t) * 2 * ndim) + * info.shape = info.strides + ndim + * for i in range(ndim): # <<<<<<<<<<<<<< + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] + */ + __pyx_t_4 = __pyx_v_ndim; + __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; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":286 + * info.shape = info.strides + ndim + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + */ + (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":287 + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< + * else: + * info.strides = PyArray_STRIDES(self) + */ + (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":280 + * info.buf = PyArray_DATA(self) + * info.ndim = ndim + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + */ + goto __pyx_L9; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":289 + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL + */ + /*else*/ { + __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":290 + * else: + * info.strides = PyArray_STRIDES(self) + * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + */ + __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); + } + __pyx_L9:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":291 + * info.strides = PyArray_STRIDES(self) + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) + */ + __pyx_v_info->suboffsets = NULL; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":292 + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< + * info.readonly = not PyArray_ISWRITEABLE(self) + * + */ + __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":293 + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< + * + * cdef int t + */ + __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":296 + * + * cdef int t + * cdef char* f = NULL # <<<<<<<<<<<<<< + * cdef dtype descr = PyArray_DESCR(self) + * cdef int offset + */ + __pyx_v_f = NULL; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":297 + * cdef int t + * cdef char* f = NULL + * cdef dtype descr = PyArray_DESCR(self) # <<<<<<<<<<<<<< + * cdef int offset + * + */ + __pyx_t_7 = PyArray_DESCR(__pyx_v_self); + __pyx_t_3 = ((PyObject *)__pyx_t_7); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":300 + * cdef int offset + * + * info.obj = self # <<<<<<<<<<<<<< + * + * if not PyDataType_HASFIELDS(descr): + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":302 + * info.obj = self + * + * if not PyDataType_HASFIELDS(descr): # <<<<<<<<<<<<<< + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + */ + __pyx_t_1 = ((!(PyDataType_HASFIELDS(__pyx_v_descr) != 0)) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":303 + * + * if not PyDataType_HASFIELDS(descr): + * t = descr.type_num # <<<<<<<<<<<<<< + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + */ + __pyx_t_4 = __pyx_v_descr->type_num; + __pyx_v_t = __pyx_t_4; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":304 + * if not PyDataType_HASFIELDS(descr): + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_2 = ((__pyx_v_descr->byteorder == '>') != 0); + if (!__pyx_t_2) { + goto __pyx_L15_next_or; + } else { + } + __pyx_t_2 = (__pyx_v_little_endian != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L14_bool_binop_done; + } + __pyx_L15_next_or:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":305 + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + */ + __pyx_t_2 = ((__pyx_v_descr->byteorder == '<') != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_2 = ((!(__pyx_v_little_endian != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L14_bool_binop_done:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":304 + * if not PyDataType_HASFIELDS(descr): + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + if (unlikely(__pyx_t_1)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":306 + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 306, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 306, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":304 + * if not PyDataType_HASFIELDS(descr): + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":307 + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + */ + switch (__pyx_v_t) { + case NPY_BYTE: + __pyx_v_f = ((char *)"b"); + break; + case NPY_UBYTE: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":308 + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + */ + __pyx_v_f = ((char *)"B"); + break; + case NPY_SHORT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":309 + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + */ + __pyx_v_f = ((char *)"h"); + break; + case NPY_USHORT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":310 + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + */ + __pyx_v_f = ((char *)"H"); + break; + case NPY_INT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":311 + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + */ + __pyx_v_f = ((char *)"i"); + break; + case NPY_UINT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":312 + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + */ + __pyx_v_f = ((char *)"I"); + break; + case NPY_LONG: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":313 + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + */ + __pyx_v_f = ((char *)"l"); + break; + case NPY_ULONG: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":314 + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + */ + __pyx_v_f = ((char *)"L"); + break; + case NPY_LONGLONG: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":315 + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + */ + __pyx_v_f = ((char *)"q"); + break; + case NPY_ULONGLONG: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":316 + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + */ + __pyx_v_f = ((char *)"Q"); + break; + case NPY_FLOAT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":317 + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + */ + __pyx_v_f = ((char *)"f"); + break; + case NPY_DOUBLE: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":318 + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + */ + __pyx_v_f = ((char *)"d"); + break; + case NPY_LONGDOUBLE: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":319 + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + */ + __pyx_v_f = ((char *)"g"); + break; + case NPY_CFLOAT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":320 + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + */ + __pyx_v_f = ((char *)"Zf"); + break; + case NPY_CDOUBLE: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":321 + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" + */ + __pyx_v_f = ((char *)"Zd"); + break; + case NPY_CLONGDOUBLE: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":322 + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f = "O" + * else: + */ + __pyx_v_f = ((char *)"Zg"); + break; + case NPY_OBJECT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":323 + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + __pyx_v_f = ((char *)"O"); + break; + default: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":325 + * elif t == NPY_OBJECT: f = "O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * info.format = f + * return + */ + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 325, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 325, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 325, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 325, __pyx_L1_error) + break; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":326 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f # <<<<<<<<<<<<<< + * return + * else: + */ + __pyx_v_info->format = __pyx_v_f; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":327 + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f + * return # <<<<<<<<<<<<<< + * else: + * info.format = PyObject_Malloc(_buffer_format_string_len) + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":302 + * info.obj = self + * + * if not PyDataType_HASFIELDS(descr): # <<<<<<<<<<<<<< + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":329 + * return + * else: + * info.format = PyObject_Malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 + */ + /*else*/ { + __pyx_v_info->format = ((char *)PyObject_Malloc(0xFF)); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":330 + * else: + * info.format = PyObject_Malloc(_buffer_format_string_len) + * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< + * offset = 0 + * f = _util_dtypestring(descr, info.format + 1, + */ + (__pyx_v_info->format[0]) = '^'; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":331 + * info.format = PyObject_Malloc(_buffer_format_string_len) + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 # <<<<<<<<<<<<<< + * f = _util_dtypestring(descr, info.format + 1, + * info.format + _buffer_format_string_len, + */ + __pyx_v_offset = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":332 + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 + * f = _util_dtypestring(descr, info.format + 1, # <<<<<<<<<<<<<< + * info.format + _buffer_format_string_len, + * &offset) + */ + __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 0xFF), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == ((char *)NULL))) __PYX_ERR(1, 332, __pyx_L1_error) + __pyx_v_f = __pyx_t_9; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":335 + * info.format + _buffer_format_string_len, + * &offset) + * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + */ + (__pyx_v_f[0]) = '\x00'; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":258 + * # experimental exception made for __getbuffer__ and __releasebuffer__ + * # -- the details of this may change. + * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< + * # This implementation of getbuffer is geared towards Cython + * # requirements, and does not yet fulfill the PEP. + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_descr); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":337 + * f[0] = c'\0' # Terminate format string + * + * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< + * if PyArray_HASFIELDS(self): + * PyObject_Free(info.format) + */ + +/* Python wrapper */ +static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ +static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); + __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__releasebuffer__", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":338 + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< + * PyObject_Free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":339 + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): + * PyObject_Free(info.format) # <<<<<<<<<<<<<< + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * PyObject_Free(info.strides) + */ + PyObject_Free(__pyx_v_info->format); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":338 + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< + * PyObject_Free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":340 + * if PyArray_HASFIELDS(self): + * PyObject_Free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * PyObject_Free(info.strides) + * # info.shape was stored after info.strides in the same block + */ + __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":341 + * PyObject_Free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * PyObject_Free(info.strides) # <<<<<<<<<<<<<< + * # info.shape was stored after info.strides in the same block + * + */ + PyObject_Free(__pyx_v_info->strides); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":340 + * if PyArray_HASFIELDS(self): + * PyObject_Free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * PyObject_Free(info.strides) + * # info.shape was stored after info.strides in the same block + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":337 + * f[0] = c'\0' # Terminate format string + * + * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< + * if PyArray_HASFIELDS(self): + * PyObject_Free(info.format) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":820 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":821 + * + * 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, 821, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":820 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":823 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":824 + * + * 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, 824, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":823 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":826 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":827 + * + * 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, 827, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":826 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":829 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":830 + * + * 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, 830, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":829 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":832 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":833 + * + * 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, 833, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":832 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":835 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":836 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":837 + * 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; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":836 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":839 + * return d.subarray.shape + * else: + * return () # <<<<<<<<<<<<<< + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_empty_tuple); + __pyx_r = __pyx_empty_tuple; + goto __pyx_L0; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":835 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":841 + * return () + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< + * # Recursive utility function used in __getbuffer__ to get format + * # string. The new location in the format string is returned. + */ + +static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { + PyArray_Descr *__pyx_v_child = 0; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + PyObject *__pyx_v_fields = 0; + PyObject *__pyx_v_childname = NULL; + PyObject *__pyx_v_new_offset = NULL; + PyObject *__pyx_v_t = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; + long __pyx_t_8; + char *__pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_util_dtypestring", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":846 + * + * cdef dtype child + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * cdef tuple fields + */ + __pyx_v_endian_detector = 1; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":847 + * cdef dtype child + * cdef int endian_detector = 1 + * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * cdef tuple fields + * + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":850 + * cdef tuple fields + * + * for childname in descr.names: # <<<<<<<<<<<<<< + * fields = descr.fields[childname] + * child, new_offset = fields + */ + if (unlikely(__pyx_v_descr->names == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(1, 850, __pyx_L1_error) + } + __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; + for (;;) { + if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(1, 850, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); + __pyx_t_3 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":851 + * + * for childname in descr.names: + * fields = descr.fields[childname] # <<<<<<<<<<<<<< + * child, new_offset = fields + * + */ + if (unlikely(__pyx_v_descr->fields == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 851, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 851, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(1, 851, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":852 + * for childname in descr.names: + * fields = descr.fields[childname] + * child, new_offset = fields # <<<<<<<<<<<<<< + * + * if (end - f) - (new_offset - offset[0]) < 15: + */ + if (likely(__pyx_v_fields != Py_None)) { + PyObject* sequence = __pyx_v_fields; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 852, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 852, __pyx_L1_error) + } + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(1, 852, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); + __pyx_t_4 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":854 + * child, new_offset = fields + * + * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + */ + __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 854, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 854, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 854, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0); + if (unlikely(__pyx_t_6)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":855 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == c'>' and little_endian) or + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 855, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":854 + * child, new_offset = fields + * + * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":857 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); + if (!__pyx_t_7) { + goto __pyx_L8_next_or; + } else { + } + __pyx_t_7 = (__pyx_v_little_endian != 0); + if (!__pyx_t_7) { + } else { + __pyx_t_6 = __pyx_t_7; + goto __pyx_L7_bool_binop_done; + } + __pyx_L8_next_or:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":858 + * + * if ((child.byteorder == c'>' and little_endian) or + * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * # One could encode it in the format string and have Cython + */ + __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); + if (__pyx_t_7) { + } else { + __pyx_t_6 = __pyx_t_7; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_7 = ((!(__pyx_v_little_endian != 0)) != 0); + __pyx_t_6 = __pyx_t_7; + __pyx_L7_bool_binop_done:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":857 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + if (unlikely(__pyx_t_6)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":859 + * if ((child.byteorder == c'>' and little_endian) or + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * # One could encode it in the format string and have Cython + * # complain instead, BUT: < and > in format strings also imply + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 859, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":857 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":869 + * + * # Output padding bytes + * while offset[0] < new_offset: # <<<<<<<<<<<<<< + * f[0] = 120 # "x"; pad byte + * f += 1 + */ + while (1) { + __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 869, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 869, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 869, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_6) break; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":870 + * # Output padding bytes + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< + * f += 1 + * offset[0] += 1 + */ + (__pyx_v_f[0]) = 0x78; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":871 + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte + * f += 1 # <<<<<<<<<<<<<< + * offset[0] += 1 + * + */ + __pyx_v_f = (__pyx_v_f + 1); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":872 + * f[0] = 120 # "x"; pad byte + * f += 1 + * offset[0] += 1 # <<<<<<<<<<<<<< + * + * offset[0] += child.itemsize + */ + __pyx_t_8 = 0; + (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + 1); + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":874 + * offset[0] += 1 + * + * offset[0] += child.itemsize # <<<<<<<<<<<<<< + * + * if not PyDataType_HASFIELDS(child): + */ + __pyx_t_8 = 0; + (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + __pyx_v_child->elsize); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":876 + * offset[0] += child.itemsize + * + * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< + * t = child.type_num + * if end - f < 5: + */ + __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); + if (__pyx_t_6) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":877 + * + * if not PyDataType_HASFIELDS(child): + * t = child.type_num # <<<<<<<<<<<<<< + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") + */ + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 877, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4); + __pyx_t_4 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":878 + * if not PyDataType_HASFIELDS(child): + * t = child.type_num + * if end - f < 5: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short.") + * + */ + __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); + if (unlikely(__pyx_t_6)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":879 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 879, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(1, 879, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":878 + * if not PyDataType_HASFIELDS(child): + * t = child.type_num + * if end - f < 5: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short.") + * + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":882 + * + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_BYTE); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 882, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 882, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 882, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 98; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":883 + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UBYTE); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 883, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 883, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 883, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 66; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":884 + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_SHORT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 884, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 884, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 884, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x68; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":885 + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_USHORT); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 885, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 885, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 885, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 72; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":886 + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_INT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 886, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 886, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x69; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":887 + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UINT); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 887, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 887, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 887, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 73; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":888 + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONG); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 888, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 888, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 888, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x6C; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":889 + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONG); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 889, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 889, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 889, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 76; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":890 + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGLONG); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 890, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 890, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 890, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x71; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":891 + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONGLONG); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 891, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 891, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 891, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 81; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":892 + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_FLOAT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 892, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 892, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 892, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x66; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":893 + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_DOUBLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 893, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 893, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 893, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x64; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":894 + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 894, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 894, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 894, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x67; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":895 + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CFLOAT); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 895, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 895, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 895, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 0x66; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":896 + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CDOUBLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 896, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 896, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 896, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 0x64; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":897 + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 897, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 897, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 897, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 0x67; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":898 + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_OBJECT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 898, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 898, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 898, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (likely(__pyx_t_6)) { + (__pyx_v_f[0]) = 79; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":900 + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * f += 1 + * else: + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 900, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 900, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(1, 900, __pyx_L1_error) + } + __pyx_L15:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":901 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * f += 1 # <<<<<<<<<<<<<< + * else: + * # Cython ignores struct boundary information ("T{...}"), + */ + __pyx_v_f = (__pyx_v_f + 1); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":876 + * offset[0] += child.itemsize + * + * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< + * t = child.type_num + * if end - f < 5: + */ + goto __pyx_L13; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":905 + * # Cython ignores struct boundary information ("T{...}"), + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< + * return f + * + */ + /*else*/ { + __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_9 == ((char *)NULL))) __PYX_ERR(1, 905, __pyx_L1_error) + __pyx_v_f = __pyx_t_9; + } + __pyx_L13:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":850 + * cdef tuple fields + * + * for childname in descr.names: # <<<<<<<<<<<<<< + * fields = descr.fields[childname] + * child, new_offset = fields + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":906 + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) + * return f # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_f; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":841 + * return () + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< + * # Recursive utility function used in __getbuffer__ to get format + * # string. The new location in the format string is returned. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_child); + __Pyx_XDECREF(__pyx_v_fields); + __Pyx_XDECREF(__pyx_v_childname); + __Pyx_XDECREF(__pyx_v_new_offset); + __Pyx_XDECREF(__pyx_v_t); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1021 + * 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) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_array_base", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1022 + * + * 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); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1023 + * 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)); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1021 + * 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 */ + __Pyx_RefNannyFinishContext(); +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1025 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1026 + * + * 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); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1027 + * 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) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1028 + * 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; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1027 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1029 + * 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; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1025 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1033 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * _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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1034 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * _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:*/ { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1035 + * cdef inline int import_array() except -1: + * try: + * _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, 1035, __pyx_L3_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1034 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * _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:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1036 + * try: + * _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, 1036, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1037 + * _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__7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1037, __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, 1037, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1034 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * _import_array() + * except Exception: + */ + __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:; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1033 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * _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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1039 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1040 + * + * 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:*/ { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1041 + * 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, 1041, __pyx_L3_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1040 + * + * 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:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1042 + * 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, 1042, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1043 + * _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__8, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1043, __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, 1043, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1040 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __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:; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1039 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1045 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1046 + * + * 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:*/ { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1047 + * 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, 1047, __pyx_L3_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1046 + * + * 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:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1048 + * 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, 1048, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1049 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1049, __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, 1049, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1046 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __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:; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1045 + * 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; +} + +/* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + +/* Python wrapper */ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_shape = 0; + Py_ssize_t __pyx_v_itemsize; + PyObject *__pyx_v_format = 0; + PyObject *__pyx_v_mode = 0; + int __pyx_v_allocate_buffer; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[3] = ((PyObject *)__pyx_n_s_c); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(2, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(2, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(2, 122, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__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); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_shape = ((PyObject*)values[0]); + __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 122, __pyx_L3_error) + __pyx_v_format = values[2]; + __pyx_v_mode = values[3]; + if (values[4]) { + __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 123, __pyx_L3_error) + } else { + + /* "View.MemoryView":123 + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, + * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< + * + * cdef int idx + */ + __pyx_v_allocate_buffer = ((int)1); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 122, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(2, 122, __pyx_L1_error) + if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { + PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(2, 122, __pyx_L1_error) + } + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) { + int __pyx_v_idx; + Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_dim; + PyObject **__pyx_v_p; + char __pyx_v_order; + int __pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + char *__pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + Py_ssize_t __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + __Pyx_INCREF(__pyx_v_format); + + /* "View.MemoryView":129 + * cdef PyObject **p + * + * self.ndim = len(shape) # <<<<<<<<<<<<<< + * self.itemsize = itemsize + * + */ + if (unlikely(__pyx_v_shape == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(2, 129, __pyx_L1_error) + } + __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 129, __pyx_L1_error) + __pyx_v_self->ndim = ((int)__pyx_t_1); + + /* "View.MemoryView":130 + * + * self.ndim = len(shape) + * self.itemsize = itemsize # <<<<<<<<<<<<<< + * + * if not self.ndim: + */ + __pyx_v_self->itemsize = __pyx_v_itemsize; + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 133, __pyx_L1_error) + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + } + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 136, __pyx_L1_error) + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + } + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + __pyx_t_2 = PyBytes_Check(__pyx_v_format); + __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":139 + * + * if not isinstance(format, bytes): + * format = format.encode('ASCII') # <<<<<<<<<<<<<< + * self._format = format # keep a reference to the byte string + * self.format = self._format + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + } + } + __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + } + + /* "View.MemoryView":140 + * if not isinstance(format, bytes): + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< + * self.format = self._format + * + */ + if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(2, 140, __pyx_L1_error) + __pyx_t_3 = __pyx_v_format; + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v_self->_format); + __Pyx_DECREF(__pyx_v_self->_format); + __pyx_v_self->_format = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":141 + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + * self.format = self._format # <<<<<<<<<<<<<< + * + * + */ + if (unlikely(__pyx_v_self->_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); + __PYX_ERR(2, 141, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(2, 141, __pyx_L1_error) + __pyx_v_self->format = __pyx_t_7; + + /* "View.MemoryView":144 + * + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< + * self._strides = self._shape + self.ndim + * + */ + __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); + + /* "View.MemoryView":145 + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) + * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< + * + * if not self._shape: + */ + __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 148, __pyx_L1_error) + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + } + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + __pyx_t_8 = 0; + __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; + for (;;) { + if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(2, 151, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 151, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_9; + __pyx_v_idx = __pyx_t_8; + __pyx_t_8 = (__pyx_t_8 + 1); + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + __pyx_t_4 = ((__pyx_v_dim <= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":153 + * for idx, dim in enumerate(shape): + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<< + * self._shape[idx] = dim + * + */ + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6); + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(2, 153, __pyx_L1_error) + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + } + + /* "View.MemoryView":154 + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim # <<<<<<<<<<<<<< + * + * cdef char order + */ + (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(2, 157, __pyx_L1_error) + if (__pyx_t_4) { + + /* "View.MemoryView":158 + * cdef char order + * if mode == 'fortran': + * order = b'F' # <<<<<<<<<<<<<< + * self.mode = u'fortran' + * elif mode == 'c': + */ + __pyx_v_order = 'F'; + + /* "View.MemoryView":159 + * if mode == 'fortran': + * order = b'F' + * self.mode = u'fortran' # <<<<<<<<<<<<<< + * elif mode == 'c': + * order = b'C' + */ + __Pyx_INCREF(__pyx_n_u_fortran); + __Pyx_GIVEREF(__pyx_n_u_fortran); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_fortran; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(2, 160, __pyx_L1_error) + if (likely(__pyx_t_4)) { + + /* "View.MemoryView":161 + * self.mode = u'fortran' + * elif mode == 'c': + * order = b'C' # <<<<<<<<<<<<<< + * self.mode = u'c' + * else: + */ + __pyx_v_order = 'C'; + + /* "View.MemoryView":162 + * elif mode == 'c': + * order = b'C' + * self.mode = u'c' # <<<<<<<<<<<<<< + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + */ + __Pyx_INCREF(__pyx_n_u_c); + __Pyx_GIVEREF(__pyx_n_u_c); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_c; + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":164 + * self.mode = u'c' + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<< + * + * self.len = fill_contig_strides_array(self._shape, self._strides, + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(2, 164, __pyx_L1_error) + } + __pyx_L10:; + + /* "View.MemoryView":166 + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + * + * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<< + * itemsize, self.ndim, order) + * + */ + __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); + + /* "View.MemoryView":169 + * itemsize, self.ndim, order) + * + * self.free_data = allocate_buffer # <<<<<<<<<<<<<< + * self.dtype_is_object = format == b'O' + * if allocate_buffer: + */ + __pyx_v_self->free_data = __pyx_v_allocate_buffer; + + /* "View.MemoryView":170 + * + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< + * if allocate_buffer: + * + */ + __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 170, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 170, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_v_self->dtype_is_object = __pyx_t_4; + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_4 = (__pyx_v_allocate_buffer != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":174 + * + * + * self.data = malloc(self.len) # <<<<<<<<<<<<<< + * if not self.data: + * raise MemoryError("unable to allocate array data.") + */ + __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(2, 176, __pyx_L1_error) + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":179 + * + * if self.dtype_is_object: + * p = self.data # <<<<<<<<<<<<<< + * for i in range(self.len / itemsize): + * p[i] = Py_None + */ + __pyx_v_p = ((PyObject **)__pyx_v_self->data); + + /* "View.MemoryView":180 + * if self.dtype_is_object: + * p = self.data + * for i in range(self.len / itemsize): # <<<<<<<<<<<<<< + * p[i] = Py_None + * Py_INCREF(Py_None) + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(2, 180, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(2, 180, __pyx_L1_error) + } + __pyx_t_1 = (__pyx_v_self->len / __pyx_v_itemsize); + __pyx_t_9 = __pyx_t_1; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "View.MemoryView":181 + * p = self.data + * for i in range(self.len / itemsize): + * p[i] = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + (__pyx_v_p[__pyx_v_i]) = Py_None; + + /* "View.MemoryView":182 + * for i in range(self.len / itemsize): + * p[i] = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + Py_INCREF(Py_None); + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + } + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_format); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_v_bufmode; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + char *__pyx_t_4; + Py_ssize_t __pyx_t_5; + int __pyx_t_6; + Py_ssize_t *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":186 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 # <<<<<<<<<<<<<< + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = -1; + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 187, __pyx_L1_error) + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":188 + * cdef int bufmode = -1 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + goto __pyx_L3; + } + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 189, __pyx_L1_error) + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":190 + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + */ + __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + } + __pyx_L3:; + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 192, __pyx_L1_error) + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + } + + /* "View.MemoryView":193 + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data # <<<<<<<<<<<<<< + * info.len = self.len + * info.ndim = self.ndim + */ + __pyx_t_4 = __pyx_v_self->data; + __pyx_v_info->buf = __pyx_t_4; + + /* "View.MemoryView":194 + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + * info.len = self.len # <<<<<<<<<<<<<< + * info.ndim = self.ndim + * info.shape = self._shape + */ + __pyx_t_5 = __pyx_v_self->len; + __pyx_v_info->len = __pyx_t_5; + + /* "View.MemoryView":195 + * info.buf = self.data + * info.len = self.len + * info.ndim = self.ndim # <<<<<<<<<<<<<< + * info.shape = self._shape + * info.strides = self._strides + */ + __pyx_t_6 = __pyx_v_self->ndim; + __pyx_v_info->ndim = __pyx_t_6; + + /* "View.MemoryView":196 + * info.len = self.len + * info.ndim = self.ndim + * info.shape = self._shape # <<<<<<<<<<<<<< + * info.strides = self._strides + * info.suboffsets = NULL + */ + __pyx_t_7 = __pyx_v_self->_shape; + __pyx_v_info->shape = __pyx_t_7; + + /* "View.MemoryView":197 + * info.ndim = self.ndim + * info.shape = self._shape + * info.strides = self._strides # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = self.itemsize + */ + __pyx_t_7 = __pyx_v_self->_strides; + __pyx_v_info->strides = __pyx_t_7; + + /* "View.MemoryView":198 + * info.shape = self._shape + * info.strides = self._strides + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = self.itemsize + * info.readonly = 0 + */ + __pyx_v_info->suboffsets = NULL; + + /* "View.MemoryView":199 + * info.strides = self._strides + * info.suboffsets = NULL + * info.itemsize = self.itemsize # <<<<<<<<<<<<<< + * info.readonly = 0 + * + */ + __pyx_t_5 = __pyx_v_self->itemsize; + __pyx_v_info->itemsize = __pyx_t_5; + + /* "View.MemoryView":200 + * info.suboffsets = NULL + * info.itemsize = self.itemsize + * info.readonly = 0 # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + __pyx_v_info->readonly = 0; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":203 + * + * if flags & PyBUF_FORMAT: + * info.format = self.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_4 = __pyx_v_self->format; + __pyx_v_info->format = __pyx_t_4; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":205 + * info.format = self.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.obj = self + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L5:; + + /* "View.MemoryView":207 + * info.format = NULL + * + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + +/* Python wrapper */ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":213 + * def __dealloc__(array self): + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) # <<<<<<<<<<<<<< + * elif self.free_data: + * if self.dtype_is_object: + */ + __pyx_v_self->callback_free_data(__pyx_v_self->data); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + __pyx_t_1 = (__pyx_v_self->free_data != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":216 + * elif self.free_data: + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<< + * self._strides, self.ndim, False) + * free(self.data) + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + } + + /* "View.MemoryView":218 + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + * free(self.data) # <<<<<<<<<<<<<< + * PyObject_Free(self._shape) + * + */ + free(__pyx_v_self->data); + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + } + __pyx_L3:; + + /* "View.MemoryView":219 + * self._strides, self.ndim, False) + * free(self.data) + * PyObject_Free(self._shape) # <<<<<<<<<<<<<< + * + * @property + */ + PyObject_Free(__pyx_v_self->_shape); + + /* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) { + 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("__get__", 0); + + /* "View.MemoryView":223 + * @property + * def memview(self): + * return self.get_memview() # <<<<<<<<<<<<<< + * + * @cname('get_memview') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_memview", 0); + + /* "View.MemoryView":227 + * @cname('get_memview') + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< + * return memoryview(self, flags, self.dtype_is_object) + * + */ + __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); + + /* "View.MemoryView":228 + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":231 + * + * def __len__(self): + * return self._shape[0] # <<<<<<<<<<<<<< + * + * def __getattr__(self, attr): + */ + __pyx_r = (__pyx_v_self->_shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getattr__", 0); + + /* "View.MemoryView":234 + * + * def __getattr__(self, attr): + * return getattr(self.memview, attr) # <<<<<<<<<<<<<< + * + * def __getitem__(self, item): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":237 + * + * def __getitem__(self, item): + * return self.memview[item] # <<<<<<<<<<<<<< + * + * def __setitem__(self, item, value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + +/* Python wrapper */ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + + /* "View.MemoryView":240 + * + * def __setitem__(self, item, value): + * self.memview[item] = value # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(2, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self) { + 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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(2, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + 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("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(2, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + +static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) { + struct __pyx_array_obj *__pyx_v_result = 0; + struct __pyx_array_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("array_cwrapper", 0); + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":249 + * + * if buf == NULL: + * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<< + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + /*else*/ { + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":252 + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) # <<<<<<<<<<<<<< + * result.data = buf + * + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(2, 252, __pyx_L1_error) + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "View.MemoryView":253 + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) + * result.data = buf # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->data = __pyx_v_buf; + } + __pyx_L3:; + + /* "View.MemoryView":255 + * result.data = buf + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + + /* 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); + __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + +/* Python wrapper */ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_name = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; + PyObject* values[1] = {0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(2, 281, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + } + __pyx_v_name = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 281, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 0); + + /* "View.MemoryView":282 + * cdef object name + * def __init__(self, name): + * self.name = name # <<<<<<<<<<<<<< + * def __repr__(self): + * return self.name + */ + __Pyx_INCREF(__pyx_v_name); + __Pyx_GIVEREF(__pyx_v_name); + __Pyx_GOTREF(__pyx_v_self->name); + __Pyx_DECREF(__pyx_v_self->name); + __pyx_v_self->name = __pyx_v_name; + + /* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + +/* Python wrapper */ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":284 + * self.name = name + * def __repr__(self): + * return self.name # <<<<<<<<<<<<<< + * + * cdef generic = Enum("") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->name); + __pyx_r = __pyx_v_self->name; + goto __pyx_L0; + + /* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.name,) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self->name); + __Pyx_GIVEREF(__pyx_v_self->name); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_2 = (__pyx_v__dict != Py_None); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.name is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } + + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self.name is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_self->name != Py_None); + __pyx_v_use_setstate = __pyx_t_3; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + __pyx_t_3 = (__pyx_v_use_setstate != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":13 + * use_setstate = self.name is not None + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_5 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + 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("__setstate_cython__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_unpickle_Enum__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + +static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) { + Py_intptr_t __pyx_v_aligned_p; + size_t __pyx_v_offset; + void *__pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":300 + * cdef void *align_pointer(void *memory, size_t alignment) nogil: + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<< + * cdef size_t offset + * + */ + __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory); + + /* "View.MemoryView":304 + * + * with cython.cdivision(True): + * offset = aligned_p % alignment # <<<<<<<<<<<<<< + * + * if offset > 0: + */ + __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + __pyx_t_1 = ((__pyx_v_offset > 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":307 + * + * if offset > 0: + * aligned_p += alignment - offset # <<<<<<<<<<<<<< + * + * return aligned_p + */ + __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset)); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + } + + /* "View.MemoryView":309 + * aligned_p += alignment - offset + * + * return aligned_p # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((void *)__pyx_v_aligned_p); + goto __pyx_L0; + + /* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + +/* Python wrapper */ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_obj = 0; + int __pyx_v_flags; + int __pyx_v_dtype_is_object; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(2, 345, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(2, 345, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj = values[0]; + __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 345, __pyx_L3_error) + if (values[2]) { + __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 345, __pyx_L3_error) + } else { + __pyx_v_dtype_is_object = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 345, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + + /* "View.MemoryView":346 + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj # <<<<<<<<<<<<<< + * self.flags = flags + * if type(self) is memoryview or obj is not None: + */ + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + __Pyx_GOTREF(__pyx_v_self->obj); + __Pyx_DECREF(__pyx_v_self->obj); + __pyx_v_self->obj = __pyx_v_obj; + + /* "View.MemoryView":347 + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj + * self.flags = flags # <<<<<<<<<<<<<< + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + */ + __pyx_v_self->flags = __pyx_v_flags; + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); + __pyx_t_3 = (__pyx_t_2 != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_obj != Py_None); + __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "View.MemoryView":349 + * self.flags = flags + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + */ + __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 349, __pyx_L1_error) + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":351 + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; + + /* "View.MemoryView":352 + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * global __pyx_memoryview_thread_locks_used + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + } + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + } + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":356 + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + */ + __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + + /* "View.MemoryView":357 + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":359 + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< + * if self.lock is NULL: + * raise MemoryError + */ + __pyx_v_self->lock = PyThread_allocate_lock(); + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":361 + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + PyErr_NoMemory(); __PYX_ERR(2, 361, __pyx_L1_error) + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + } + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":364 + * + * if flags & PyBUF_FORMAT: + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< + * else: + * self.dtype_is_object = dtype_is_object + */ + __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_self->dtype_is_object = __pyx_t_1; + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + goto __pyx_L10; + } + + /* "View.MemoryView":366 + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + */ + /*else*/ { + __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; + } + __pyx_L10:; + + /* "View.MemoryView":368 + * self.dtype_is_object = dtype_is_object + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<< + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL + */ + __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int)))); + + /* "View.MemoryView":370 + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL # <<<<<<<<<<<<<< + * + * def __dealloc__(memoryview self): + */ + __pyx_v_self->typeinfo = NULL; + + /* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + +/* Python wrapper */ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { + int __pyx_v_i; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyThread_type_lock __pyx_t_6; + PyThread_type_lock __pyx_t_7; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + __pyx_t_1 = (__pyx_v_self->obj != Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":374 + * def __dealloc__(memoryview self): + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + */ + __Pyx_ReleaseBuffer((&__pyx_v_self->view)); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + __pyx_t_2 = ((((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":377 + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<< + * Py_DECREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL; + + /* "View.MemoryView":378 + * + * (<__pyx_buffer *> &self.view).obj = NULL + * Py_DECREF(Py_None) # <<<<<<<<<<<<<< + * + * cdef int i + */ + Py_DECREF(Py_None); + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + } + __pyx_L3:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":383 + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + */ + __pyx_t_3 = __pyx_memoryview_thread_locks_used; + __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; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":385 + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":388 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< + * break + * else: + */ + __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]); + + /* "View.MemoryView":387 + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break + */ + (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6; + (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7; + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + } + + /* "View.MemoryView":389 + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break # <<<<<<<<<<<<<< + * else: + * PyThread_free_lock(self.lock) + */ + goto __pyx_L6_break; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + } + } + /*else*/ { + + /* "View.MemoryView":391 + * break + * else: + * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + */ + PyThread_free_lock(__pyx_v_self->lock); + } + __pyx_L6_break:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + } + + /* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + Py_ssize_t __pyx_v_dim; + char *__pyx_v_itemp; + PyObject *__pyx_v_idx = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *(*__pyx_t_4)(PyObject *); + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + char *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_item_pointer", 0); + + /* "View.MemoryView":395 + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< + * + * for dim, idx in enumerate(index): + */ + __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { + __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; + __pyx_t_4 = NULL; + } else { + __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 397, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_4)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } + } else { + __pyx_t_5 = __pyx_t_4(__pyx_t_2); + if (unlikely(!__pyx_t_5)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(2, 397, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_1; + __pyx_t_1 = (__pyx_t_1 + 1); + + /* "View.MemoryView":398 + * + * for dim, idx in enumerate(index): + * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< + * + * return itemp + */ + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 398, __pyx_L1_error) + __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(2, 398, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_7; + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":400 + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + * return itemp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_itemp; + goto __pyx_L0; + + /* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_indices = NULL; + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + char *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":405 + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: + * return self # <<<<<<<<<<<<<< + * + * have_slices, indices = _unellipsify(index, self.view.ndim) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __pyx_r = ((PyObject *)__pyx_v_self); + goto __pyx_L0; + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + } + + /* "View.MemoryView":407 + * return self + * + * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * cdef char *itemp + */ + __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (likely(__pyx_t_3 != Py_None)) { + PyObject* sequence = __pyx_t_3; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(2, 407, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 407, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v_indices = __pyx_t_5; + __pyx_t_5 = 0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 410, __pyx_L1_error) + if (__pyx_t_2) { + + /* "View.MemoryView":411 + * cdef char *itemp + * if have_slices: + * return memview_slice(self, indices) # <<<<<<<<<<<<<< + * else: + * itemp = self.get_item_pointer(indices) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + } + + /* "View.MemoryView":413 + * return memview_slice(self, indices) + * else: + * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< + * return self.convert_item_to_object(itemp) + * + */ + /*else*/ { + __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(2, 413, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_6; + + /* "View.MemoryView":414 + * else: + * itemp = self.get_item_pointer(indices) + * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< + * + * def __setitem__(memoryview self, object index, object value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + +/* Python wrapper */ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_obj = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + __Pyx_INCREF(__pyx_v_index); + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + __pyx_t_1 = (__pyx_v_self->view.readonly != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(2, 418, __pyx_L1_error) + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + } + + /* "View.MemoryView":420 + * raise TypeError("Cannot assign to read-only memoryview") + * + * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * if have_slices: + */ + __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (likely(__pyx_t_2 != Py_None)) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(2, 420, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 420, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_3; + __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 422, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":423 + * + * if have_slices: + * obj = self.is_slice(value) # <<<<<<<<<<<<<< + * if obj: + * self.setitem_slice_assignment(self[index], obj) + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_obj = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 424, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":425 + * obj = self.is_slice(value) + * if obj: + * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< + * else: + * self.setitem_slice_assign_scalar(self[index], value) + */ + __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":427 + * self.setitem_slice_assignment(self[index], obj) + * else: + * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< + * else: + * self.setitem_indexed(index, value) + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(2, 427, __pyx_L1_error) + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L5:; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":429 + * self.setitem_slice_assign_scalar(self[index], value) + * else: + * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< + * + * cdef is_slice(self, obj): + */ + /*else*/ { + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L4:; + + /* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_slice", 0); + __Pyx_INCREF(__pyx_v_obj); + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":435 + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) # <<<<<<<<<<<<<< + * except TypeError: + * return None + */ + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 435, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "View.MemoryView":436 + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + * except TypeError: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); + if (__pyx_t_9) { + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(2, 436, __pyx_L6_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":437 + * self.dtype_is_object) + * except TypeError: + * return None # <<<<<<<<<<<<<< + * + * return obj + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_except_return; + } + goto __pyx_L6_except_error; + __pyx_L6_except_error:; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L0; + __pyx_L9_try_end:; + } + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + } + + /* "View.MemoryView":439 + * return None + * + * return obj # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assignment(self, dst, src): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_obj); + __pyx_r = __pyx_v_obj; + goto __pyx_L0; + + /* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { + __Pyx_memviewslice __pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_src_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + __Pyx_memviewslice *__pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(2, 445, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 445, __pyx_L1_error) + + /* "View.MemoryView":446 + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<< + * src.ndim, dst.ndim, self.dtype_is_object) + * + */ + if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(2, 446, __pyx_L1_error) + __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 446, __pyx_L1_error) + + /* "View.MemoryView":447 + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 445, __pyx_L1_error) + + /* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { + int __pyx_v_array[0x80]; + void *__pyx_v_tmp; + void *__pyx_v_item; + __Pyx_memviewslice *__pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_tmp_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + char const *__pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); + + /* "View.MemoryView":451 + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + * cdef int array[128] + * cdef void *tmp = NULL # <<<<<<<<<<<<<< + * cdef void *item + * + */ + __pyx_v_tmp = NULL; + + /* "View.MemoryView":456 + * cdef __Pyx_memviewslice *dst_slice + * cdef __Pyx_memviewslice tmp_slice + * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< + * + * if self.view.itemsize > sizeof(array): + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 456, __pyx_L1_error) + __pyx_v_dst_slice = __pyx_t_1; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":459 + * + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< + * if tmp == NULL: + * raise MemoryError + */ + __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":461 + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * item = tmp + * else: + */ + PyErr_NoMemory(); __PYX_ERR(2, 461, __pyx_L1_error) + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + } + + /* "View.MemoryView":462 + * if tmp == NULL: + * raise MemoryError + * item = tmp # <<<<<<<<<<<<<< + * else: + * item = array + */ + __pyx_v_item = __pyx_v_tmp; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":464 + * item = tmp + * else: + * item = array # <<<<<<<<<<<<<< + * + * try: + */ + /*else*/ { + __pyx_v_item = ((void *)__pyx_v_array); + } + __pyx_L3:; + + /* "View.MemoryView":466 + * item = array + * + * try: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * ( item)[0] = value + */ + /*try:*/ { + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":468 + * try: + * if self.dtype_is_object: + * ( item)[0] = value # <<<<<<<<<<<<<< + * else: + * self.assign_item_from_object( item, value) + */ + (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":470 + * ( item)[0] = value + * else: + * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 470, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L8:; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":475 + * + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + * item, self.dtype_is_object) + */ + __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 475, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + } + + /* "View.MemoryView":476 + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< + * item, self.dtype_is_object) + * finally: + */ + __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); + } + + /* "View.MemoryView":479 + * item, self.dtype_is_object) + * finally: + * PyMem_Free(tmp) # <<<<<<<<<<<<<< + * + * cdef setitem_indexed(self, index, value): + */ + /*finally:*/ { + /*normal exit:*/{ + PyMem_Free(__pyx_v_tmp); + goto __pyx_L7; + } + __pyx_L6_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename; + { + PyMem_Free(__pyx_v_tmp); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + } + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; + goto __pyx_L1_error; + } + __pyx_L7:; + } + + /* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_indexed", 0); + + /* "View.MemoryView":482 + * + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< + * self.assign_item_from_object(itemp, value) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(2, 482, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_1; + + /* "View.MemoryView":483 + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_v_struct = NULL; + PyObject *__pyx_v_bytesitem = 0; + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + size_t __pyx_t_10; + int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":488 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef bytes bytesitem + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":491 + * cdef bytes bytesitem + * + * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< + * try: + * result = struct.unpack(self.view.format, bytesitem) + */ + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "View.MemoryView":493 + * bytesitem = itemp[:self.view.itemsize] + * try: + * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< + * except struct.error: + * raise ValueError("Unable to convert item to object") + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + { + __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_7) { + __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; + } + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6); + __Pyx_INCREF(__pyx_v_bytesitem); + __Pyx_GIVEREF(__pyx_v_bytesitem); + PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem); + __pyx_t_6 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + } + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + /*else:*/ { + __pyx_t_10 = strlen(__pyx_v_self->view.format); + __pyx_t_11 = ((__pyx_t_10 == 1) != 0); + if (__pyx_t_11) { + + /* "View.MemoryView":498 + * else: + * if len(self.view.format) == 1: + * return result[0] # <<<<<<<<<<<<<< + * return result + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 498, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6_except_return; + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + } + + /* "View.MemoryView":499 + * if len(self.view.format) == 1: + * return result[0] + * return result # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "View.MemoryView":494 + * try: + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: # <<<<<<<<<<<<<< + * raise ValueError("Unable to convert item to object") + * else: + */ + __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9); + __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; + if (__pyx_t_8) { + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(2, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_1); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 495, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(2, 495, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesitem); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_v_struct = NULL; + char __pyx_v_c; + PyObject *__pyx_v_bytesvalue = 0; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + char *__pyx_t_11; + char *__pyx_t_12; + char *__pyx_t_13; + char *__pyx_t_14; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":504 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef char c + * cdef bytes bytesvalue + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + __pyx_t_2 = PyTuple_Check(__pyx_v_value); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "View.MemoryView":510 + * + * if isinstance(value, tuple): + * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< + * else: + * bytesvalue = struct.pack(self.view.format, value) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(2, 510, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":512 + * bytesvalue = struct.pack(self.view.format, *value) + * else: + * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< + * + * for i, c in enumerate(bytesvalue): + */ + /*else*/ { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + { + __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (__pyx_t_5) { + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; + } + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); + __Pyx_INCREF(__pyx_v_value); + __Pyx_GIVEREF(__pyx_v_value); + PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value); + __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(2, 512, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = 0; + if (unlikely(__pyx_v_bytesvalue == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); + __PYX_ERR(2, 514, __pyx_L1_error) + } + __Pyx_INCREF(__pyx_v_bytesvalue); + __pyx_t_10 = __pyx_v_bytesvalue; + __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10); + __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10)); + for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) { + __pyx_t_11 = __pyx_t_14; + __pyx_v_c = (__pyx_t_11[0]); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + __pyx_v_i = __pyx_t_9; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = (__pyx_t_9 + 1); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; + } + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + char *__pyx_t_5; + void *__pyx_t_6; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->view.readonly != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 520, __pyx_L1_error) + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + } + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":523 + * + * if flags & PyBUF_ND: + * info.shape = self.view.shape # <<<<<<<<<<<<<< + * else: + * info.shape = NULL + */ + __pyx_t_4 = __pyx_v_self->view.shape; + __pyx_v_info->shape = __pyx_t_4; + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":525 + * info.shape = self.view.shape + * else: + * info.shape = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_STRIDES: + */ + /*else*/ { + __pyx_v_info->shape = NULL; + } + __pyx_L6:; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":528 + * + * if flags & PyBUF_STRIDES: + * info.strides = self.view.strides # <<<<<<<<<<<<<< + * else: + * info.strides = NULL + */ + __pyx_t_4 = __pyx_v_self->view.strides; + __pyx_v_info->strides = __pyx_t_4; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + goto __pyx_L7; + } + + /* "View.MemoryView":530 + * info.strides = self.view.strides + * else: + * info.strides = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_INDIRECT: + */ + /*else*/ { + __pyx_v_info->strides = NULL; + } + __pyx_L7:; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":533 + * + * if flags & PyBUF_INDIRECT: + * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< + * else: + * info.suboffsets = NULL + */ + __pyx_t_4 = __pyx_v_self->view.suboffsets; + __pyx_v_info->suboffsets = __pyx_t_4; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":535 + * info.suboffsets = self.view.suboffsets + * else: + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + /*else*/ { + __pyx_v_info->suboffsets = NULL; + } + __pyx_L8:; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":538 + * + * if flags & PyBUF_FORMAT: + * info.format = self.view.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_5 = __pyx_v_self->view.format; + __pyx_v_info->format = __pyx_t_5; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":540 + * info.format = self.view.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.buf = self.view.buf + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L9:; + + /* "View.MemoryView":542 + * info.format = NULL + * + * info.buf = self.view.buf # <<<<<<<<<<<<<< + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + */ + __pyx_t_6 = __pyx_v_self->view.buf; + __pyx_v_info->buf = __pyx_t_6; + + /* "View.MemoryView":543 + * + * info.buf = self.view.buf + * info.ndim = self.view.ndim # <<<<<<<<<<<<<< + * info.itemsize = self.view.itemsize + * info.len = self.view.len + */ + __pyx_t_7 = __pyx_v_self->view.ndim; + __pyx_v_info->ndim = __pyx_t_7; + + /* "View.MemoryView":544 + * info.buf = self.view.buf + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< + * info.len = self.view.len + * info.readonly = self.view.readonly + */ + __pyx_t_8 = __pyx_v_self->view.itemsize; + __pyx_v_info->itemsize = __pyx_t_8; + + /* "View.MemoryView":545 + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + * info.len = self.view.len # <<<<<<<<<<<<<< + * info.readonly = self.view.readonly + * info.obj = self + */ + __pyx_t_8 = __pyx_v_self->view.len; + __pyx_v_info->len = __pyx_t_8; + + /* "View.MemoryView":546 + * info.itemsize = self.view.itemsize + * info.len = self.view.len + * info.readonly = self.view.readonly # <<<<<<<<<<<<<< + * info.obj = self + * + */ + __pyx_t_1 = __pyx_v_self->view.readonly; + __pyx_v_info->readonly = __pyx_t_1; + + /* "View.MemoryView":547 + * info.len = self.view.len + * info.readonly = self.view.readonly + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":554 + * @property + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< + * transpose_memslice(&result.from_slice) + * return result + */ + __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(2, 554, __pyx_L1_error) + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":555 + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(2, 555, __pyx_L1_error) + + /* "View.MemoryView":556 + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + * return result # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":560 + * @property + * def base(self): + * return self.obj # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->obj); + __pyx_r = __pyx_v_self->obj; + goto __pyx_L0; + + /* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_length; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":564 + * @property + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_length = (__pyx_t_2[0]); + __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(2, 564, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_stride; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(2, 570, __pyx_L1_error) + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + } + + /* "View.MemoryView":572 + * raise ValueError("Buffer view does not expose strides") + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_v_stride = (__pyx_t_3[0]); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(2, 572, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + Py_ssize_t *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__20, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + } + + /* "View.MemoryView":579 + * return (-1,) * self.view.ndim + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); + for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) { + __pyx_t_4 = __pyx_t_6; + __pyx_v_suboffset = (__pyx_t_4[0]); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(2, 579, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + 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("__get__", 0); + + /* "View.MemoryView":583 + * @property + * def ndim(self): + * return self.view.ndim # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 583, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + 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("__get__", 0); + + /* "View.MemoryView":587 + * @property + * def itemsize(self): + * return self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 587, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":591 + * @property + * def nbytes(self): + * return self.size * self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + __pyx_t_1 = (__pyx_v_self->_size == Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":596 + * def size(self): + * if self._size is None: + * result = 1 # <<<<<<<<<<<<<< + * + * for length in self.view.shape[:self.view.ndim]: + */ + __Pyx_INCREF(__pyx_int_1); + __pyx_v_result = __pyx_int_1; + + /* "View.MemoryView":598 + * result = 1 + * + * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< + * result *= length + * + */ + __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 598, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6); + __pyx_t_6 = 0; + + /* "View.MemoryView":599 + * + * for length in self.view.shape[:self.view.ndim]: + * result *= length # <<<<<<<<<<<<<< + * + * self._size = result + */ + __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6); + __pyx_t_6 = 0; + } + + /* "View.MemoryView":601 + * result *= length + * + * self._size = result # <<<<<<<<<<<<<< + * + * return self._size + */ + __Pyx_INCREF(__pyx_v_result); + __Pyx_GIVEREF(__pyx_v_result); + __Pyx_GOTREF(__pyx_v_self->_size); + __Pyx_DECREF(__pyx_v_self->_size); + __pyx_v_self->_size = __pyx_v_result; + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + } + + /* "View.MemoryView":603 + * self._size = result + * + * return self._size # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->_size); + __pyx_r = __pyx_v_self->_size; + goto __pyx_L0; + + /* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":607 + * def __len__(self): + * if self.view.ndim >= 1: + * return self.view.shape[0] # <<<<<<<<<<<<<< + * + * return 0 + */ + __pyx_r = (__pyx_v_self->view.shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + } + + /* "View.MemoryView":609 + * return self.view.shape[0] + * + * return 0 # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":613 + * def __repr__(self): + * return "" % (self.base.__class__.__name__, + * id(self)) # <<<<<<<<<<<<<< + * + * def __str__(self): + */ + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 613, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__str__", 0); + + /* "View.MemoryView":616 + * + * def __str__(self): + * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_c_contig", 0); + + /* "View.MemoryView":622 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 622, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":623 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< + * + * def is_f_contig(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_f_contig", 0); + + /* "View.MemoryView":628 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(2, 628, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":629 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< + * + * def copy(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_mslice; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy", 0); + + /* "View.MemoryView":633 + * def copy(self): + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &mslice) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); + + /* "View.MemoryView":635 + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + * + * slice_copy(self, &mslice) # <<<<<<<<<<<<<< + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); + + /* "View.MemoryView":636 + * + * slice_copy(self, &mslice) + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_C_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 636, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":641 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< + * + * def copy_fortran(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy_fortran", 0); + + /* "View.MemoryView":645 + * def copy_fortran(self): + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &src) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); + + /* "View.MemoryView":647 + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + * + * slice_copy(self, &src) # <<<<<<<<<<<<<< + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); + + /* "View.MemoryView":648 + * + * slice_copy(self, &src) + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_F_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 648, __pyx_L1_error) + __pyx_v_dst = __pyx_t_1; + + /* "View.MemoryView":653 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 653, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self) { + 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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(2, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + 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("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(2, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + +static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { + struct __pyx_memoryview_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); + + /* "View.MemoryView":658 + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< + * result.typeinfo = typeinfo + * return result + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_o); + __Pyx_GIVEREF(__pyx_v_o); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":659 + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_v_result->typeinfo = __pyx_v_typeinfo; + + /* "View.MemoryView":660 + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_check') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("memoryview_check", 0); + + /* "View.MemoryView":664 + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): + * return isinstance(o, memoryview) # <<<<<<<<<<<<<< + * + * cdef tuple _unellipsify(object index, int ndim): + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); + __pyx_r = __pyx_t_1; + goto __pyx_L0; + + /* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + +static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { + PyObject *__pyx_v_tup = NULL; + PyObject *__pyx_v_result = NULL; + int __pyx_v_have_slices; + int __pyx_v_seen_ellipsis; + CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; + PyObject *__pyx_v_item = NULL; + Py_ssize_t __pyx_v_nslices; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_5; + PyObject *(*__pyx_t_6)(PyObject *); + PyObject *__pyx_t_7 = NULL; + Py_ssize_t __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_unellipsify", 0); + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + __pyx_t_1 = PyTuple_Check(__pyx_v_index); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":672 + * """ + * if not isinstance(index, tuple): + * tup = (index,) # <<<<<<<<<<<<<< + * else: + * tup = index + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_index); + __Pyx_GIVEREF(__pyx_v_index); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); + __pyx_v_tup = __pyx_t_3; + __pyx_t_3 = 0; + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":674 + * tup = (index,) + * else: + * tup = index # <<<<<<<<<<<<<< + * + * result = [] + */ + /*else*/ { + __Pyx_INCREF(__pyx_v_index); + __pyx_v_tup = __pyx_v_index; + } + __pyx_L3:; + + /* "View.MemoryView":676 + * tup = index + * + * result = [] # <<<<<<<<<<<<<< + * have_slices = False + * seen_ellipsis = False + */ + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 676, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_result = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":677 + * + * result = [] + * have_slices = False # <<<<<<<<<<<<<< + * seen_ellipsis = False + * for idx, item in enumerate(tup): + */ + __pyx_v_have_slices = 0; + + /* "View.MemoryView":678 + * result = [] + * have_slices = False + * seen_ellipsis = False # <<<<<<<<<<<<<< + * for idx, item in enumerate(tup): + * if item is Ellipsis: + */ + __pyx_v_seen_ellipsis = 0; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + __Pyx_INCREF(__pyx_int_0); + __pyx_t_3 = __pyx_int_0; + if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) { + __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 679, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_4))) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } else { + if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } + } else { + __pyx_t_7 = __pyx_t_6(__pyx_t_4); + if (unlikely(!__pyx_t_7)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(2, 679, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_7); + } + __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_INCREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3); + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_7; + __pyx_t_7 = 0; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 682, __pyx_L1_error) + __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__23); + __Pyx_GIVEREF(__pyx_slice__23); + PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__23); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 682, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":683 + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True # <<<<<<<<<<<<<< + * else: + * result.append(slice(None)) + */ + __pyx_v_seen_ellipsis = 1; + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + goto __pyx_L7; + } + + /* "View.MemoryView":685 + * seen_ellipsis = True + * else: + * result.append(slice(None)) # <<<<<<<<<<<<<< + * have_slices = True + * else: + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__23); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 685, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":686 + * else: + * result.append(slice(None)) + * have_slices = True # <<<<<<<<<<<<<< + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + */ + __pyx_v_have_slices = 1; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + goto __pyx_L6; + } + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + /*else*/ { + __pyx_t_2 = PySlice_Check(__pyx_v_item); + __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0); + __pyx_t_1 = __pyx_t_10; + __pyx_L9_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":689 + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<< + * + * have_slices = have_slices or isinstance(item, slice) + */ + __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_Raise(__pyx_t_11, 0, 0, 0); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __PYX_ERR(2, 689, __pyx_L1_error) + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + } + + /* "View.MemoryView":691 + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<< + * result.append(item) + * + */ + __pyx_t_10 = (__pyx_v_have_slices != 0); + if (!__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = PySlice_Check(__pyx_v_item); + __pyx_t_2 = (__pyx_t_10 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_have_slices = __pyx_t_1; + + /* "View.MemoryView":692 + * + * have_slices = have_slices or isinstance(item, slice) + * result.append(item) # <<<<<<<<<<<<<< + * + * nslices = ndim - len(result) + */ + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 692, __pyx_L1_error) + } + __pyx_L6:; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":694 + * result.append(item) + * + * nslices = ndim - len(result) # <<<<<<<<<<<<<< + * if nslices: + * result.extend([slice(None)] * nslices) + */ + __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 694, __pyx_L1_error) + __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5); + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + __pyx_t_1 = (__pyx_v_nslices != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":696 + * nslices = ndim - len(result) + * if nslices: + * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< + * + * return have_slices or nslices, tuple(result) + */ + __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__23); + __Pyx_GIVEREF(__pyx_slice__23); + PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__23); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 696, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + } + + /* "View.MemoryView":698 + * result.extend([slice(None)] * nslices) + * + * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + */ + __Pyx_XDECREF(__pyx_r); + if (!__pyx_v_have_slices) { + } else { + __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_L14_bool_binop_done:; + __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_r = ((PyObject*)__pyx_t_11); + __pyx_t_11 = 0; + goto __pyx_L0; + + /* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_tup); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_XDECREF(__pyx_v_item); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + +static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); + + /* "View.MemoryView":701 + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") + */ + __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); + for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { + __pyx_t_1 = __pyx_t_3; + __pyx_v_suboffset = (__pyx_t_1[0]); + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __PYX_ERR(2, 703, __pyx_L1_error) + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + } + } + + /* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { + int __pyx_v_new_ndim; + int __pyx_v_suboffset_dim; + int __pyx_v_dim; + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + __Pyx_memviewslice *__pyx_v_p_src; + struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; + __Pyx_memviewslice *__pyx_v_p_dst; + int *__pyx_v_p_suboffset_dim; + Py_ssize_t __pyx_v_start; + Py_ssize_t __pyx_v_stop; + Py_ssize_t __pyx_v_step; + int __pyx_v_have_start; + int __pyx_v_have_stop; + int __pyx_v_have_step; + PyObject *__pyx_v_index = NULL; + struct __pyx_memoryview_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + struct __pyx_memoryview_obj *__pyx_t_4; + char *__pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + PyObject *(*__pyx_t_8)(PyObject *); + PyObject *__pyx_t_9 = NULL; + Py_ssize_t __pyx_t_10; + int __pyx_t_11; + Py_ssize_t __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memview_slice", 0); + + /* "View.MemoryView":711 + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): + * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< + * cdef bint negative_step + * cdef __Pyx_memviewslice src, dst + */ + __pyx_v_new_ndim = 0; + __pyx_v_suboffset_dim = -1; + + /* "View.MemoryView":718 + * + * + * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< + * + * cdef _memoryviewslice memviewsliceobj + */ + (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); + + /* "View.MemoryView":722 + * cdef _memoryviewslice memviewsliceobj + * + * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(!Py_OptimizeFlag)) { + if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) { + PyErr_SetNone(PyExc_AssertionError); + __PYX_ERR(2, 722, __pyx_L1_error) + } + } + #endif + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":725 + * + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview # <<<<<<<<<<<<<< + * p_src = &memviewsliceobj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(2, 725, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":726 + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, &src) + */ + __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + goto __pyx_L3; + } + + /* "View.MemoryView":728 + * p_src = &memviewsliceobj.from_slice + * else: + * slice_copy(memview, &src) # <<<<<<<<<<<<<< + * p_src = &src + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); + + /* "View.MemoryView":729 + * else: + * slice_copy(memview, &src) + * p_src = &src # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_p_src = (&__pyx_v_src); + } + __pyx_L3:; + + /* "View.MemoryView":735 + * + * + * dst.memview = p_src.memview # <<<<<<<<<<<<<< + * dst.data = p_src.data + * + */ + __pyx_t_4 = __pyx_v_p_src->memview; + __pyx_v_dst.memview = __pyx_t_4; + + /* "View.MemoryView":736 + * + * dst.memview = p_src.memview + * dst.data = p_src.data # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_v_p_src->data; + __pyx_v_dst.data = __pyx_t_5; + + /* "View.MemoryView":741 + * + * + * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< + * cdef int *p_suboffset_dim = &suboffset_dim + * cdef Py_ssize_t start, stop, step + */ + __pyx_v_p_dst = (&__pyx_v_dst); + + /* "View.MemoryView":742 + * + * cdef __Pyx_memviewslice *p_dst = &dst + * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< + * cdef Py_ssize_t start, stop, step + * cdef bint have_start, have_stop, have_step + */ + __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + __pyx_t_6 = 0; + if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { + __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + } else { + __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 746, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_8)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(2, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } else { + if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(2, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } + } else { + __pyx_t_9 = __pyx_t_8(__pyx_t_3); + if (unlikely(!__pyx_t_9)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(2, 746, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_9); + } + __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9); + __pyx_t_9 = 0; + __pyx_v_dim = __pyx_t_6; + __pyx_t_6 = (__pyx_t_6 + 1); + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":751 + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<< + * 0, 0, 0, # have_{start,stop,step} + * False) + */ + __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 751, __pyx_L1_error) + + /* "View.MemoryView":748 + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 748, __pyx_L1_error) + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + goto __pyx_L6; + } + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + __pyx_t_2 = (__pyx_v_index == Py_None); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":755 + * False) + * elif index is None: + * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + */ + (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; + + /* "View.MemoryView":756 + * elif index is None: + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 + */ + (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; + + /* "View.MemoryView":757 + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< + * new_ndim += 1 + * else: + */ + (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; + + /* "View.MemoryView":758 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 # <<<<<<<<<<<<<< + * else: + * start = index.start or 0 + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + goto __pyx_L6; + } + + /* "View.MemoryView":760 + * new_ndim += 1 + * else: + * start = index.start or 0 # <<<<<<<<<<<<<< + * stop = index.stop or 0 + * step = index.step or 0 + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 760, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 760, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L7_bool_binop_done:; + __pyx_v_start = __pyx_t_10; + + /* "View.MemoryView":761 + * else: + * start = index.start or 0 + * stop = index.stop or 0 # <<<<<<<<<<<<<< + * step = index.step or 0 + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 761, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 761, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L9_bool_binop_done:; + __pyx_v_stop = __pyx_t_10; + + /* "View.MemoryView":762 + * start = index.start or 0 + * stop = index.stop or 0 + * step = index.step or 0 # <<<<<<<<<<<<<< + * + * have_start = index.start is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 762, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 762, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L11_bool_binop_done:; + __pyx_v_step = __pyx_t_10; + + /* "View.MemoryView":764 + * step = index.step or 0 + * + * have_start = index.start is not None # <<<<<<<<<<<<<< + * have_stop = index.stop is not None + * have_step = index.step is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_start = __pyx_t_1; + + /* "View.MemoryView":765 + * + * have_start = index.start is not None + * have_stop = index.stop is not None # <<<<<<<<<<<<<< + * have_step = index.step is not None + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_stop = __pyx_t_1; + + /* "View.MemoryView":766 + * have_start = index.start is not None + * have_stop = index.stop is not None + * have_step = index.step is not None # <<<<<<<<<<<<<< + * + * slice_memviewslice( + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_step = __pyx_t_1; + + /* "View.MemoryView":768 + * have_step = index.step is not None + * + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 768, __pyx_L1_error) + + /* "View.MemoryView":774 + * have_start, have_stop, have_step, + * True) + * new_ndim += 1 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + } + __pyx_L6:; + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":778 + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< + * memviewsliceobj.to_dtype_func, + * memview.dtype_is_object) + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(2, 778, __pyx_L1_error) } + + /* "View.MemoryView":779 + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * else: + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(2, 779, __pyx_L1_error) } + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 777, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(2, 777, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + } + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + /*else*/ { + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":783 + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(2, 782, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { + Py_ssize_t __pyx_v_new_shape; + int __pyx_v_negative_step; + int __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + __pyx_t_1 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":830 + * + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + } + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + __pyx_t_1 = (0 <= __pyx_v_start); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); + } + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":832 + * start += shape + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< + * else: + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 832, __pyx_L1_error) + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + } + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":835 + * else: + * + * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<< + * + * if have_step and step == 0: + */ + /*else*/ { + __pyx_t_1 = ((__pyx_v_have_step != 0) != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step < 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L6_bool_binop_done:; + __pyx_v_negative_step = __pyx_t_2; + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + __pyx_t_1 = (__pyx_v_have_step != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step == 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L9_bool_binop_done:; + if (__pyx_t_2) { + + /* "View.MemoryView":838 + * + * if have_step and step == 0: + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 838, __pyx_L1_error) + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + } + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + __pyx_t_2 = (__pyx_v_have_start != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":843 + * if have_start: + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if start < 0: + * start = 0 + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":845 + * start += shape + * if start < 0: + * start = 0 # <<<<<<<<<<<<<< + * elif start >= shape: + * if negative_step: + */ + __pyx_v_start = 0; + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + } + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + goto __pyx_L12; + } + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":848 + * elif start >= shape: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = shape + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L14; + } + + /* "View.MemoryView":850 + * start = shape - 1 + * else: + * start = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + /*else*/ { + __pyx_v_start = __pyx_v_shape; + } + __pyx_L14:; + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + } + __pyx_L12:; + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + goto __pyx_L11; + } + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":853 + * else: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = 0 + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L15; + } + + /* "View.MemoryView":855 + * start = shape - 1 + * else: + * start = 0 # <<<<<<<<<<<<<< + * + * if have_stop: + */ + /*else*/ { + __pyx_v_start = 0; + } + __pyx_L15:; + } + __pyx_L11:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + __pyx_t_2 = (__pyx_v_have_stop != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":859 + * if have_stop: + * if stop < 0: + * stop += shape # <<<<<<<<<<<<<< + * if stop < 0: + * stop = 0 + */ + __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":861 + * stop += shape + * if stop < 0: + * stop = 0 # <<<<<<<<<<<<<< + * elif stop > shape: + * stop = shape + */ + __pyx_v_stop = 0; + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + } + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + goto __pyx_L17; + } + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":863 + * stop = 0 + * elif stop > shape: + * stop = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + __pyx_v_stop = __pyx_v_shape; + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + } + __pyx_L17:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + goto __pyx_L16; + } + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":866 + * else: + * if negative_step: + * stop = -1 # <<<<<<<<<<<<<< + * else: + * stop = shape + */ + __pyx_v_stop = -1L; + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + goto __pyx_L19; + } + + /* "View.MemoryView":868 + * stop = -1 + * else: + * stop = shape # <<<<<<<<<<<<<< + * + * if not have_step: + */ + /*else*/ { + __pyx_v_stop = __pyx_v_shape; + } + __pyx_L19:; + } + __pyx_L16:; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":871 + * + * if not have_step: + * step = 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_step = 1; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + } + + /* "View.MemoryView":875 + * + * with cython.cdivision(True): + * new_shape = (stop - start) // step # <<<<<<<<<<<<<< + * + * if (stop - start) - step * new_shape: + */ + __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":878 + * + * if (stop - start) - step * new_shape: + * new_shape += 1 # <<<<<<<<<<<<<< + * + * if new_shape < 0: + */ + __pyx_v_new_shape = (__pyx_v_new_shape + 1); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + } + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":881 + * + * if new_shape < 0: + * new_shape = 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_new_shape = 0; + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + } + + /* "View.MemoryView":884 + * + * + * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset + */ + (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); + + /* "View.MemoryView":885 + * + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< + * dst.suboffsets[new_ndim] = suboffset + * + */ + (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; + + /* "View.MemoryView":886 + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; + } + __pyx_L3:; + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":890 + * + * if suboffset_dim[0] < 0: + * dst.data += start * stride # <<<<<<<<<<<<<< + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride + */ + __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + goto __pyx_L23; + } + + /* "View.MemoryView":892 + * dst.data += start * stride + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< + * + * if suboffset >= 0: + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_suboffset_dim[0]); + (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); + } + __pyx_L23:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":897 + * if not is_slice: + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + */ + __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + goto __pyx_L26; + } + + /* "View.MemoryView":899 + * dst.data = ( dst.data)[0] + suboffset + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< + * "must be indexed and not sliced", dim) + * else: + */ + /*else*/ { + + /* "View.MemoryView":900 + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< + * else: + * suboffset_dim[0] = new_ndim + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 899, __pyx_L1_error) + } + __pyx_L26:; + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + goto __pyx_L25; + } + + /* "View.MemoryView":902 + * "must be indexed and not sliced", dim) + * else: + * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< + * + * return 0 + */ + /*else*/ { + (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; + } + __pyx_L25:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + } + + /* "View.MemoryView":904 + * suboffset_dim[0] = new_ndim + * + * return 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + +static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_suboffset; + Py_ssize_t __pyx_v_itemsize; + char *__pyx_v_resultp; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("pybuffer_index", 0); + + /* "View.MemoryView":912 + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< + * cdef Py_ssize_t itemsize = view.itemsize + * cdef char *resultp + */ + __pyx_v_suboffset = -1L; + + /* "View.MemoryView":913 + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< + * cdef char *resultp + * + */ + __pyx_t_1 = __pyx_v_view->itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":917 + * + * if view.ndim == 0: + * shape = view.len / itemsize # <<<<<<<<<<<<<< + * stride = itemsize + * else: + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(2, 917, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(2, 917, __pyx_L1_error) + } + __pyx_v_shape = (__pyx_v_view->len / __pyx_v_itemsize); + + /* "View.MemoryView":918 + * if view.ndim == 0: + * shape = view.len / itemsize + * stride = itemsize # <<<<<<<<<<<<<< + * else: + * shape = view.shape[dim] + */ + __pyx_v_stride = __pyx_v_itemsize; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + goto __pyx_L3; + } + + /* "View.MemoryView":920 + * stride = itemsize + * else: + * shape = view.shape[dim] # <<<<<<<<<<<<<< + * stride = view.strides[dim] + * if view.suboffsets != NULL: + */ + /*else*/ { + __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); + + /* "View.MemoryView":921 + * else: + * shape = view.shape[dim] + * stride = view.strides[dim] # <<<<<<<<<<<<<< + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] + */ + __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":923 + * stride = view.strides[dim] + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< + * + * if index < 0: + */ + __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + } + } + __pyx_L3:; + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":926 + * + * if index < 0: + * index += view.shape[dim] # <<<<<<<<<<<<<< + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + */ + __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":928 + * index += view.shape[dim] + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * if index >= shape: + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 928, __pyx_L1_error) + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + } + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":931 + * + * if index >= shape: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * resultp = bufp + index * stride + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 931, __pyx_L1_error) + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":933 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * resultp = bufp + index * stride # <<<<<<<<<<<<<< + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset + */ + __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":935 + * resultp = bufp + index * stride + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< + * + * return resultp + */ + __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + } + + /* "View.MemoryView":937 + * resultp = ( resultp)[0] + suboffset + * + * return resultp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_resultp; + goto __pyx_L0; + + /* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + +static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { + int __pyx_v_ndim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_r; + int __pyx_t_1; + Py_ssize_t *__pyx_t_2; + long __pyx_t_3; + long __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":944 + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: + * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< + * + * cdef Py_ssize_t *shape = memslice.shape + */ + __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; + __pyx_v_ndim = __pyx_t_1; + + /* "View.MemoryView":946 + * cdef int ndim = memslice.memview.view.ndim + * + * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< + * cdef Py_ssize_t *strides = memslice.strides + * + */ + __pyx_t_2 = __pyx_v_memslice->shape; + __pyx_v_shape = __pyx_t_2; + + /* "View.MemoryView":947 + * + * cdef Py_ssize_t *shape = memslice.shape + * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __pyx_v_memslice->strides; + __pyx_v_strides = __pyx_t_2; + + /* "View.MemoryView":951 + * + * cdef int i, j + * for i in range(ndim / 2): # <<<<<<<<<<<<<< + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + */ + __pyx_t_3 = (__pyx_v_ndim / 2); + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":952 + * cdef int i, j + * for i in range(ndim / 2): + * j = ndim - 1 - i # <<<<<<<<<<<<<< + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] + */ + __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); + + /* "View.MemoryView":953 + * for i in range(ndim / 2): + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< + * shape[i], shape[j] = shape[j], shape[i] + * + */ + __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); + __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); + (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; + (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; + + /* "View.MemoryView":954 + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + */ + __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); + __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); + (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; + (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0); + if (!__pyx_t_8) { + } else { + __pyx_t_7 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0); + __pyx_t_7 = __pyx_t_8; + __pyx_L6_bool_binop_done:; + if (__pyx_t_7) { + + /* "View.MemoryView":957 + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< + * + * return 1 + */ + __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 957, __pyx_L1_error) + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + } + } + + /* "View.MemoryView":959 + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + * return 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 1; + goto __pyx_L0; + + /* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = 0; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + +/* Python wrapper */ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":977 + * + * def __dealloc__(self): + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1); + + /* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":981 + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) # <<<<<<<<<<<<<< + * else: + * return memoryview.convert_item_to_object(self, itemp) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 981, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + } + + /* "View.MemoryView":983 + * return self.to_object_func(itemp) + * else: + * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 983, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":987 + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< + * else: + * memoryview.assign_item_from_object(self, itemp, value) + */ + __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(2, 987, __pyx_L1_error) + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":989 + * self.to_dtype_func(itemp, value) + * else: + * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< + * + * @property + */ + /*else*/ { + __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 989, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":993 + * @property + * def base(self): + * return self.from_object # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->from_object); + __pyx_r = __pyx_v_self->from_object; + goto __pyx_L0; + + /* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self) { + 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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(2, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + 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("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(2, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_TypeInfo *__pyx_t_4; + Py_buffer __pyx_t_5; + Py_ssize_t *__pyx_t_6; + Py_ssize_t *__pyx_t_7; + Py_ssize_t *__pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_fromslice", 0); + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1008 + * + * if memviewslice.memview == Py_None: + * return None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "View.MemoryView":1013 + * + * + * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<< + * + * result.from_slice = memviewslice + */ + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1015 + * result = _memoryviewslice(None, 0, dtype_is_object) + * + * result.from_slice = memviewslice # <<<<<<<<<<<<<< + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + */ + __pyx_v_result->from_slice = __pyx_v_memviewslice; + + /* "View.MemoryView":1016 + * + * result.from_slice = memviewslice + * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< + * + * result.from_object = ( memviewslice.memview).base + */ + __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); + + /* "View.MemoryView":1018 + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<< + * result.typeinfo = memviewslice.memview.typeinfo + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1018, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_result->from_object); + __Pyx_DECREF(__pyx_v_result->from_object); + __pyx_v_result->from_object = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":1019 + * + * result.from_object = ( memviewslice.memview).base + * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< + * + * result.view = memviewslice.memview.view + */ + __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; + __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; + + /* "View.MemoryView":1021 + * result.typeinfo = memviewslice.memview.typeinfo + * + * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + */ + __pyx_t_5 = __pyx_v_memviewslice.memview->view; + __pyx_v_result->__pyx_base.view = __pyx_t_5; + + /* "View.MemoryView":1022 + * + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + */ + __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); + + /* "View.MemoryView":1023 + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data + * result.view.ndim = ndim # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; + + /* "View.MemoryView":1024 + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; + + /* "View.MemoryView":1025 + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1028 + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< + * else: + * result.flags = PyBUF_RECORDS_RO + */ + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1030 + * result.flags = PyBUF_RECORDS + * else: + * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< + * + * result.view.shape = result.from_slice.shape + */ + /*else*/ { + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; + } + __pyx_L4:; + + /* "View.MemoryView":1032 + * result.flags = PyBUF_RECORDS_RO + * + * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< + * result.view.strides = result.from_slice.strides + * + */ + __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); + + /* "View.MemoryView":1033 + * + * result.view.shape = result.from_slice.shape + * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); + + /* "View.MemoryView":1036 + * + * + * result.view.suboffsets = NULL # <<<<<<<<<<<<<< + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + */ + __pyx_v_result->__pyx_base.view.suboffsets = NULL; + + /* "View.MemoryView":1037 + * + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + */ + __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_v_suboffset = (__pyx_t_6[0]); + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1039 + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); + + /* "View.MemoryView":1040 + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + * break # <<<<<<<<<<<<<< + * + * result.view.len = result.view.itemsize + */ + goto __pyx_L6_break; + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + } + } + __pyx_L6_break:; + + /* "View.MemoryView":1042 + * break + * + * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< + * for length in result.view.shape[:ndim]: + * result.view.len *= length + */ + __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + + /* "View.MemoryView":1043 + * + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< + * result.view.len *= length + * + */ + __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1044 + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: + * result.view.len *= length # <<<<<<<<<<<<<< + * + * result.to_object_func = to_object_func + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 1044, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + } + + /* "View.MemoryView":1046 + * result.view.len *= length + * + * result.to_object_func = to_object_func # <<<<<<<<<<<<<< + * result.to_dtype_func = to_dtype_func + * + */ + __pyx_v_result->to_object_func = __pyx_v_to_object_func; + + /* "View.MemoryView":1047 + * + * result.to_object_func = to_object_func + * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; + + /* "View.MemoryView":1049 + * result.to_dtype_func = to_dtype_func + * + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { + struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; + __Pyx_memviewslice *__pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_slice_from_memview", 0); + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1056 + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): + * obj = memview # <<<<<<<<<<<<<< + * return &obj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(2, 1056, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":1057 + * if isinstance(memview, _memoryviewslice): + * obj = memview + * return &obj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, mslice) + */ + __pyx_r = (&__pyx_v_obj->from_slice); + goto __pyx_L0; + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + } + + /* "View.MemoryView":1059 + * return &obj.from_slice + * else: + * slice_copy(memview, mslice) # <<<<<<<<<<<<<< + * return mslice + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); + + /* "View.MemoryView":1060 + * else: + * slice_copy(memview, mslice) + * return mslice # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_slice_copy') + */ + __pyx_r = __pyx_v_mslice; + goto __pyx_L0; + } + + /* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_obj); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { + int __pyx_v_dim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + Py_ssize_t *__pyx_v_suboffsets; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + __Pyx_RefNannySetupContext("slice_copy", 0); + + /* "View.MemoryView":1067 + * cdef (Py_ssize_t*) shape, strides, suboffsets + * + * shape = memview.view.shape # <<<<<<<<<<<<<< + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets + */ + __pyx_t_1 = __pyx_v_memview->view.shape; + __pyx_v_shape = __pyx_t_1; + + /* "View.MemoryView":1068 + * + * shape = memview.view.shape + * strides = memview.view.strides # <<<<<<<<<<<<<< + * suboffsets = memview.view.suboffsets + * + */ + __pyx_t_1 = __pyx_v_memview->view.strides; + __pyx_v_strides = __pyx_t_1; + + /* "View.MemoryView":1069 + * shape = memview.view.shape + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< + * + * dst.memview = <__pyx_memoryview *> memview + */ + __pyx_t_1 = __pyx_v_memview->view.suboffsets; + __pyx_v_suboffsets = __pyx_t_1; + + /* "View.MemoryView":1071 + * suboffsets = memview.view.suboffsets + * + * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< + * dst.data = memview.view.buf + * + */ + __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); + + /* "View.MemoryView":1072 + * + * dst.memview = <__pyx_memoryview *> memview + * dst.data = memview.view.buf # <<<<<<<<<<<<<< + * + * for dim in range(memview.view.ndim): + */ + __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); + + /* "View.MemoryView":1074 + * dst.data = memview.view.buf + * + * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + */ + __pyx_t_2 = __pyx_v_memview->view.ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_dim = __pyx_t_4; + + /* "View.MemoryView":1075 + * + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + */ + (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); + + /* "View.MemoryView":1076 + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + * + */ + (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); + + /* "View.MemoryView":1077 + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object') + */ + if ((__pyx_v_suboffsets != 0)) { + __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); + } else { + __pyx_t_5 = -1L; + } + (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; + } + + /* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { + __Pyx_memviewslice __pyx_v_memviewslice; + 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("memoryview_copy", 0); + + /* "View.MemoryView":1083 + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< + * return memoryview_copy_from_slice(memview, &memviewslice) + * + */ + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); + + /* "View.MemoryView":1084 + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) + * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object_from_slice') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { + PyObject *(*__pyx_v_to_object_func)(char *); + int (*__pyx_v_to_dtype_func)(char *, PyObject *); + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *(*__pyx_t_3)(char *); + int (*__pyx_t_4)(char *, PyObject *); + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1095 + * + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + */ + __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; + __pyx_v_to_object_func = __pyx_t_3; + + /* "View.MemoryView":1096 + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< + * else: + * to_object_func = NULL + */ + __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; + __pyx_v_to_dtype_func = __pyx_t_4; + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1098 + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + * to_object_func = NULL # <<<<<<<<<<<<<< + * to_dtype_func = NULL + * + */ + /*else*/ { + __pyx_v_to_object_func = NULL; + + /* "View.MemoryView":1099 + * else: + * to_object_func = NULL + * to_dtype_func = NULL # <<<<<<<<<<<<<< + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + */ + __pyx_v_to_dtype_func = NULL; + } + __pyx_L3:; + + /* "View.MemoryView":1101 + * to_dtype_func = NULL + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< + * to_object_func, to_dtype_func, + * memview.dtype_is_object) + */ + __Pyx_XDECREF(__pyx_r); + + /* "View.MemoryView":1103 + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + * to_object_func, to_dtype_func, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + +static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { + Py_ssize_t __pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + __pyx_t_1 = ((__pyx_v_arg < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1111 + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: + * return -arg # <<<<<<<<<<<<<< + * else: + * return arg + */ + __pyx_r = (-__pyx_v_arg); + goto __pyx_L0; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + } + + /* "View.MemoryView":1113 + * return -arg + * else: + * return arg # <<<<<<<<<<<<<< + * + * @cname('__pyx_get_best_slice_order') + */ + /*else*/ { + __pyx_r = __pyx_v_arg; + goto __pyx_L0; + } + + /* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + +static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { + int __pyx_v_i; + Py_ssize_t __pyx_v_c_stride; + Py_ssize_t __pyx_v_f_stride; + char __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1121 + * """ + * cdef int i + * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< + * cdef Py_ssize_t f_stride = 0 + * + */ + __pyx_v_c_stride = 0; + + /* "View.MemoryView":1122 + * cdef int i + * cdef Py_ssize_t c_stride = 0 + * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_f_stride = 0; + + /* "View.MemoryView":1124 + * cdef Py_ssize_t f_stride = 0 + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1126 + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1127 + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + goto __pyx_L4_break; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L4_break:; + + /* "View.MemoryView":1129 + * break + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + */ + __pyx_t_1 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_1; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1131 + * for i in range(ndim): + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1132 + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + */ + goto __pyx_L7_break; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L7_break:; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1135 + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + * return 'C' # <<<<<<<<<<<<<< + * else: + * return 'F' + */ + __pyx_r = 'C'; + goto __pyx_L0; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + } + + /* "View.MemoryView":1137 + * return 'C' + * else: + * return 'F' # <<<<<<<<<<<<<< + * + * @cython.cdivision(True) + */ + /*else*/ { + __pyx_r = 'F'; + goto __pyx_L0; + } + + /* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + +static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; + Py_ssize_t __pyx_v_dst_extent; + Py_ssize_t __pyx_v_src_stride; + Py_ssize_t __pyx_v_dst_stride; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + + /* "View.MemoryView":1147 + * + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + */ + __pyx_v_src_extent = (__pyx_v_src_shape[0]); + + /* "View.MemoryView":1148 + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] + */ + __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); + + /* "View.MemoryView":1149 + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + */ + __pyx_v_src_stride = (__pyx_v_src_strides[0]); + + /* "View.MemoryView":1150 + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + + /* "View.MemoryView":1154 + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + */ + __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); + if (__pyx_t_2) { + __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); + } + __pyx_t_3 = (__pyx_t_2 != 0); + __pyx_t_1 = __pyx_t_3; + __pyx_L5_bool_binop_done:; + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + if (__pyx_t_1) { + + /* "View.MemoryView":1155 + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1157 + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __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; + + /* "View.MemoryView":1158 + * else: + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< + * src_data += src_stride + * dst_data += dst_stride + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); + + /* "View.MemoryView":1159 + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * else: + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1160 + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L4:; + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1162 + * dst_data += dst_stride + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * _copy_strided_to_strided(src_data, src_strides + 1, + * dst_data, dst_strides + 1, + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __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; + + /* "View.MemoryView":1163 + * else: + * for i in range(dst_extent): + * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< + * dst_data, dst_strides + 1, + * src_shape + 1, dst_shape + 1, + */ + _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); + + /* "View.MemoryView":1167 + * src_shape + 1, dst_shape + 1, + * ndim - 1, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1168 + * ndim - 1, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + + /* function exit code */ +} + +/* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + +static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + + /* "View.MemoryView":1173 + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< + * src.shape, dst.shape, ndim, itemsize) + * + */ + _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_size; + Py_ssize_t __pyx_r; + Py_ssize_t __pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + + /* "View.MemoryView":1179 + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<< + * + * for shape in src.shape[:ndim]: + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_size = __pyx_t_1; + + /* "View.MemoryView":1181 + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + * + * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<< + * size *= shape + * + */ + __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim); + for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_shape = (__pyx_t_2[0]); + + /* "View.MemoryView":1182 + * + * for shape in src.shape[:ndim]: + * size *= shape # <<<<<<<<<<<<<< + * + * return size + */ + __pyx_v_size = (__pyx_v_size * __pyx_v_shape); + } + + /* "View.MemoryView":1184 + * size *= shape + * + * return size # <<<<<<<<<<<<<< + * + * @cname('__pyx_fill_contig_strides_array') + */ + __pyx_r = __pyx_v_size; + goto __pyx_L0; + + /* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { + int __pyx_v_idx; + Py_ssize_t __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + __pyx_t_1 = ((__pyx_v_order == 'F') != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1197 + * + * if order == 'F': + * for idx in range(ndim): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + __pyx_t_2 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_idx = __pyx_t_4; + + /* "View.MemoryView":1198 + * if order == 'F': + * for idx in range(ndim): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * else: + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1199 + * for idx in range(ndim): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * else: + * for idx in range(ndim - 1, -1, -1): + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1201 + * stride *= shape[idx] + * else: + * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + /*else*/ { + for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { + __pyx_v_idx = __pyx_t_2; + + /* "View.MemoryView":1202 + * else: + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1203 + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * + * return stride + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + } + __pyx_L3:; + + /* "View.MemoryView":1205 + * stride *= shape[idx] + * + * return stride # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_data_to_temp') + */ + __pyx_r = __pyx_v_stride; + goto __pyx_L0; + + /* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { + int __pyx_v_i; + void *__pyx_v_result; + size_t __pyx_v_itemsize; + size_t __pyx_v_size; + void *__pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + struct __pyx_memoryview_obj *__pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1219 + * cdef void *result + * + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef size_t size = slice_get_size(src, ndim) + * + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1220 + * + * cdef size_t itemsize = src.memview.view.itemsize + * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< + * + * result = malloc(size) + */ + __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); + + /* "View.MemoryView":1222 + * cdef size_t size = slice_get_size(src, ndim) + * + * result = malloc(size) # <<<<<<<<<<<<<< + * if not result: + * _err(MemoryError, NULL) + */ + __pyx_v_result = malloc(__pyx_v_size); + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1224 + * result = malloc(size) + * if not result: + * _err(MemoryError, NULL) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 1224, __pyx_L1_error) + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + } + + /* "View.MemoryView":1227 + * + * + * tmpslice.data = result # <<<<<<<<<<<<<< + * tmpslice.memview = src.memview + * for i in range(ndim): + */ + __pyx_v_tmpslice->data = ((char *)__pyx_v_result); + + /* "View.MemoryView":1228 + * + * tmpslice.data = result + * tmpslice.memview = src.memview # <<<<<<<<<<<<<< + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + */ + __pyx_t_4 = __pyx_v_src->memview; + __pyx_v_tmpslice->memview = __pyx_t_4; + + /* "View.MemoryView":1229 + * tmpslice.data = result + * tmpslice.memview = src.memview + * for i in range(ndim): # <<<<<<<<<<<<<< + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1230 + * tmpslice.memview = src.memview + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< + * tmpslice.suboffsets[i] = -1 + * + */ + (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); + + /* "View.MemoryView":1231 + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, + */ + (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1233 + * tmpslice.suboffsets[i] = -1 + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<< + * ndim, order) + * + */ + (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); + + /* "View.MemoryView":1237 + * + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1239 + * for i in range(ndim): + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< + * + * if slice_is_contig(src[0], order, ndim): + */ + (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + } + } + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1242 + * + * if slice_is_contig(src[0], order, ndim): + * memcpy(result, src.data, size) # <<<<<<<<<<<<<< + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + */ + (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":1244 + * memcpy(result, src.data, size) + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< + * + * return result + */ + /*else*/ { + copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); + } + __pyx_L9:; + + /* "View.MemoryView":1246 + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = NULL; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + +static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_extents", 0); + + /* "View.MemoryView":1254 + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + * (i, extent1, extent2)) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err_dim') + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":1253 + * cdef int _err_extents(int i, Py_ssize_t extent1, + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<< + * (i, extent1, extent2)) + * + */ + __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(2, 1253, __pyx_L1_error) + + /* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + +static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_dim", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1258 + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: + * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err') + */ + __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_v_error); + __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(2, 1258, __pyx_L1_error) + + /* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + +static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + __pyx_t_1 = ((__pyx_v_msg != NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":1263 + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: + * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<< + * else: + * raise error + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_error); + __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(2, 1263, __pyx_L1_error) + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + } + + /* "View.MemoryView":1265 + * raise error(msg.decode('ascii')) + * else: + * raise error # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_contents') + */ + /*else*/ { + __Pyx_Raise(__pyx_v_error, 0, 0, 0); + __PYX_ERR(2, 1265, __pyx_L1_error) + } + + /* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + + /* 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); + __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { + void *__pyx_v_tmpdata; + size_t __pyx_v_itemsize; + int __pyx_v_i; + char __pyx_v_order; + int __pyx_v_broadcasting; + int __pyx_v_direct_copy; + __Pyx_memviewslice __pyx_v_tmp; + int __pyx_v_ndim; + int __pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + void *__pyx_t_7; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1276 + * Check for overlapping memory and verify the shapes. + * """ + * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + */ + __pyx_v_tmpdata = NULL; + + /* "View.MemoryView":1277 + * """ + * cdef void *tmpdata = NULL + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + */ + __pyx_t_1 = __pyx_v_src.memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1279 + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< + * cdef bint broadcasting = False + * cdef bint direct_copy = False + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); + + /* "View.MemoryView":1280 + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False # <<<<<<<<<<<<<< + * cdef bint direct_copy = False + * cdef __Pyx_memviewslice tmp + */ + __pyx_v_broadcasting = 0; + + /* "View.MemoryView":1281 + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False + * cdef bint direct_copy = False # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice tmp + * + */ + __pyx_v_direct_copy = 0; + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1285 + * + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1287 + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< + * + * cdef int ndim = max(src_ndim, dst_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + } + __pyx_L3:; + + /* "View.MemoryView":1289 + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + __pyx_t_3 = __pyx_v_dst_ndim; + __pyx_t_4 = __pyx_v_src_ndim; + if (((__pyx_t_3 > __pyx_t_4) != 0)) { + __pyx_t_5 = __pyx_t_3; + } else { + __pyx_t_5 = __pyx_t_4; + } + __pyx_v_ndim = __pyx_t_5; + + /* "View.MemoryView":1291 + * cdef int ndim = max(src_ndim, dst_ndim) + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + */ + __pyx_t_5 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_5; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1294 + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + * broadcasting = True # <<<<<<<<<<<<<< + * src.strides[i] = 0 + * else: + */ + __pyx_v_broadcasting = 1; + + /* "View.MemoryView":1295 + * if src.shape[i] == 1: + * broadcasting = True + * src.strides[i] = 0 # <<<<<<<<<<<<<< + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) + */ + (__pyx_v_src.strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + goto __pyx_L7; + } + + /* "View.MemoryView":1297 + * src.strides[i] = 0 + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< + * + * if src.suboffsets[i] >= 0: + */ + /*else*/ { + __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1297, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + } + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1300 + * + * if src.suboffsets[i] >= 0: + * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< + * + * if slices_overlap(&src, &dst, ndim, itemsize): + */ + __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1300, __pyx_L1_error) + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + } + } + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1305 + * + * if not slice_is_contig(src, order, ndim): + * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + } + + /* "View.MemoryView":1307 + * order = get_best_order(&dst, ndim) + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< + * src = tmp + * + */ + __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(2, 1307, __pyx_L1_error) + __pyx_v_tmpdata = __pyx_t_7; + + /* "View.MemoryView":1308 + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + * src = tmp # <<<<<<<<<<<<<< + * + * if not broadcasting: + */ + __pyx_v_src = __pyx_v_tmp; + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1314 + * + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + goto __pyx_L12; + } + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1316 + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< + * + * if direct_copy: + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + } + __pyx_L12:; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_2 = (__pyx_v_direct_copy != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1320 + * if direct_copy: + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1321 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + */ + (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); + + /* "View.MemoryView":1322 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * free(tmpdata) + * return 0 + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1323 + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1324 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * if order == 'F' == get_best_order(&dst, ndim): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = (__pyx_v_order == 'F'); + if (__pyx_t_2) { + __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); + } + __pyx_t_8 = (__pyx_t_2 != 0); + if (__pyx_t_8) { + + /* "View.MemoryView":1329 + * + * + * transpose_memslice(&src) # <<<<<<<<<<<<<< + * transpose_memslice(&dst) + * + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(2, 1329, __pyx_L1_error) + + /* "View.MemoryView":1330 + * + * transpose_memslice(&src) + * transpose_memslice(&dst) # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(2, 1330, __pyx_L1_error) + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1332 + * transpose_memslice(&dst) + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1333 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + */ + copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1334 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * free(tmpdata) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1336 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1337 + * + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_broadcast_leading') + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { + int __pyx_v_i; + int __pyx_v_offset; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + + /* "View.MemoryView":1344 + * int ndim_other) nogil: + * cdef int i + * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); + + /* "View.MemoryView":1346 + * cdef int offset = ndim_other - ndim + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1347 + * + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + */ + (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); + + /* "View.MemoryView":1348 + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + */ + (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1349 + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< + * + * for i in range(offset): + */ + (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); + } + + /* "View.MemoryView":1351 + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + * for i in range(offset): # <<<<<<<<<<<<<< + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + */ + __pyx_t_1 = __pyx_v_offset; + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1352 + * + * for i in range(offset): + * mslice.shape[i] = 1 # <<<<<<<<<<<<<< + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 + */ + (__pyx_v_mslice->shape[__pyx_v_i]) = 1; + + /* "View.MemoryView":1353 + * for i in range(offset): + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< + * mslice.suboffsets[i] = -1 + * + */ + (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); + + /* "View.MemoryView":1354 + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { + int __pyx_t_1; + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + __pyx_t_1 = (__pyx_v_dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1367 + * + * if dtype_is_object: + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<< + * dst.strides, ndim, inc) + * + */ + __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + } + + /* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + + /* function exit code */ +} + +/* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + __Pyx_RefNannyDeclarations + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); + + /* "View.MemoryView":1374 + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif +} + +/* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + +static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); + + /* "View.MemoryView":1381 + * cdef Py_ssize_t i + * + * for i in range(shape[0]): # <<<<<<<<<<<<<< + * if ndim == 1: + * if inc: + */ + __pyx_t_1 = (__pyx_v_shape[0]); + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + __pyx_t_4 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + __pyx_t_4 = (__pyx_v_inc != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1384 + * if ndim == 1: + * if inc: + * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * Py_DECREF(( data)[0]) + */ + Py_INCREF((((PyObject **)__pyx_v_data)[0])); + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":1386 + * Py_INCREF(( data)[0]) + * else: + * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + */ + /*else*/ { + Py_DECREF((((PyObject **)__pyx_v_data)[0])); + } + __pyx_L6:; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + goto __pyx_L5; + } + + /* "View.MemoryView":1388 + * Py_DECREF(( data)[0]) + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, inc) + * + */ + /*else*/ { + + /* "View.MemoryView":1389 + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + * ndim - 1, inc) # <<<<<<<<<<<<<< + * + * data += strides[0] + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); + } + __pyx_L5:; + + /* "View.MemoryView":1391 + * ndim - 1, inc) + * + * data += strides[0] # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0])); + } + + /* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { + + /* "View.MemoryView":1400 + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1401 + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<< + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1403 + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + +static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_extent; + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + + /* "View.MemoryView":1411 + * size_t itemsize, void *item) nogil: + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t extent = shape[0] + * + */ + __pyx_v_stride = (__pyx_v_strides[0]); + + /* "View.MemoryView":1412 + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] + * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_extent = (__pyx_v_shape[0]); + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1415 + * + * if ndim == 1: + * for i in range(extent): # <<<<<<<<<<<<<< + * memcpy(data, item, itemsize) + * data += stride + */ + __pyx_t_2 = __pyx_v_extent; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1416 + * if ndim == 1: + * for i in range(extent): + * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< + * data += stride + * else: + */ + (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); + + /* "View.MemoryView":1417 + * for i in range(extent): + * memcpy(data, item, itemsize) + * data += stride # <<<<<<<<<<<<<< + * else: + * for i in range(extent): + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1419 + * data += stride + * else: + * for i in range(extent): # <<<<<<<<<<<<<< + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + */ + /*else*/ { + __pyx_t_2 = __pyx_v_extent; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1420 + * else: + * for i in range(extent): + * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, itemsize, item) + * data += stride + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1422 + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + * data += stride # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + + /* function exit code */ +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb068931) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* 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); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + 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("__pyx_unpickle_Enum__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(2, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->name); + __Pyx_DECREF(__pyx_v___pyx_result->name); + __pyx_v___pyx_result->name = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(2, 13, __pyx_L1_error) + } + __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) + __pyx_t_4 = ((__pyx_t_3 > 1) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(2, 14, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static struct __pyx_vtabstruct_array __pyx_vtable_array; + +static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_array_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_array_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_array; + p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None); + if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_array(PyObject *o) { + struct __pyx_array_obj *p = (struct __pyx_array_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_array___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->mode); + Py_CLEAR(p->_format); + (*Py_TYPE(o)->tp_free)(o); +} +static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_array___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) { + PyObject *v = __Pyx_PyObject_GenericGetAttr(o, n); + if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + v = __pyx_array___getattr__(o, n); + } + return v; +} + +static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(o); +} + +static PyMethodDef __pyx_methods_array[] = { + {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_array[] = { + {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_array = { + __pyx_array___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_array, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_array = { + __pyx_array___len__, /*mp_length*/ + __pyx_array___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_array = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_array_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_array = { + PyVarObject_HEAD_INIT(0, 0) + "mst.array", /*tp_name*/ + sizeof(struct __pyx_array_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_array, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + &__pyx_tp_as_sequence_array, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_array, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + __pyx_tp_getattro_array, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_array, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_array, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_array, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_array, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_MemviewEnum_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_MemviewEnum_obj *)o); + p->name = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_Enum(PyObject *o) { + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->name); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + if (p->name) { + e = (*v)(p->name, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_Enum(PyObject *o) { + PyObject* tmp; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + tmp = ((PyObject*)p->name); + p->name = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_Enum[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_MemviewEnum = { + PyVarObject_HEAD_INIT(0, 0) + "mst.Enum", /*tp_name*/ + sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_Enum, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + __pyx_MemviewEnum___repr__, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_Enum, /*tp_traverse*/ + __pyx_tp_clear_Enum, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_Enum, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_MemviewEnum___init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_Enum, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview; + +static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryview_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryview_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_memoryview; + p->obj = Py_None; Py_INCREF(Py_None); + p->_size = Py_None; Py_INCREF(Py_None); + p->_array_interface = Py_None; Py_INCREF(Py_None); + p->view.obj = NULL; + if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_memoryview(PyObject *o) { + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryview___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->obj); + Py_CLEAR(p->_size); + Py_CLEAR(p->_array_interface); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + if (p->obj) { + e = (*v)(p->obj, a); if (e) return e; + } + if (p->_size) { + e = (*v)(p->_size, a); if (e) return e; + } + if (p->_array_interface) { + e = (*v)(p->_array_interface, a); if (e) return e; + } + if (p->view.obj) { + e = (*v)(p->view.obj, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_memoryview(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + tmp = ((PyObject*)p->obj); + p->obj = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_size); + p->_size = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_array_interface); + p->_array_interface = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + Py_CLEAR(p->view.obj); + return 0; +} +static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_memoryview___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o); +} + +static PyMethodDef __pyx_methods_memoryview[] = { + {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0}, + {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0}, + {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0}, + {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_memoryview[] = { + {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, (char *)0, 0}, + {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, (char *)0, 0}, + {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, (char *)0, 0}, + {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, (char *)0, 0}, + {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, (char *)0, 0}, + {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, (char *)0, 0}, + {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, (char *)0, 0}, + {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, (char *)0, 0}, + {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_memoryview = { + __pyx_memoryview___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_memoryview, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_memoryview = { + __pyx_memoryview___len__, /*mp_length*/ + __pyx_memoryview___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_memoryview = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_memoryview_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_memoryview = { + PyVarObject_HEAD_INIT(0, 0) + "mst.memoryview", /*tp_name*/ + sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_memoryview, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + __pyx_memoryview___repr__, /*tp_repr*/ + 0, /*tp_as_number*/ + &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + __pyx_memoryview___str__, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_memoryview, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_memoryview, /*tp_traverse*/ + __pyx_tp_clear_memoryview, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_memoryview, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_memoryview, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_memoryview, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice; + +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryviewslice_obj *p; + PyObject *o = __pyx_tp_new_memoryview(t, a, k); + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryviewslice_obj *)o); + p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice; + p->from_object = Py_None; Py_INCREF(Py_None); + p->from_slice.memview = NULL; + return o; +} + +static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryviewslice___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->from_object); + PyObject_GC_Track(o); + __pyx_tp_dealloc_memoryview(o); +} + +static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e; + if (p->from_object) { + e = (*v)(p->from_object, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear__memoryviewslice(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + __pyx_tp_clear_memoryview(o); + tmp = ((PyObject*)p->from_object); + p->from_object = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + __PYX_XDEC_MEMVIEW(&p->from_slice, 1); + return 0; +} + +static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o); +} + +static PyMethodDef __pyx_methods__memoryviewslice[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = { + {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_memoryviewslice = { + PyVarObject_HEAD_INIT(0, 0) + "mst._memoryviewslice", /*tp_name*/ + sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___repr__, /*tp_repr*/ + #else + 0, /*tp_repr*/ + #endif + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___str__, /*tp_str*/ + #else + 0, /*tp_str*/ + #endif + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + "Internal class for passing memoryview slices to Python", /*tp_doc*/ + __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/ + __pyx_tp_clear__memoryviewslice, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods__memoryviewslice, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets__memoryviewslice, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new__memoryviewslice, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {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_mst(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_mst}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "mst", + __pyx_k_MST_algorithm_Adapted_from_scip, /* 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 +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 1}, + {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1}, + {&__pyx_n_s_B, __pyx_k_B, sizeof(__pyx_k_B), 0, 0, 1, 1}, + {&__pyx_n_s_B_2, __pyx_k_B_2, sizeof(__pyx_k_B_2), 0, 0, 1, 1}, + {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0}, + {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0}, + {&__pyx_kp_s_Cannot_assign_to_read_only_memor, __pyx_k_Cannot_assign_to_read_only_memor, sizeof(__pyx_k_Cannot_assign_to_read_only_memor), 0, 0, 1, 0}, + {&__pyx_kp_s_Cannot_create_writable_memory_vi, __pyx_k_Cannot_create_writable_memory_vi, sizeof(__pyx_k_Cannot_create_writable_memory_vi), 0, 0, 1, 0}, + {&__pyx_kp_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0}, + {&__pyx_n_s_D, __pyx_k_D, sizeof(__pyx_k_D), 0, 0, 1, 1}, + {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1}, + {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0}, + {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0}, + {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0}, + {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_k_Incompatible_checksums_s_vs_0xb0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb0), 0, 0, 1, 0}, + {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, + {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0}, + {&__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0}, + {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0}, + {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1}, + {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0}, + {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0}, + {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0}, + {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, + {&__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 0, 1, 0}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, + {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1}, + {&__pyx_n_s_Z, __pyx_k_Z, sizeof(__pyx_k_Z), 0, 0, 1, 1}, + {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_argsort, __pyx_k_argsort, sizeof(__pyx_k_argsort), 0, 0, 1, 1}, + {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, + {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, + {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1}, + {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 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_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0}, + {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0}, + {&__pyx_n_s_current_max, __pyx_k_current_max, sizeof(__pyx_k_current_max), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_s_dist, __pyx_k_dist, sizeof(__pyx_k_dist), 0, 0, 1, 1}, + {&__pyx_n_s_dists, __pyx_k_dists, sizeof(__pyx_k_dists), 0, 0, 1, 1}, + {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, + {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, + {&__pyx_n_s_empty, __pyx_k_empty, sizeof(__pyx_k_empty), 0, 0, 1, 1}, + {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, + {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, + {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, + {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, + {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1}, + {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_idx, __pyx_k_idx, sizeof(__pyx_k_idx), 0, 0, 1, 1}, + {&__pyx_n_s_ij, __pyx_k_ij, sizeof(__pyx_k_ij), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_int, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1}, + {&__pyx_n_s_intc, __pyx_k_intc, sizeof(__pyx_k_intc), 0, 0, 1, 1}, + {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, + {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0}, + {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, + {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, + {&__pyx_n_s_kind, __pyx_k_kind, sizeof(__pyx_k_kind), 0, 0, 1, 1}, + {&__pyx_n_s_l, __pyx_k_l, sizeof(__pyx_k_l), 0, 0, 1, 1}, + {&__pyx_n_s_l_2, __pyx_k_l_2, sizeof(__pyx_k_l_2), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, + {&__pyx_n_s_merged, __pyx_k_merged, sizeof(__pyx_k_merged), 0, 0, 1, 1}, + {&__pyx_n_u_mergesort, __pyx_k_mergesort, sizeof(__pyx_k_mergesort), 0, 1, 0, 1}, + {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, + {&__pyx_n_s_mst, __pyx_k_mst, sizeof(__pyx_k_mst), 0, 0, 1, 1}, + {&__pyx_kp_s_mst_pyx, __pyx_k_mst_pyx, sizeof(__pyx_k_mst_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, + {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0}, + {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0}, + {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0}, + {&__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_u_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 1, 0, 0}, + {&__pyx_kp_u_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 1, 0, 0}, + {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, + {&__pyx_n_s_order, __pyx_k_order, sizeof(__pyx_k_order), 0, 0, 1, 1}, + {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, + {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_n_s_reorder, __pyx_k_reorder, sizeof(__pyx_k_reorder), 0, 0, 1, 1}, + {&__pyx_n_s_row, __pyx_k_row, sizeof(__pyx_k_row), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, + {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, + {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, + {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1}, + {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, + {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0}, + {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0}, + {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0}, + {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1}, + {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 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} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 50, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 272, __pyx_L1_error) + __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(1, 855, __pyx_L1_error) + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 1037, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(2, 148, __pyx_L1_error) + __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(2, 151, __pyx_L1_error) + __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(2, 2, __pyx_L1_error) + __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(2, 404, __pyx_L1_error) + __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(2, 613, __pyx_L1_error) + __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(2, 832, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "mst.pyx":76 + * + * # Sort Z by distances + * order = np.argsort(l, kind='mergesort')[::-1] # <<<<<<<<<<<<<< + * ij = ij[order] + * l = l[order] + */ + __pyx_slice_ = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice_)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice_); + __Pyx_GIVEREF(__pyx_slice_); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":272 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":276 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":306 + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 306, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":855 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == c'>' and little_endian) or + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":879 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 879, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1037 + * _import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 1037, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1043 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(2, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(2, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(2, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(2, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_GIVEREF(__pyx_tuple__12); + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(2, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_GIVEREF(__pyx_tuple__13); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(2, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__15); + __Pyx_GIVEREF(__pyx_tuple__15); + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(2, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__16); + __Pyx_GIVEREF(__pyx_tuple__16); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(2, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(2, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(2, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__19); + __Pyx_GIVEREF(__pyx_tuple__19); + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __pyx_tuple__20 = PyTuple_New(1); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(2, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__20); + __Pyx_INCREF(__pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_int_neg_1); + PyTuple_SET_ITEM(__pyx_tuple__20, 0, __pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_tuple__20); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(2, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__21); + __Pyx_GIVEREF(__pyx_tuple__21); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__22); + __Pyx_GIVEREF(__pyx_tuple__22); + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_slice__23 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__23)) __PYX_ERR(2, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__23); + __Pyx_GIVEREF(__pyx_slice__23); + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(2, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__24); + __Pyx_GIVEREF(__pyx_tuple__24); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(2, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__26); + __Pyx_GIVEREF(__pyx_tuple__26); + + /* "mst.pyx":16 + * NPY_INFINITYF + * + * def mst(double[:,:] dists, int n): # <<<<<<<<<<<<<< + * """ MAXIMUM Spanning Tree of a dense adjacency matrix using Prim's Algorithm + * Parameters + */ + __pyx_tuple__27 = PyTuple_Pack(16, __pyx_n_s_dists, __pyx_n_s_n, __pyx_n_s_ij, __pyx_n_s_Z, __pyx_n_s_l, __pyx_n_s_l_2, __pyx_n_s_merged, __pyx_n_s_D, __pyx_n_s_j, __pyx_n_s_i, __pyx_n_s_k, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_dist, __pyx_n_s_current_max, __pyx_n_s_order); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mst_pyx, __pyx_n_s_mst, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 16, __pyx_L1_error) + + /* "mst.pyx":85 + * return ij, l + * + * def reorder(double[:,:] A, long[:] idx, int n): # <<<<<<<<<<<<<< + * """ + * A : (n, n) + */ + __pyx_tuple__29 = PyTuple_Pack(9, __pyx_n_s_A, __pyx_n_s_idx, __pyx_n_s_n, __pyx_n_s_B, __pyx_n_s_B_2, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_row); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__29); + __Pyx_GIVEREF(__pyx_tuple__29); + __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mst_pyx, __pyx_n_s_reorder, 85, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 85, __pyx_L1_error) + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(2, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(2, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(2, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__33); + __Pyx_GIVEREF(__pyx_tuple__33); + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(2, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__34); + __Pyx_GIVEREF(__pyx_tuple__34); + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(2, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__36 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__36); + __Pyx_GIVEREF(__pyx_tuple__36); + __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +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 ---*/ + generic = Py_None; Py_INCREF(Py_None); + strided = Py_None; Py_INCREF(Py_None); + indirect = Py_None; Py_INCREF(Py_None); + contiguous = Py_None; Py_INCREF(Py_None); + indirect_contiguous = Py_None; Py_INCREF(Py_None); + __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 + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __pyx_vtabptr_array = &__pyx_vtable_array; + __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; + if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(2, 105, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_array.tp_print = 0; + #endif + if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(2, 105, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(2, 105, __pyx_L1_error) + __pyx_array_type = &__pyx_type___pyx_array; + if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(2, 279, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_MemviewEnum.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(2, 279, __pyx_L1_error) + __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum; + __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview; + __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer; + __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice; + __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment; + __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar; + __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed; + __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object; + __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object; + if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(2, 330, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryview.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(2, 330, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(2, 330, __pyx_L1_error) + __pyx_memoryview_type = &__pyx_type___pyx_memoryview; + __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice; + __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview; + __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object; + __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object; + __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type; + if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(2, 965, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryviewslice.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(2, 965, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(2, 965, __pyx_L1_error) + __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +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(3, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 + sizeof(PyTypeObject), + #else + sizeof(PyHeapTypeObject), + #endif + __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 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, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_5numpy_dtype = __Pyx_ImportType(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __Pyx_ImportType_CheckSize_Ignore); + if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(1, 206, __pyx_L1_error) + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(1, 229, __pyx_L1_error) + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(1, 233, __pyx_L1_error) + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __Pyx_ImportType_CheckSize_Ignore); + if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(1, 242, __pyx_L1_error) + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(1, 917, __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; +} + + +#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 initmst(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initmst(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_mst(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_mst(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; +} +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) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + 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, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + 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; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + 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_mst(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + static PyThread_type_lock __pyx_t_2[8]; + 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 'mst' 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 + #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_mst(void)", 0); + if (__Pyx_check_binary_version() < 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() < 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) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 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) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 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) + #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? */ + 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("mst", __pyx_methods, __pyx_k_MST_algorithm_Adapted_from_scip, 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_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_mst) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __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, "mst")) { + if (unlikely(PyDict_SetItemString(modules, "mst", __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(); + if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + 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 + + /* "mst.pyx":7 + * # from libc.stdlib cimport malloc, free + * + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * # ctypedef np.int_t DTYPE_t + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "mst.pyx":16 + * NPY_INFINITYF + * + * def mst(double[:,:] dists, int n): # <<<<<<<<<<<<<< + * """ MAXIMUM Spanning Tree of a dense adjacency matrix using Prim's Algorithm + * Parameters + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3mst_1mst, NULL, __pyx_n_s_mst); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_mst, __pyx_t_1) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "mst.pyx":85 + * return ij, l + * + * def reorder(double[:,:] A, long[:] idx, int n): # <<<<<<<<<<<<<< + * """ + * A : (n, n) + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3mst_3reorder, NULL, __pyx_n_s_mst); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_reorder, __pyx_t_1) < 0) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "mst.pyx":1 + * # cython: boundscheck=False, wraparound=False, cdivision=True # <<<<<<<<<<<<<< + * """ MST algorithm. Adapted from scipy.cluster._hierarchy.pyx """ + * + */ + __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; + + /* "View.MemoryView":209 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * def __dealloc__(array self): + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(2, 209, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_array_type); + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(generic); + __Pyx_DECREF_SET(generic, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(strided); + __Pyx_DECREF_SET(strided, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(indirect); + __Pyx_DECREF_SET(indirect, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(contiguous); + __Pyx_DECREF_SET(contiguous, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(indirect_contiguous); + __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":316 + * + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ + * PyThread_allocate_lock(), + */ + __pyx_memoryview_thread_locks_used = 0; + + /* "View.MemoryView":317 + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< + * PyThread_allocate_lock(), + * PyThread_allocate_lock(), + */ + __pyx_t_2[0] = PyThread_allocate_lock(); + __pyx_t_2[1] = PyThread_allocate_lock(); + __pyx_t_2[2] = PyThread_allocate_lock(); + __pyx_t_2[3] = PyThread_allocate_lock(); + __pyx_t_2[4] = PyThread_allocate_lock(); + __pyx_t_2[5] = PyThread_allocate_lock(); + __pyx_t_2[6] = PyThread_allocate_lock(); + __pyx_t_2[7] = PyThread_allocate_lock(); + memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_2, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); + + /* "View.MemoryView":549 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(2, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_memoryview_type); + + /* "View.MemoryView":995 + * return self.from_object + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 995, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(2, 995, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_memoryviewslice_type); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init mst", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init mst"); + } + __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 +} + +/* --- 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 + +/* 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 + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + 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; +} + +/* 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"; + } + if (exact) { + more_or_less = "exactly"; + } + 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); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + 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 +} + +/* 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_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 + (__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; + 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; + } + } + 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; +} + +/* 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 + 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; + } +#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); +} + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + 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 + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + 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); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { + PyObject *runerr; + Py_ssize_t key_value; + PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; + if (unlikely(!(m && m->sq_item))) { + PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); + return NULL; + } + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { + PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; + if (likely(m && m->mp_subscript)) { + return m->mp_subscript(obj, key); + } + return __Pyx_PyObject_GetIndex(obj, key); +} +#endif + +/* MemviewSliceInit */ +static int +__Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference) +{ + __Pyx_RefNannyDeclarations + int i, retval=-1; + Py_buffer *buf = &memview->view; + __Pyx_RefNannySetupContext("init_memviewslice", 0); + if (unlikely(memviewslice->memview || memviewslice->data)) { + PyErr_SetString(PyExc_ValueError, + "memviewslice is already initialized!"); + goto fail; + } + if (buf->strides) { + for (i = 0; i < ndim; i++) { + memviewslice->strides[i] = buf->strides[i]; + } + } else { + Py_ssize_t stride = buf->itemsize; + for (i = ndim - 1; i >= 0; i--) { + memviewslice->strides[i] = stride; + stride *= buf->shape[i]; + } + } + for (i = 0; i < ndim; i++) { + memviewslice->shape[i] = buf->shape[i]; + if (buf->suboffsets) { + memviewslice->suboffsets[i] = buf->suboffsets[i]; + } else { + memviewslice->suboffsets[i] = -1; + } + } + memviewslice->memview = memview; + memviewslice->data = (char *)buf->buf; + if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) { + Py_INCREF(memview); + } + retval = 0; + goto no_fail; +fail: + memviewslice->memview = 0; + memviewslice->data = 0; + retval = -1; +no_fail: + __Pyx_RefNannyFinishContext(); + return retval; +} +#ifndef Py_NO_RETURN +#define Py_NO_RETURN +#endif +static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN { + va_list vargs; + char msg[200]; +#ifdef HAVE_STDARG_PROTOTYPES + va_start(vargs, fmt); +#else + va_start(vargs); +#endif + vsnprintf(msg, 200, fmt, vargs); + va_end(vargs); + Py_FatalError(msg); +} +static CYTHON_INLINE int +__pyx_add_acquisition_count_locked(__pyx_atomic_int *acquisition_count, + PyThread_type_lock lock) +{ + int result; + PyThread_acquire_lock(lock, 1); + result = (*acquisition_count)++; + PyThread_release_lock(lock); + return result; +} +static CYTHON_INLINE int +__pyx_sub_acquisition_count_locked(__pyx_atomic_int *acquisition_count, + PyThread_type_lock lock) +{ + int result; + PyThread_acquire_lock(lock, 1); + result = (*acquisition_count)--; + PyThread_release_lock(lock); + return result; +} +static CYTHON_INLINE void +__Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) +{ + int first_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) + return; + if (unlikely(__pyx_get_slice_count(memview) < 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + first_time = __pyx_add_acquisition_count(memview) == 0; + if (unlikely(first_time)) { + if (have_gil) { + Py_INCREF((PyObject *) memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_INCREF((PyObject *) memview); + PyGILState_Release(_gilstate); + } + } +} +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice, + int have_gil, int lineno) { + int last_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + memslice->memview = NULL; + return; + } + if (unlikely(__pyx_get_slice_count(memview) <= 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + last_time = __pyx_sub_acquisition_count(memview) == 1; + memslice->data = NULL; + if (unlikely(last_time)) { + if (have_gil) { + Py_CLEAR(memslice->memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_CLEAR(memslice->memview); + PyGILState_Release(_gilstate); + } + } else { + memslice->memview = NULL; + } +} + +/* 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); +} +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; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + 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 CYTHON_COMPILING_IN_PYPY + 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); +#else + 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); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* DictGetItem */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_type == NULL || exc_info->exc_type == 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 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + #endif + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + 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 + +/* 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; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#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, *local_value, *local_tb; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + 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; +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if 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; + 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; + } + #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; +} + +/* 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); + } +#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 + 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 +} + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* decode_c_string */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { + Py_ssize_t length; + if (unlikely((start < 0) | (stop < 0))) { + size_t slen = strlen(cstring); + if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, + "c-string too long to convert to Python"); + return NULL; + } + length = (Py_ssize_t) slen; + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + stop += length; + } + if (unlikely(stop <= start)) + return __Pyx_NewRef(__pyx_empty_unicode); + length = stop - start; + cstring += start; + if (decode_func) { + return decode_func(cstring, length, errors); + } else { + return PyUnicode_Decode(cstring, length, encoding, errors); + } +} + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r = __Pyx_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + 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 + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* 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 ((1) && (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 + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + 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); +} +#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) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#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= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + const digit* digits = ((PyLongObject*)op1)->ob_digit; + const Py_ssize_t size = Py_SIZE(op1); + if (likely(__Pyx_sst_abs(size) <= 1)) { + a = likely(size) ? digits[0] : 0; + if (size == -1) a = -a; + } else { + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; +#ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; +#endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; +#ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; +#endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; +#ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; +#endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; +#ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; +#endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; +#ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; +#endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; +#ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; +#endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; + double a = PyFloat_AS_DOUBLE(op1); + double result; + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* None */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* HasAttr */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (unlikely(!r)) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PyObject_GenericGetAttr */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { + if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { + return PyObject_GenericGetAttr(obj, attr_name); + } + return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +} +#endif + +/* SetVTable */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable) { +#if PY_VERSION_HEX >= 0x02070000 + PyObject *ob = PyCapsule_New(vtable, 0, 0); +#else + PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); +#endif + if (!ob) + goto bad; + if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; +} + +/* PyObjectGetAttrStrNoError */ +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#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; +} + +/* SetupReduce */ +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2); + if (likely(name_attr)) { + ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); + } else { + ret = -1; + } + if (unlikely(ret < 0)) { + PyErr_Clear(); + ret = 0; + } + Py_XDECREF(name_attr); + return ret; +} +static int __Pyx_setup_reduce(PyObject* type_obj) { + int ret = 0; + PyObject *object_reduce = NULL; + PyObject *object_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#endif +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#else + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#endif + reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; + if (reduce_ex == object_reduce_ex) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#endif + reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; + if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { + reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); + if (likely(reduce_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (reduce == object_reduce || PyErr_Occurred()) { + goto __PYX_BAD; + } + setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); + if (!setstate) PyErr_Clear(); + if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { + setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); + if (likely(setstate_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (!setstate || PyErr_Occurred()) { + goto __PYX_BAD; + } + } + PyType_Modified((PyTypeObject*)type_obj); + } + } + goto __PYX_GOOD; +__PYX_BAD: + if (!PyErr_Occurred()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* TypeImport */ +#ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, + size_t size, enum __Pyx_ImportType_CheckSize check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; +#ifdef Py_LIMITED_API + PyObject *py_basicsize; +#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; + } +#ifndef Py_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; +#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; +#endif + if ((size_t)basicsize < 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); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != 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); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn && (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 + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + 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_GetAttrStr(__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; + 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 */ +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); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +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; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 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); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + 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; + 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) { + 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); +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); + if (__Pyx_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags); + if (__Pyx_TypeCheck(obj, __pyx_array_type)) return __pyx_array_getbuffer(obj, view, flags); + if (__Pyx_TypeCheck(obj, __pyx_memoryview_type)) return __pyx_memoryview_getbuffer(obj, view, flags); + PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_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)) {} + else if (__Pyx_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); + view->obj = NULL; + Py_DECREF(obj); +} +#endif + + +/* MemviewSliceIsContig */ +static int +__pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim) +{ + int i, index, step, start; + Py_ssize_t itemsize = mvs.memview->view.itemsize; + if (order == 'F') { + step = 1; + start = 0; + } else { + step = -1; + start = ndim - 1; + } + for (i = 0; i < ndim; i++) { + index = start + step * i; + if (mvs.suboffsets[index] >= 0 || mvs.strides[index] != itemsize) + return 0; + itemsize *= mvs.shape[index]; + } + return 1; +} + +/* OverlappingSlices */ +static void +__pyx_get_array_memory_extents(__Pyx_memviewslice *slice, + void **out_start, void **out_end, + int ndim, size_t itemsize) +{ + char *start, *end; + int i; + start = end = slice->data; + for (i = 0; i < ndim; i++) { + Py_ssize_t stride = slice->strides[i]; + Py_ssize_t extent = slice->shape[i]; + if (extent == 0) { + *out_start = *out_end = start; + return; + } else { + if (stride > 0) + end += stride * (extent - 1); + else + start += stride * (extent - 1); + } + } + *out_start = start; + *out_end = end + itemsize; +} +static int +__pyx_slices_overlap(__Pyx_memviewslice *slice1, + __Pyx_memviewslice *slice2, + int ndim, size_t itemsize) +{ + void *start1, *end1, *start2, *end2; + __pyx_get_array_memory_extents(slice1, &start1, &end1, ndim, itemsize); + __pyx_get_array_memory_extents(slice2, &start2, &end2, ndim, itemsize); + return (start1 < end2) && (start2 < end1); +} + +/* Capsule */ +static CYTHON_INLINE PyObject * +__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig) +{ + PyObject *cobj; +#if PY_VERSION_HEX >= 0x02070000 + cobj = PyCapsule_New(p, sig, NULL); +#else + cobj = PyCObject_FromVoidPtr(p, NULL); +#endif + return cobj; +} + +/* 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 "unparseable 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, CYTHON_UNUSED int 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, CYTHON_UNUSED int 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 PyObject * +__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 NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + 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 NULL; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) + return PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + if (*ts != ',' && *ts != ')') + return PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + if (*ts == ',') ts++; + i++; + } + if (i != ndim) + return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return NULL; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return Py_None; +} +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)) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} + +/* TypeInfoCompare */ + static int +__pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b) +{ + int i; + if (!a || !b) + return 0; + if (a == b) + return 1; + if (a->size != b->size || a->typegroup != b->typegroup || + a->is_unsigned != b->is_unsigned || a->ndim != b->ndim) { + if (a->typegroup == 'H' || b->typegroup == 'H') { + return a->size == b->size; + } else { + return 0; + } + } + if (a->ndim) { + for (i = 0; i < a->ndim; i++) + if (a->arraysize[i] != b->arraysize[i]) + return 0; + } + if (a->typegroup == 'S') { + if (a->flags != b->flags) + return 0; + if (a->fields || b->fields) { + if (!(a->fields && b->fields)) + return 0; + for (i = 0; a->fields[i].type && b->fields[i].type; i++) { + __Pyx_StructField *field_a = a->fields + i; + __Pyx_StructField *field_b = b->fields + i; + if (field_a->offset != field_b->offset || + !__pyx_typeinfo_cmp(field_a->type, field_b->type)) + return 0; + } + return !a->fields[i].type && !b->fields[i].type; + } + } + return 1; +} + +/* MemviewSliceValidateAndInit */ + static int +__pyx_check_strides(Py_buffer *buf, int dim, int ndim, int spec) +{ + if (buf->shape[dim] <= 1) + return 1; + if (buf->strides) { + if (spec & __Pyx_MEMVIEW_CONTIG) { + if (spec & (__Pyx_MEMVIEW_PTR|__Pyx_MEMVIEW_FULL)) { + if (unlikely(buf->strides[dim] != sizeof(void *))) { + PyErr_Format(PyExc_ValueError, + "Buffer is not indirectly contiguous " + "in dimension %d.", dim); + goto fail; + } + } else if (unlikely(buf->strides[dim] != buf->itemsize)) { + PyErr_SetString(PyExc_ValueError, + "Buffer and memoryview are not contiguous " + "in the same dimension."); + goto fail; + } + } + if (spec & __Pyx_MEMVIEW_FOLLOW) { + Py_ssize_t stride = buf->strides[dim]; + if (stride < 0) + stride = -stride; + if (unlikely(stride < buf->itemsize)) { + PyErr_SetString(PyExc_ValueError, + "Buffer and memoryview are not contiguous " + "in the same dimension."); + goto fail; + } + } + } else { + if (unlikely(spec & __Pyx_MEMVIEW_CONTIG && dim != ndim - 1)) { + PyErr_Format(PyExc_ValueError, + "C-contiguous buffer is not contiguous in " + "dimension %d", dim); + goto fail; + } else if (unlikely(spec & (__Pyx_MEMVIEW_PTR))) { + PyErr_Format(PyExc_ValueError, + "C-contiguous buffer is not indirect in " + "dimension %d", dim); + goto fail; + } else if (unlikely(buf->suboffsets)) { + PyErr_SetString(PyExc_ValueError, + "Buffer exposes suboffsets but no strides"); + goto fail; + } + } + return 1; +fail: + return 0; +} +static int +__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec) +{ + if (spec & __Pyx_MEMVIEW_DIRECT) { + if (unlikely(buf->suboffsets && buf->suboffsets[dim] >= 0)) { + PyErr_Format(PyExc_ValueError, + "Buffer not compatible with direct access " + "in dimension %d.", dim); + goto fail; + } + } + if (spec & __Pyx_MEMVIEW_PTR) { + if (unlikely(!buf->suboffsets || (buf->suboffsets[dim] < 0))) { + PyErr_Format(PyExc_ValueError, + "Buffer is not indirectly accessible " + "in dimension %d.", dim); + goto fail; + } + } + return 1; +fail: + return 0; +} +static int +__pyx_verify_contig(Py_buffer *buf, int ndim, int c_or_f_flag) +{ + int i; + if (c_or_f_flag & __Pyx_IS_F_CONTIG) { + Py_ssize_t stride = 1; + for (i = 0; i < ndim; i++) { + if (unlikely(stride * buf->itemsize != buf->strides[i] && buf->shape[i] > 1)) { + PyErr_SetString(PyExc_ValueError, + "Buffer not fortran contiguous."); + goto fail; + } + stride = stride * buf->shape[i]; + } + } else if (c_or_f_flag & __Pyx_IS_C_CONTIG) { + Py_ssize_t stride = 1; + for (i = ndim - 1; i >- 1; i--) { + if (unlikely(stride * buf->itemsize != buf->strides[i] && buf->shape[i] > 1)) { + PyErr_SetString(PyExc_ValueError, + "Buffer not C contiguous."); + goto fail; + } + stride = stride * buf->shape[i]; + } + } + return 1; +fail: + return 0; +} +static int __Pyx_ValidateAndInit_memviewslice( + int *axes_specs, + int c_or_f_flag, + int buf_flags, + int ndim, + __Pyx_TypeInfo *dtype, + __Pyx_BufFmt_StackElem stack[], + __Pyx_memviewslice *memviewslice, + PyObject *original_obj) +{ + struct __pyx_memoryview_obj *memview, *new_memview; + __Pyx_RefNannyDeclarations + Py_buffer *buf; + int i, spec = 0, retval = -1; + __Pyx_BufFmt_Context ctx; + int from_memoryview = __pyx_memoryview_check(original_obj); + __Pyx_RefNannySetupContext("ValidateAndInit_memviewslice", 0); + if (from_memoryview && __pyx_typeinfo_cmp(dtype, ((struct __pyx_memoryview_obj *) + original_obj)->typeinfo)) { + memview = (struct __pyx_memoryview_obj *) original_obj; + new_memview = NULL; + } else { + memview = (struct __pyx_memoryview_obj *) __pyx_memoryview_new( + original_obj, buf_flags, 0, dtype); + new_memview = memview; + if (unlikely(!memview)) + goto fail; + } + buf = &memview->view; + if (unlikely(buf->ndim != ndim)) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + ndim, buf->ndim); + goto fail; + } + if (new_memview) { + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (unlikely(!__Pyx_BufFmt_CheckString(&ctx, buf->format))) goto fail; + } + if (unlikely((unsigned) buf->itemsize != dtype->size)) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "u byte%s) " + "does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "u byte%s)", + buf->itemsize, + (buf->itemsize > 1) ? "s" : "", + dtype->name, + dtype->size, + (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->len > 0) { + for (i = 0; i < ndim; i++) { + spec = axes_specs[i]; + if (unlikely(!__pyx_check_strides(buf, i, ndim, spec))) + goto fail; + if (unlikely(!__pyx_check_suboffsets(buf, i, ndim, spec))) + goto fail; + } + if (unlikely(buf->strides && !__pyx_verify_contig(buf, ndim, c_or_f_flag))) + goto fail; + } + if (unlikely(__Pyx_init_memviewslice(memview, ndim, memviewslice, + new_memview != NULL) == -1)) { + goto fail; + } + retval = 0; + goto no_fail; +fail: + Py_XDECREF(new_memview); + retval = -1; +no_fail: + __Pyx_RefNannyFinishContext(); + return retval; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_double(PyObject *obj, int writable_flag) { + __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_BufFmt_StackElem stack[1]; + int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 2, + &__Pyx_TypeInfo_double, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* 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;\ + } + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_long(PyObject *obj, int writable_flag) { + __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_BufFmt_StackElem stack[1]; + int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_long, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* 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 + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* 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); + } +} + +/* Declarations */ + #if CYTHON_CCOMPLEX + #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 +#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) { + 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 + #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 +#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) { + 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 + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value) { + const enum NPY_TYPES neg_one = (enum NPY_TYPES) ((enum NPY_TYPES) 0 - (enum NPY_TYPES) 1), const_zero = (enum NPY_TYPES) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(enum NPY_TYPES) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(enum NPY_TYPES) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(enum NPY_TYPES) <= 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(enum NPY_TYPES), + little, !is_unsigned); + } +} + +/* MemviewSliceCopyTemplate */ + static __Pyx_memviewslice +__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, + const char *mode, int ndim, + size_t sizeof_dtype, int contig_flag, + int dtype_is_object) +{ + __Pyx_RefNannyDeclarations + int i; + __Pyx_memviewslice new_mvs = { 0, 0, { 0 }, { 0 }, { 0 } }; + struct __pyx_memoryview_obj *from_memview = from_mvs->memview; + Py_buffer *buf = &from_memview->view; + PyObject *shape_tuple = NULL; + PyObject *temp_int = NULL; + struct __pyx_array_obj *array_obj = NULL; + struct __pyx_memoryview_obj *memview_obj = NULL; + __Pyx_RefNannySetupContext("__pyx_memoryview_copy_new_contig", 0); + for (i = 0; i < ndim; i++) { + if (unlikely(from_mvs->suboffsets[i] >= 0)) { + PyErr_Format(PyExc_ValueError, "Cannot copy memoryview slice with " + "indirect dimensions (axis %d)", i); + goto fail; + } + } + shape_tuple = PyTuple_New(ndim); + if (unlikely(!shape_tuple)) { + goto fail; + } + __Pyx_GOTREF(shape_tuple); + for(i = 0; i < ndim; i++) { + temp_int = PyInt_FromSsize_t(from_mvs->shape[i]); + if(unlikely(!temp_int)) { + goto fail; + } else { + PyTuple_SET_ITEM(shape_tuple, i, temp_int); + temp_int = NULL; + } + } + array_obj = __pyx_array_new(shape_tuple, sizeof_dtype, buf->format, (char *) mode, NULL); + if (unlikely(!array_obj)) { + goto fail; + } + __Pyx_GOTREF(array_obj); + memview_obj = (struct __pyx_memoryview_obj *) __pyx_memoryview_new( + (PyObject *) array_obj, contig_flag, + dtype_is_object, + from_mvs->memview->typeinfo); + if (unlikely(!memview_obj)) + goto fail; + if (unlikely(__Pyx_init_memviewslice(memview_obj, ndim, &new_mvs, 1) < 0)) + goto fail; + if (unlikely(__pyx_memoryview_copy_contents(*from_mvs, new_mvs, ndim, ndim, + dtype_is_object) < 0)) + goto fail; + goto no_fail; +fail: + __Pyx_XDECREF(new_mvs.memview); + new_mvs.memview = NULL; + new_mvs.data = NULL; +no_fail: + __Pyx_XDECREF(shape_tuple); + __Pyx_XDECREF(temp_int); + __Pyx_XDECREF(array_obj); + __Pyx_RefNannyFinishContext(); + return new_mvs; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + 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 + 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])); + } + } + 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 + 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 + 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]))); + } + } + 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 + } + } + { +#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 (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + 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); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + 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; +} + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + 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 + 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])); + } + } + 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 + 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 + 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]))); + } + } + 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 + } + } + { +#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 (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + 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); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + 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 char __Pyx_PyInt_As_char(PyObject *x) { + const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(char) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (char) val; + } + } else +#endif + 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 (char) 0; + case 1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0]) + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) { + return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) { + return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, 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(char) >= 4 * PyLong_SHIFT) { + return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + 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 (char) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(char) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, 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 (char) 0; + case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(char, digit, +digits[0]) + case -2: + if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, 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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, 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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + } +#endif + if (sizeof(char) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, 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 + char 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 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); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (char) -1; + } + } else { + char val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (char) -1; + val = __Pyx_PyInt_As_char(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to char"); + return (char) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to char"); + return (char) -1; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_long(PyObject *obj, int writable_flag) { + __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_BufFmt_StackElem stack[1]; + int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 2, + &__Pyx_TypeInfo_long, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_double(PyObject *obj, int writable_flag) { + __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_BufFmt_StackElem stack[1]; + int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_double, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_int(PyObject *obj, int writable_flag) { + __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_BufFmt_StackElem stack[1]; + int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_int, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* 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]) { + 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); + return PyErr_WarnEx(NULL, message, 1); + } + return 0; +} + +/* InitStrings */ + static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + 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); + } + #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; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +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) || (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) { +#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)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_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 + 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; + } else { + 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 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); +} + + +#endif /* Py_PYTHON_H */ diff --git a/mst/mst.cpython-37m-darwin.so b/mst/mst.cpython-37m-darwin.so new file mode 100755 index 0000000000000000000000000000000000000000..dae3ab91a278ca856c76f6c8dac8fb958662147d GIT binary patch literal 189124 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%0A=lk|C$@^HwN9~P57}q=+!s29s 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 literal 0 HcmV?d00001 diff --git a/mst/mst.html b/mst/mst.html new file mode 100644 index 0000000..466b7b2 --- /dev/null +++ b/mst/mst.html @@ -0,0 +1,1049 @@ + + + + + + Cython: mst.pyx + + + +

Generated by Cython 0.29.21

+

+ Yellow lines hint at Python interaction.
+ Click on a line that starts with a "+" to see the C code that Cython generated for it. +

+

Raw output: mst.c

+
+001: # cython: boundscheck=False, wraparound=False, cdivision=True
+
  __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;
+
 002: """ MST algorithm. Adapted from scipy.cluster._hierarchy.pyx """
+
 003: 
+
 004: cimport cython
+
 005: # from libc.stdlib cimport malloc, free
+
 006: 
+
+007: import numpy as np
+
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
 008: cimport numpy as np
+
 009: # ctypedef np.int_t DTYPE_t
+
 010: # cdef bint boolean_variable = True
+
 011: 
+
 012: cdef extern from "numpy/npy_math.h":
+
 013:     cdef enum:
+
 014:         NPY_INFINITYF
+
 015: 
+
+016: def mst(double[:,:] dists, int n):
+
/* Python wrapper */
+static PyObject *__pyx_pw_3mst_1mst(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_3mst_mst[] = " MAXIMUM Spanning Tree of a dense adjacency matrix using Prim's Algorithm\n    Parameters\n    ----------\n    dists : ndarray\n        A condensed matrix stores the pairwise distances of the observations.\n    n : int\n        The number of observations.\n    Returns\n    -------\n    Z : ndarray[int64],   shape (n-1, 2)\n    d : ndarray[float64], shape (n-1, 1)\n        Edges in the MST in sorted order; indices, lengths\n    ";
+static PyMethodDef __pyx_mdef_3mst_1mst = {"mst", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3mst_1mst, METH_VARARGS|METH_KEYWORDS, __pyx_doc_3mst_mst};
+static PyObject *__pyx_pw_3mst_1mst(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  __Pyx_memviewslice __pyx_v_dists = { 0, 0, { 0 }, { 0 }, { 0 } };
+  int __pyx_v_n;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("mst (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dists,&__pyx_n_s_n,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__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);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dists)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("mst", 1, 2, 2, 1); __PYX_ERR(0, 16, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mst") < 0)) __PYX_ERR(0, 16, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_dists = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dists.memview)) __PYX_ERR(0, 16, __pyx_L3_error)
+    __pyx_v_n = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 16, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("mst", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 16, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("mst.mst", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_3mst_mst(__pyx_self, __pyx_v_dists, __pyx_v_n);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_3mst_mst(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_dists, int __pyx_v_n) {
+  PyObject *__pyx_v_ij = NULL;
+  __Pyx_memviewslice __pyx_v_Z = { 0, 0, { 0 }, { 0 }, { 0 } };
+  PyObject *__pyx_v_l = NULL;
+  __Pyx_memviewslice __pyx_v_l_ = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_merged = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_D = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_j = { 0, 0, { 0 }, { 0 }, { 0 } };
+  int __pyx_v_i;
+  int __pyx_v_k;
+  int __pyx_v_x;
+  int __pyx_v_y;
+  double __pyx_v_dist;
+  double __pyx_v_current_max;
+  PyObject *__pyx_v_order = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("mst", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
+  __Pyx_AddTraceback("mst.mst", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_ij);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_Z, 1);
+  __Pyx_XDECREF(__pyx_v_l);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_l_, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_merged, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_D, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_j, 1);
+  __Pyx_XDECREF(__pyx_v_order);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_dists, 1);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+/* … */
+  __pyx_tuple__27 = PyTuple_Pack(16, __pyx_n_s_dists, __pyx_n_s_n, __pyx_n_s_ij, __pyx_n_s_Z, __pyx_n_s_l, __pyx_n_s_l_2, __pyx_n_s_merged, __pyx_n_s_D, __pyx_n_s_j, __pyx_n_s_i, __pyx_n_s_k, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_dist, __pyx_n_s_current_max, __pyx_n_s_order); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__27);
+  __Pyx_GIVEREF(__pyx_tuple__27);
+/* … */
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3mst_1mst, NULL, __pyx_n_s_mst); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mst, __pyx_t_1) < 0) __PYX_ERR(0, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mst_pyx, __pyx_n_s_mst, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 16, __pyx_L1_error)
+
 017:     """ MAXIMUM Spanning Tree of a dense adjacency matrix using Prim's Algorithm
+
 018:     Parameters
+
 019:     ----------
+
 020:     dists : ndarray
+
 021:         A condensed matrix stores the pairwise distances of the observations.
+
 022:     n : int
+
 023:         The number of observations.
+
 024:     Returns
+
 025:     -------
+
 026:     Z : ndarray[int64],   shape (n-1, 2)
+
 027:     d : ndarray[float64], shape (n-1, 1)
+
 028:         Edges in the MST in sorted order; indices, lengths
+
 029:     """
+
 030: 
+
+031:     ij = np.empty((n - 1, 2), dtype=np.int)
+
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyInt_From_long((__pyx_v_n - 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
+  __Pyx_INCREF(__pyx_int_2);
+  __Pyx_GIVEREF(__pyx_int_2);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
+  __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_int); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_ij = __pyx_t_5;
+  __pyx_t_5 = 0;
+
+032:     cdef long[:, :] Z = ij
+
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_long(__pyx_v_ij, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 32, __pyx_L1_error)
+  __pyx_v_Z = __pyx_t_6;
+  __pyx_t_6.memview = NULL;
+  __pyx_t_6.data = NULL;
+
+033:     l = np.empty(n-1)
+
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_n - 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = NULL;
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
+    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
+    if (likely(__pyx_t_2)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+      __Pyx_INCREF(__pyx_t_2);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_1, function);
+    }
+  }
+  __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_l = __pyx_t_5;
+  __pyx_t_5 = 0;
+
+034:     cdef double[:] l_ = l
+
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_l, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 34, __pyx_L1_error)
+  __pyx_v_l_ = __pyx_t_7;
+  __pyx_t_7.memview = NULL;
+  __pyx_t_7.data = NULL;
+
 035: 
+
 036:     # Which nodes were already merged.
+
+037:     cdef int[:] merged = np.zeros(n, dtype=np.intc)
+
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
+  __pyx_t_5 = 0;
+  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_intc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_merged = __pyx_t_8;
+  __pyx_t_8.memview = NULL;
+  __pyx_t_8.data = NULL;
+
 038: 
+
 039:     # Best distance of node i to current tree
+
+040:     cdef double[:] D = np.empty(n)
+
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_1 = NULL;
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
+    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
+    if (likely(__pyx_t_1)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_1);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_3, function);
+    }
+  }
+  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_v_D = __pyx_t_7;
+  __pyx_t_7.memview = NULL;
+  __pyx_t_7.data = NULL;
+
+041:     D[:] = -NPY_INFINITYF
+
  {
+      double __pyx_temp_scalar = (-NPY_INFINITYF);
+      {
+          Py_ssize_t __pyx_temp_extent_0 = __pyx_v_D.shape[0];
+          Py_ssize_t __pyx_temp_stride_0 = __pyx_v_D.strides[0];
+          char *__pyx_temp_pointer_0;
+          Py_ssize_t __pyx_temp_idx_0;
+          __pyx_temp_pointer_0 = __pyx_v_D.data;
+          for (__pyx_temp_idx_0 = 0; __pyx_temp_idx_0 < __pyx_temp_extent_0; __pyx_temp_idx_0++) {
+            *((double *) __pyx_temp_pointer_0) = __pyx_temp_scalar;
+            __pyx_temp_pointer_0 += __pyx_temp_stride_0;
+          }
+      }
+  }
+
+042:     cdef int[:] j = np.empty(n, dtype=np.intc)
+
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+  __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_intc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_int(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_j = __pyx_t_8;
+  __pyx_t_8.memview = NULL;
+  __pyx_t_8.data = NULL;
+
 043: 
+
 044:     cdef int i, k
+
+045:     cdef int x = 0 # The node just added to the tree
+
  __pyx_v_x = 0;
+
 046:     cdef int y # stores the next candidate node to add
+
 047:     cdef double dist, current_max
+
 048: 
+
 049:     # x = 0
+
+050:     for k in range(n - 1):
+
  __pyx_t_9 = (__pyx_v_n - 1);
+  __pyx_t_10 = __pyx_t_9;
+  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+    __pyx_v_k = __pyx_t_11;
+
+051:         merged[x] = 1
+
    __pyx_t_12 = __pyx_v_x;
+    *((int *) ( /* dim=0 */ (__pyx_v_merged.data + __pyx_t_12 * __pyx_v_merged.strides[0]) )) = 1;
+
+052:         current_max = -NPY_INFINITYF
+
    __pyx_v_current_max = (-NPY_INFINITYF);
+
+053:         for i in range(n):
+
    __pyx_t_13 = __pyx_v_n;
+    __pyx_t_14 = __pyx_t_13;
+    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+      __pyx_v_i = __pyx_t_15;
+
+054:             if merged[i] == 1:
+
      __pyx_t_12 = __pyx_v_i;
+      __pyx_t_16 = (((*((int *) ( /* dim=0 */ (__pyx_v_merged.data + __pyx_t_12 * __pyx_v_merged.strides[0]) ))) == 1) != 0);
+      if (__pyx_t_16) {
+/* … */
+      }
+
+055:                 continue
+
        goto __pyx_L5_continue;
+
 056: 
+
+057:             dist = dists[x,i]
+
      __pyx_t_12 = __pyx_v_x;
+      __pyx_t_17 = __pyx_v_i;
+      __pyx_v_dist = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_dists.data + __pyx_t_12 * __pyx_v_dists.strides[0]) ) + __pyx_t_17 * __pyx_v_dists.strides[1]) )));
+
+058:             if D[i] < dist:
+
      __pyx_t_17 = __pyx_v_i;
+      __pyx_t_16 = (((*((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_17 * __pyx_v_D.strides[0]) ))) < __pyx_v_dist) != 0);
+      if (__pyx_t_16) {
+/* … */
+      }
+
+059:                 D[i] = dist
+
        __pyx_t_17 = __pyx_v_i;
+        *((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_17 * __pyx_v_D.strides[0]) )) = __pyx_v_dist;
+
+060:                 j[i] = x
+
        __pyx_t_17 = __pyx_v_i;
+        *((int *) ( /* dim=0 */ (__pyx_v_j.data + __pyx_t_17 * __pyx_v_j.strides[0]) )) = __pyx_v_x;
+
 061: 
+
+062:             if current_max < D[i]:
+
      __pyx_t_17 = __pyx_v_i;
+      __pyx_t_16 = ((__pyx_v_current_max < (*((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_17 * __pyx_v_D.strides[0]) )))) != 0);
+      if (__pyx_t_16) {
+/* … */
+      }
+      __pyx_L5_continue:;
+    }
+
+063:                 current_max = D[i]
+
        __pyx_t_17 = __pyx_v_i;
+        __pyx_v_current_max = (*((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_17 * __pyx_v_D.strides[0]) )));
+
+064:                 y = i
+
        __pyx_v_y = __pyx_v_i;
+
 065:             # print(x, i, current_max)
+
 066: 
+
 067:         # for linkage, this works if you assign it x instead, but the proof is subtle
+
+068:         Z[k, 0] = j[y]
+
    __pyx_t_17 = __pyx_v_y;
+    __pyx_t_12 = __pyx_v_k;
+    __pyx_t_18 = 0;
+    *((long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_Z.data + __pyx_t_12 * __pyx_v_Z.strides[0]) ) + __pyx_t_18 * __pyx_v_Z.strides[1]) )) = (*((int *) ( /* dim=0 */ (__pyx_v_j.data + __pyx_t_17 * __pyx_v_j.strides[0]) )));
+
 069:         # Z[k, 0] = x
+
+070:         Z[k, 1] = y
+
    __pyx_t_17 = __pyx_v_k;
+    __pyx_t_18 = 1;
+    *((long *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_Z.data + __pyx_t_17 * __pyx_v_Z.strides[0]) ) + __pyx_t_18 * __pyx_v_Z.strides[1]) )) = __pyx_v_y;
+
 071:         # Z[k, 2] = current_min
+
+072:         l_[k] = current_max
+
    __pyx_t_18 = __pyx_v_k;
+    *((double *) ( /* dim=0 */ (__pyx_v_l_.data + __pyx_t_18 * __pyx_v_l_.strides[0]) )) = __pyx_v_current_max;
+
+073:         x = y
+
    __pyx_v_x = __pyx_v_y;
+  }
+
 074: 
+
 075:     # Sort Z by distances
+
+076:     order = np.argsort(l, kind='mergesort')[::-1]
+
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_argsort); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_v_l);
+  __Pyx_GIVEREF(__pyx_v_l);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_l);
+  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_kind, __pyx_n_u_mergesort) < 0) __PYX_ERR(0, 76, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_slice_); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_order = __pyx_t_5;
+  __pyx_t_5 = 0;
+/* … */
+  __pyx_slice_ = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice_)) __PYX_ERR(0, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice_);
+  __Pyx_GIVEREF(__pyx_slice_);
+
+077:     ij = ij[order]
+
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_ij, __pyx_v_order); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF_SET(__pyx_v_ij, __pyx_t_5);
+  __pyx_t_5 = 0;
+
+078:     l = l[order]
+
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_l, __pyx_v_order); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF_SET(__pyx_v_l, __pyx_t_5);
+  __pyx_t_5 = 0;
+
 079: 
+
 080:     # # Find correct cluster labels and compute cluster sizes inplace.
+
 081:     # label(ij, n)
+
 082: 
+
+083:     return ij, l
+
  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 83, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_INCREF(__pyx_v_ij);
+  __Pyx_GIVEREF(__pyx_v_ij);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_ij);
+  __Pyx_INCREF(__pyx_v_l);
+  __Pyx_GIVEREF(__pyx_v_l);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_l);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
 084: 
+
+085: def reorder(double[:,:] A, long[:] idx, int n):
+
/* Python wrapper */
+static PyObject *__pyx_pw_3mst_3reorder(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_3mst_2reorder[] = "\n    A : (n, n)\n    idx: (n)\n    ";
+static PyMethodDef __pyx_mdef_3mst_3reorder = {"reorder", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_3mst_3reorder, METH_VARARGS|METH_KEYWORDS, __pyx_doc_3mst_2reorder};
+static PyObject *__pyx_pw_3mst_3reorder(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  __Pyx_memviewslice __pyx_v_A = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_idx = { 0, 0, { 0 }, { 0 }, { 0 } };
+  int __pyx_v_n;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("reorder (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_idx,&__pyx_n_s_n,0};
+    PyObject* values[3] = {0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("reorder", 1, 3, 3, 1); __PYX_ERR(0, 85, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("reorder", 1, 3, 3, 2); __PYX_ERR(0, 85, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reorder") < 0)) __PYX_ERR(0, 85, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+    }
+    __pyx_v_A = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_A.memview)) __PYX_ERR(0, 85, __pyx_L3_error)
+    __pyx_v_idx = __Pyx_PyObject_to_MemoryviewSlice_ds_long(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_idx.memview)) __PYX_ERR(0, 85, __pyx_L3_error)
+    __pyx_v_n = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 85, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("reorder", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 85, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("mst.reorder", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_3mst_2reorder(__pyx_self, __pyx_v_A, __pyx_v_idx, __pyx_v_n);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_3mst_2reorder(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_A, __Pyx_memviewslice __pyx_v_idx, int __pyx_v_n) {
+  PyObject *__pyx_v_B = NULL;
+  __Pyx_memviewslice __pyx_v_B_ = { 0, 0, { 0 }, { 0 }, { 0 } };
+  int __pyx_v_i;
+  int __pyx_v_j;
+  int __pyx_v_k;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("reorder", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
+  __Pyx_AddTraceback("mst.reorder", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_B);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_B_, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_A, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_idx, 1);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+/* … */
+  __pyx_tuple__29 = PyTuple_Pack(9, __pyx_n_s_A, __pyx_n_s_idx, __pyx_n_s_n, __pyx_n_s_B, __pyx_n_s_B_2, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_row); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 85, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__29);
+  __Pyx_GIVEREF(__pyx_tuple__29);
+/* … */
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3mst_3reorder, NULL, __pyx_n_s_mst); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_reorder, __pyx_t_1) < 0) __PYX_ERR(0, 85, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mst_pyx, __pyx_n_s_reorder, 85, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 85, __pyx_L1_error)
+
 086:     """
+
 087:     A : (n, n)
+
 088:     idx: (n)
+
 089:     """
+
+090:     B = np.empty((n, n))
+
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
+  __pyx_t_2 = 0;
+  __pyx_t_4 = 0;
+  __pyx_t_4 = NULL;
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
+    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+    if (likely(__pyx_t_4)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_4);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_3, function);
+    }
+  }
+  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_B = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+091:     cdef double[:,:] B_ = B
+
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_double(__pyx_v_B, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 91, __pyx_L1_error)
+  __pyx_v_B_ = __pyx_t_6;
+  __pyx_t_6.memview = NULL;
+  __pyx_t_6.data = NULL;
+
 092:     cdef int i, j, k
+
 093:     cdef double[:] row
+
+094:     for i in range(n):
+
  __pyx_t_7 = __pyx_v_n;
+  __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;
+
+095:         k = idx[i]
+
    __pyx_t_10 = __pyx_v_i;
+    __pyx_v_k = (*((long *) ( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_10 * __pyx_v_idx.strides[0]) )));
+
 096:         # row = A[k]
+
+097:         for j in range(n):
+
    __pyx_t_11 = __pyx_v_n;
+    __pyx_t_12 = __pyx_t_11;
+    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
+      __pyx_v_j = __pyx_t_13;
+
+098:             B_[i, j] = A[k,idx[j]]
+
      __pyx_t_10 = __pyx_v_j;
+      __pyx_t_14 = __pyx_v_k;
+      __pyx_t_15 = (*((long *) ( /* dim=0 */ (__pyx_v_idx.data + __pyx_t_10 * __pyx_v_idx.strides[0]) )));
+      __pyx_t_16 = __pyx_v_i;
+      __pyx_t_17 = __pyx_v_j;
+      *((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_B_.data + __pyx_t_16 * __pyx_v_B_.strides[0]) ) + __pyx_t_17 * __pyx_v_B_.strides[1]) )) = (*((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_A.data + __pyx_t_14 * __pyx_v_A.strides[0]) ) + __pyx_t_15 * __pyx_v_A.strides[1]) )));
+    }
+  }
+
 099:             # B_[i, j] = row[idx[j]]
+
+100:     return B
+
  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_B);
+  __pyx_r = __pyx_v_B;
+  goto __pyx_L0;
+
diff --git a/unionfind/build/lib.macosx-10.9-x86_64-3.7/unionfind.cpython-37m-darwin.so b/unionfind/build/lib.macosx-10.9-x86_64-3.7/unionfind.cpython-37m-darwin.so new file mode 100755 index 0000000000000000000000000000000000000000..803f99a42a7e4e1007e61890c3ee508706f63825 GIT binary patch literal 57940 zcmeIb3w%_?*+0I4L?eP5R5adKO}JPIi4rAZG;1!L)eS`Mwdf{nHY5^~nB9e-fYD?t zhvO=(H|lFGR@+@Hw3lp|NG25vwL@iZltcRXC(Gzj*qHpR3kW-{ffqMKZsvddVl91ce`Ah$a3TkUn=~gEyYxWPZ7g zGU)5fk8nbM5EDA%NVl9)bQn~n)bQ4B~YX+$f&+&pzUJD?^i} z-ne)4OE=$_^?VlGGKl_&VU|?uFw0pAlN)~24NSsAVJZHU>J-$V6w3s^w|PQ+-F$jx zEcN<4i*hc>sa^^MBK$_+-{3l`S)S3%{}KMdWXf;|oghu#g2Q<>vk%4-~R4CY@T zyrP=^bm+d>7K>efCW&`x;1lc0tBF3CpUHftDL(rlDoR-}KQ+$hrw8V9hUC+CmCWJc ziqDHNKFVE)v_!hiM^Y&1-KZ=V~_}>Jt$TcX_;oycc4Xp-;K&S7j&<(JJKiVIS!t*mI z56ROjJ?)`t@*EWvo;%rdw)D&jO(D-B>G?Q&7D&&-LubJfIo1&!p5;H%VU%R0qd-x< zrFri;^**g_Yx>XZ^XymJud=(Y++sbgD6xKOH+-Bf%Jn-W>LbA#g;UxK^w<(1AYY+Y zunYAGYAZOpWbBa92Unt^z6agNdZY_k8u2ILb%Zv#yw}?PXDBwpOQ5>Yf}@HdO)a=7 zgq&|C#mk1Fc-hy3!jjh+It|GWJ%kr1Pm`1%D@sl80>!@($*KSazaT(f{-ag}NQ@T* zKE>PTK)^5(;|!)5^T>GILJ0~6DTFf^6x@0c8QKT9{RP}MBFmP%s8in)8ViW_vT~Bl z-*4(Dn?*LQt#dCL-}=Qw7kU9iK#v01H&a+qah^=4L>Ep#+|VAB8?mqdJIM~ z{gIlUq8US}0}P;_`zI<%=xoZ6==P}2Xl>VxMN)q@)*84Hh1*v6fe)qNJ3})HNBH4w zqy;3wIEaF$LLgg)$F3-V&S}!8zJ1tmhKFp4KDiPdPybyL<3pm&Jok6=_TR zl?=91&=stC7L3mcee5!Ok8$*mdz>x5!|VWv~(%>}&6!d7BvzHb({~?O(YgcvPhB4mL%CGk~g7uMZTshl5-^q z?S!a^HcFE76-kC9X*7}CB}q+a*w8*CJ{`;A!9VCzJ+NkHQ}T@bPlQ+D9?XnF z55kM047@^B(8#wVJ}|l44Zk4!wVzDA8Riv6{u#nMZHt&x$(9-{{4*g+_6O({xV461 z6{Fj!NMzo2O%L{C%qY#n|M&8CYteLT-~_}N9)?$5C&suQ#HblO#%)JJ!?%HjeNz>r z%p-$QcwH046!jk)skd*sjaq|IxInu3u7Kcggx%uHM$djC&1HfkmcS^{KP}O}2whJ@ zrcpSF$uC2ZjU{sYw5ZiTnR*{cFmjH4)7_Hu2ubSyedywH5CuB@$Ds&+GoSd-gz|~m z5YmO@)mGTo2!;I#oybU3_{)q0UZ940!&aIInC1#7G;6?)-ZtDOrT!$vWE5s0Xy|xZ z2{irJyC5-Z`>_y%tP6Jts0XYjWaoe<)M)GE-zKIF| zm2QsUlHY^`n>$!C+3lhw2N2;o~Jeg8s% zSHR1zcT=1*g>U{kk?u6Rm=Y-={DcriaHbFfP00hDoMmhKXc24LVi8@S4`M(~Zfc;` zggG6LIMm39!|#}bl)*Y6$Urk5r(jYJ`#HIH!cPd{*RUXH;4d)4Ly>j+CXcK^|3K@b zfj3b3Zxr_9c-c4ANUsj%RZ3oW3$F#z>kj307I|GSyn@o}TIFRWuWI3StMqayudlv` zmqU2{LVA@buh+;cM|j;Uy~Zi8&E$0qyh7hzDuo%iWiOomPDTHra(Wa_Xao0Sc_G_C z-b~o^*D?FE5>0p7*^n#!?3;ckW9SyW17t9dVt53v&>F?=Zpm(DjNQ946uVA`VD~=K zm%y$?u^U0`<`X-IVs|6hMUDy;DEy#g|255hMT>2Vv9ALASQ6=cfGDO7-+|{*;A!8q zR;K<4<#jK4eTi4-Mz9aPOv$4{KORo1TSG^t2dLEw3pKn@nxyle2B|IQbQq&djs^U*1&O;{$Z5U7dn7Ner>kvb@jl8abEw58V<%W+g8ht!MLtv~Ne~P@i(A|WFa9-PA zq@E2@HVWUaAyMQ{qTWb;UFO~1PgET zzkoCg}s2vSwi^d1ZcJ`C&Wq(ji4L+FlPo~s3RlUuT0!8dZiYP38M^;wZs z^E9AM^ureG$~UM51Pec$hII5Gnf6V8rg}{sT^GD4r@{Q~@WoW&fuF)(tid)^q9;Q- z?CVi*me4aLgwk?I5)_h(ASpt`;l{WXswPno&1`Ux+^2&rc!eHRUO%Vc=%J0G^tScu z04yyzXdR6|1D$B4Qz%4m)X_8$21gtXghtX)N|9nEercqz+;C>u9BuntOFRg8Q7mAd z4ES2P2>9Au)_#^l=D!6$eFDl4}Z_ITO1%F&Ef>WpcNBD#-5R+5SF1VU_=C2T} zN0HiTgEmZz4J@R!RD<-i6NnBq>j4m7E{Q9NI2S`G1`;OrO5(5T1hKW9+9U!Lff7Wa z6-ca*;sHceLQ5$js*@1{qWaKD#s~`#@)|&SC5vj>lGzZ|F|mM$$$$^bfZdoT+1FP{ zQI)CSW>KMMe;0D0pO9MH9?0ey)L+QvpCqtg{(Qk}R2z70*afMXpV+s zcqR?qQcYqMHV{Xur$fnWt_Vc!)xK$m3iRez@Hq{ENUM2Vs0ESo&=8ov4_-fw4PK#n zoa8_=c}&I2sqY1`oUiKvF`AvPh{}m*9A5TKFNh+dh#{ZXt2s@L6!TWR;u?vX)d~7r zt?lEnnqJ9cz6`q!k*Jx&zSR_HjLy1&QTez#=0iJ7)Pjacl~jFPOm)^VjB<;JqC zT1Ph!$Sh>3R2ETFLtQepzNc~WXQA?1 z+v%_oz<2@nkPq~~Dd2`84g3o@{0?5Fd7p%HL5XaiL@6}#Zx%*ei9t1>9h5XJmlNQd zfJi0vn4OsU?MOm5RuRH0 zodW`%>oDeJRhApRtXk{X(hj?IB;;MLL-MG4zTvcTiVbLk4q1C>a5{&Hb#_^$taqp6<_Z8WYnU z(Zhtu=M14_F7FH#ljub0l8e3tnemOo7P_mb;%JuKEkwH?KPNr;GM%OYvnnAxbcE1S>Ehdr|B9SE|z(4qfZKOw7knX`K4- zTxUwR?;=fqMZ}o0&3YOHy8^206<9*9=-2d%w6>@B!`i1ASB2mVr>pjAZQJ^^f@iOP zDKb>$MMu4I>J!uL(Pxmr45SS8i}a*o&*np@&Y{yiqL6Yyod%|XMrp5JTu=SR-EfB7 zd}(M?P#~klrJ)Ldq;2b1vw}eiKG8K=nHz6}2lzMZ!VoPr}sQSWjyOx!ez#Jwxx;jA=H_ z{gyHDR|RkRGSJndFV2W&IE<+_J@r>VvtKpX{z==%wRZhgyZ)6!|2L}eA1+5C4G5*Q z7do#jhfxl>-(W+!sMrI)MttAgu#Tb~l7U_?2n*_32I^Xg{y{WD-x5RnqZt_03by#l z9LB7%R4nd(f7|!BgZ?8!@3hW+m( z79?&MCvI|SuQfnt^h?ABQEft*{6g#pL1|yB8O<1q@>4N$_0NJ5d?-y}QPeprPIIP& z$d*M}g?X~*_Gz1F0^}OWM503B$%5Md23APqGYURZ9I+TspRUM^41uQ2$p5)mcHXcW zDMe@!Ry%zp5bdS@gV0MuNmOO&7#ttMQouh7AOq9M5$TAhKufo_PeC>v?(ahnUH})p z3uUlYgxn+CqoH5G9Rr5+S|hwt5e4cs^W6x()^^h1(yFd>T{%jXlrJTE1hL*Me9Pbq zFou%gCEpCAD5I?}SlEh``>W6j)*)yI%(XDr!(0Qi6ODDK_RVg4+dqdmurA2Z412oa z$k@|mvj#FLeHg_uwV>~m^-lexJzYbrfl+X!+;?N?WDU?^?eN)%n>dhoFQiP8T#lzK zpyO^^zRu!9Wh-6h&`Z%Nl&*E?C2x{t4OwhZ9Xa(+L$@5k;f5YY;V{!gmmHV}_T1-% z%h|3OD`i#KZf)NOH_dQhXdm%4CNj`QsVdz*41BD&dhCzW^FqpvHyL9>JVEZ+l!URp=PPB&pCx zlPEi)ssvufTrx~!3TB3)B-e`f8k!}Ff~9E#MbnQm<5`jtX>uLBEO$ zN9j=mY-rp0NWH$rY1Gbj8cmf>qor2srbQ;zkfKU9#bmi0GniCIv{Z~PL&bzA>VtW> zQ(rjOse3D(`gOHpXC^f1JRy^cBFN+d5d+d=T!$#!l^F4BA>g&_h{}DX#JKd#Bw2ra0B%qvOCa%C8w-MN?NH^Lt?AjT8_2&Pm(rU zv412L*35EaX4Y7m;pRq;iQB1LX#W(_v162Sv~_2OKLEf~`Pj>lp^G6fT6XEBD=|~S#BjA{+(A_j)3xt;8ODw1;Tm9l0o;ZP}zT@q|2)!pB7lcT!BHdZ;vS`waW^ z3j3U^EuktzgQ-O>`nb?gq@UW&cG+&;bpTp|70>J2y7mt#>_PT}sf(@Co-XKGenjXM z1l(4Xg*pZSZ$L+MkQ$AY4s0>h<#WwfO=Z9m-Z{Cj9;xu156eQb{xd@h&IS0p=q54N9upoX*2C{1Kpq0vt+#JYTG@-fYdBOwrkNDZqkuS85r)7w zbQNMr>LO+TC>XqmXu?}b#fgov5&Nf8=vcQOI07{(GLl9j3ke!sP9Pml6h7^BqMdxo zKVU$&3Rl7JSfRpF>#J}YAbO|pFOZV>T7Q=qQ*xcgv`OeViZu5g%{{!MR8Q57 zX}Owvr{+F(wOt?n3m|=XM|4W=m0RKr2Cm;HImEiX#`;-jjrDpA#l}?`IFw)wyh`n* z?K_OML(w9>v|AfXGX+JB!@6QC#>-F@x_NBuP%#`8>dWJN2B^C=miL4%fw#T|zP@QR z89`rPqGQ^I5DfLVfC{?(N1(y@r{Mg9%VEqO>u|pipUa&E7de-kN(}UECHl9KoRAlh zZLWguPDu7Qh%s`H!&qS}(Jxd}JVB2L#T*Y2WFZ2KMd6!4?9gAOX?G#Am*Q)bnWQ~V z=p{-sNiBh=lPcPWxkUU-4f5V0vW+g*dJB!o5ij|7!yjEj2WDv1Gb!7%F}aI|EawR4 zPSGiJL5|ROIgLdfj_5zBkMe-XBlzDW`6GC~DR>u&QZI#0xzksIFd|X|V>=Xdf3Co& z8BDtl;wC>a_(2}Ze zF-?(zqw)l&5tTsB;D}$tu&+mXlMXTksoOjgOd>@N<4W{bX}2;L{p2igm?$}XM&n0t z#Ho_Q&&(X2ng9+SDyLxKdj*2*K^PnDh#>UnC!#^LZJlJAVQ-#G@%6@QY)s!YbB06T zJFwG9#3IZ(L8z3xNnC*ANVg;P@m?+Do208p}&OeYTc#1$R|enQtF1uTrbR^e?5x7R|}S7 z*0sDNbT-)LZKs*d8WgXlU)eb=c=mp${x8fV5WSy{-}t9QYHKhkl=eWI>KymErl%h1 zXuB{A^G(s#jpZGhiEn7vcsW;^1CAy(zB7eBHq7fot>7GM`%RQK2_o@94(0mCTEREgc0bM9^p7b$Q!=#4Wf}g_q2C}A(8M0@KPfyL z-k~58fN<8pQ{bZxk&4M8aU1Qx;XRQxNVnh{{}bWU5lH4wW-dIAA}RQqT7=K#==yLd z$|N&%o@DE-u7MWFj8^aLvk$moEB|%nXosZX9x|IX?xoL0tVAwl&jE( zi*ntF`X3nur)w@DDWF#d0ooUwo%*|IM;p$DHXTWcVv3x&#?RXxi6G!44j9ZojoOki zs}rHx5Gv9m>&NUFRO|P&l0Z|WvPj6St#b%Yfu%0V!y+*_qK@S3PQ5`(>529ku1sUf z$y!(6soD`+sM54*<92CXA)9~FH@hR#Lid0@DJR@pu>SO2962Lz_fK4zk@FBPl9v!z zy8)wI^!mk^c%?12%Pa=-zrlnkG!#sp6gfk)fC2yu-AXE(i!c_pB2KcO1I;OnpV0Ed zD53>w9hmqpL3bWHjfAoVmo{6fs+)h!TgI!jKL9pn&s-xLYU_v0HP6TWwq-q2z9Frg)KXT8dU{yp_oU2d<3B8 zL=`a}kXGs8>3G$wUW*=f2cDyVXbY2wAnljM zKUE7Z??YP)p$+$kZa)jD#3@JPI$Nk8(ZVt|^dVWIwAAQB9S@;S^oMjJWOdx?B5*=& z%KX`tTOPC^8@|K#6!)k2e@Bz+Js^bO`XYA?9Ph_s@N?*2L8d2)%+pBIyXU5dkgg1C z;8Um(^7cgUBAvKWE&Lm+NRZz@m7Jhd;J%2a+!-_r4D=xo4W-sVBS_1Q`Ya4^i_pt_ z7P<&4IXP4FU0kZyWR|HEWhl2DuJH9=KrgIgEWld1ldv;l3`f{0D~<~5LycoA(A=BV9d z#?IicW=^kx$0hxEod_0B6Duv+<$o6o9$#jh8uLv(wM~n5Itrfge~kjnEe@7sMK$*> zEqEbm>nx!XlnTmiQegLrlZ%7LW|981>s@q9&yq@abChUCgNDjDQ_>cR0)7y)3{k*` z=WP$ypn##vZhHrXxfF#79-pExx9MNBy^F$(a$$akI)iiNG(CNX3iA{M(=eGE_YJa@ zwnO-e!h8i*QJ8PCWz>6QL1BI@&GBDJGyi*O7N$yZjToLFt{Re8ygWNd{v8?0EwMa1 zM0s}P3g4vi>=5PIQNex*<=G+1vjgS1jmxuJl;=(=PhSVh^K}FpF;pgW6t$ap2~ql} zW>9&SQF)#!%X1sb^Jyy2u(kbSNC}6N+o`-P`tX$~X-C07{a=SillU-hkuK86|3agd z5?wtBu1Z&wN}8tc5sYR(qh%vs1!!vI(NI@5`FC1x83yXeWGd;0$%zzuM!q=n!V}{U zM+;{$v$d02&HxD(vK08A7-i6PpNv#sf_saYmd-*aA||-6VAB{xEB^~|Vv1QWzuNp=j#HXaY= zp_Bh5I()NEh(2X7(jp=jp(*em?Swu&aVQT>K;Aab2iM5Dc=5#h-x(D&AYjb<308Ep zD4Kw&PJTgg=CWMPxQrJ6`nKpu&Am62F2(7;#=aQ^W3fLKNe5Fcv?2>BMz>xMEygX7 z5@h=a7@^m(Lu=oR)QR4)j0SZq>Z_r6!~kM{Y8OJAzidIKAH~#{X6z6OR!DTPa`d}A z7suxiVsdML>LrSGC#c&cbw7H!&G*4^BSdD2JZIh?P~Y?5dx>4}bm-qeU>j+|FO~h! zlivg6gKC~8?;~7Dw^q<&4OE~Lz$Xc{G^ENEXrK~yp?R7xR(83?8Y(=HWjt3W29?tqPX zX+hLOJup_#+#yKyS)FR6tLYBRf=^Kq+FIK8W3U*uULVMX%eKHAVgN=(Wa0;_7PpqO zwYBi`5{qSqe+>FlXnfK&UBfV1lqo{Ab!OnqZ0pi_GkpJ2X(07da1*5?baNWG(oCd? zvICV8HW}xFo3r3qD1u2Uq}oRH@tp_ZVgWQ3%f;*M;Wc3H=q^Kfk%`Ix%3#{3W#|et zYeQ#^wW+fN`G7Jem{tpZXszqw3|7n&x*G%a@{YMkhSR7_mxmVeI^(sQ<~y3`{Ed^p_UBFKA(0AcvE>$_x5>lw3&lA#GJ(mQ8 z;iCN_ft#V)*t233X3GW6*E6l{H;|$^iW%^i%Ra>?fqXd>uLPK1G- z&CbxLHlj#-TM)9=a0#*;{wpFHDDLY~_Xdi4-z8uIafffGLNU_pg4-l?exnhOIG~EC z+9)a(kG~?a5QLdb*!FD-#PvC5ObGKlO^fu;HS4q|4c)X^3Xu5;5 zbw^OoW=Dg1fdT{z|AEmPZJs72o4bZVnDZdwkoG2eH*BM&jUi2~()K=u!VfKlRLlv9 zYy{a_(%Ff%T^9I-PC>#WPhr)In&g8b_LsDgiVb1^XW=3mv?h<3fB@F^a{aF*P>JeJ}2KCos z&1K(QfH09)%>A*5Pn55be;dX3#HWezp&O9#`3J_gOvZN<$CpYHJj@*5H3Q;9|1ZZk z<9c-OH&NSt5KobRJPuPHv8U~i0-OWUmP1=BMQc#?72n^{fD>MS3Lw51io2|Z3l5Q8 zb1FO_sv0_jrN6D|+whgeQEJ+{*rzYy`R zM@3N`0CcPNRjFCl%{^`VmMk7(ecC~-eRDbwoO9sd2>P;85GoT*#A#&Mjp=jqwp%w}M4JAISmPD7M#tehTiAkA z_O$IiZpktDJdQ3BbD$e`pWNn5*%JL%Q9GzpK|=&bgJ3dEwA@%lr0k0J)vOl&A0Q=? z+Z(V2r+m}4H?8^owy4e57o5_2;StuG<{~|9-My>IQm_gL&h2ge?uaGh?fSme*3F&8 z!3*`0ptGgd`h@gu=>@Z4&F|r~E4~}{j|`uP&>(K3Z!eZ3Ed@JpD!{!@bH7$@l)Rql zDA;Qa{0%W*IL>$Eg=bp>!(c}|(Jqa8@xl@MB75tFSr?QCtFu!4UxlY( z(Qn^YR$3S~AmMVO0UJ?QO;Q54w=T;{xy~9`ixiNsFNY+=Eaf9`Mz9i;##Y+c>cwOL z1%Whl(;Is$pZLz?_Kbk|dLtB|k&31P4~ta&)Bhozp$zOsMH_2z3-yNy&cM73&v5Y#oR^%p6rzsH0@B=us7 zjw+H~mW!HJit1WMQNS#*>sJ+lMJ&6q+HL)L8F&RNdRxCmQPM4SZC$-086cO=OZ=Qa zlxJ|b9&~EGcIy*JsG=B#`hc>W6BY-nkfdW&lKzAwbKS;zsj;*ZdlT1}jTHh_Ndyw-pq!~J2nni^GR*>=xyC zl6l>UhGKS8@hUeJkK$#<%8h8vc7>JOwxl@7|EG9V9Ll5>;1@{ea2%xm9_C>PNA~}X zCj-2S@bp4uPyw@&?S%iQPZM}4eYLocVgCmVdCG9hH)SDGiVsb zP^Xb=-8`klSW*NH!x@-gJB;C3P9w!>T$YaR@~$(eL&CEB3!Ea0T;>esm%{~ffU_{W ziePF_3}{L~u11B39a}}#57Fk;Fn-NbC}aeFE_5qq#0s)>$gq5wAOFE{wwTlOXsFoZ!exwWWBxH zX%y#fKrd}6FX;D`B7F~{UCRz3`%KE%7fx~E!beB*r(WR=G|dn@2Ej|Z+V)Pg{yc!- z;YaZ*T6Nu&yzMk3Fj*$Hk zN2J*P$gIdkZPyi9)=vkueM2$cIK$l|dcgH#RECd2h7ntIBz1h-ai2kEB;EeVw8&8V zBNgSrtDp}UWq{aej4n4W%vyC>S?j*5Ak%$C{t4F2GfINZU2Xd(T5swFcjK}mF%8D* zY>i0H#J_1N`=cL-UFJxWAiuV&Eei7cC^1HHk?@ko#gOy!s36@JZq`!1iGH{maaaR~ z51~|VE-tYLTVzltMha1QSlGTMO8#kNe7%;^8|~YW4!+^P;syN+(h9{RxcD}QJ0Y?4 zojG%fWloQ!`&moJuPJ_1bQQfL|r>An<@r{j-;(85ovnyBssr&U zCT;i4Yu#7uFK`%h(n(xUt`=v?Go?c{^ifUFXnC`P7l}PpCC) zfQ^)}Vq0;ErMtL@ym1nVHV@->-^fx3U|k)~#4sk|;m~}P=qQxX*CSA01eflb z)ilL?nIE%VxsgfkWC&wf0ecqkm1^pHC}ikI0=Zf1Y7hwzMp z1nDu`l^dDYfQCL^GHX^}j1H0%2>*Y4=u<|O?`bBx zawC)0N-mS%0+YQFcG^j~-sEYlhJRh(d@qki1mS)1| zCVAPRvksP6=!C#6FCz-4yAM(uDbM#M%4?F4*YCjKe@k9dz-v%>efyut>nka* z#n6{QUhPLoc`YS*t$O-^^7{S<|g789LkMHNAUGkHsUR>$ev#dA#78WyDuZf`!$59U#D=|6}IYnKOVbvc8 zpFKDI5$_^vJFN{h`ee^&B`bEyrtkT=@WZ8z#;tR)9Hd>&vv9B$+txc*ED@h;75MgL z`tH}F-CDt`%RVRmPs#1bZ+t=QqWV8W@+arti+W_ey_3!c;?Irvik!x5oYmX8;#~L^ zEZc^y?<*-Q(N1SU@3K#@#K+e0)d(}ynD;!EOT{Y5E#o8BJg~Vk{4J7Gj_)mfjwrM- z<=9baOD10Wo}IV)e6Kt3J$Cy(h(t5)k~!Il`&^Ank(2E!{+@?;=RJ*7yh;=heL>H% zPa-(GxRoht zKQG?B;=NP6UlQ+E#Cw-`zb@Wyi1%CK-6!7fiuZfs{egIg#QP)h{uu9C6ssk?4eFU% zbflK>-^oU2!NQM{?Q*iMBU?4u?j_rGWV@YgYsj{WY}A*8Tgmnm*%p)S6|&Wn?Mt%F zCmYrF@LaN;L^itKp!Nc?m5^;J*)AZPn{2scyNPV0$#yTjH6*{`L(0TwwY|DWP6NkF0wsDHu2T-TC&k0vGAQ_yN_%) zlWhapZY10DWNRT?h-?jHOTjEJTuru9$woU{wUfzKK{glJ%E)#j*)Am88nT^3wvA*P zOSXTJ4JsqZ1yk5CIxb6X7TK^h0DfeH1-;oRY0xCwXGF9A40Cnu734!R@meq0-XL2m z*>;lcRgjgTL}M!Bbz|TvxrobM>MLe&QmSNVc(eS!45}Dj#vh-=ecs)z>$=tB9ws zvC-zOZEW_PZS#6OHu|Gso(7+-uEEyeU(~cTr>TWX*JAm>@HrO8q9*VuZEkLC#tfjb zVSGcCuWqr&Hh-zlV{2@#_B7iX8j%El6VZ7jUzNaVexI$e#x}pv-%#yE^wpl09Lscn zgRgFpN3xu`w25s(RAr#C%&w~Uv!i0frn|nb!Gk}N=khgIxjpl%+zat1%occjULUgU za#`vC>qLS9t_E0C1!9+_0oI19MMRSDYpAYjZmwEttMiIX6hl%-+X8>1-z(^n{2?wx z+>lHaXW7tbtM=4X`Rjc)m#f)R?RO(eTeaVV5#FME>#l34^HI{8;=wJl zbli=oAB(`GPNuG=s;*uXs!irC9>7HJM@6W$4Ip*7nwGY>7W=B^*HiA1`UM^cL!~Wl z^|Zhnf5$N{O!^~{UP@y8=Wkfp(72?*R_#NvK@8QNggRv#n_WH5B5JD)6N|{b)K}X` zC6V|u#TTOxd6G=1%3G-1EcK05sA))_w181#bKQbED%Tna2e_%K8C4v(3ALhX0Xcd7 z^A|N%`{C{NR5iP65g5$_P01_Be6^r)H26HtP0b#>ZSGo<4ocAHaZ@WAZ}ZinW=I}3 zHwwP7p?;}tzQ-m~QH{K#SQ{Hi2yrg>i;2>&>y0i}-D0Vl8-#t+vXGmfGy8 zswP&R1};=jb&hSiXFSykRFFEaNT{lqvDTG?zgy?8L(M=QSYpkxIU!5R2iYPvwpgT= z?CPBCYD+f4G%jj_yr})z7JHh#)H`K+sf}_j$7JW^<>q?F*s2>nvQeO3xod44iz!gN zh;mTHEV2*sHu{_09#LktG1;@ms0^T0pygJZ!o-?;j;t@9mMXWeeyJrp=N!a8cAU*u zwGb)D&Y6VQwbiz!MlU4O*nq}U)x5w@{TY(#MU{i+0`y1?<1F5I=!Kr8OVB%^^!#2Q z6&a@wLI7|46-pb5)8F7}X_95l^fBHd^>Jd+8k_1NH0qnYwwlIf+u%V2f#`tikxtR@ z(WyYzKI#KdQBXEM3nHgFvjBAkHLTfljlT{}5@iTi^cbj*{$|Ka^cirnjTH?}%4S@S z%{H^vW2>59S6}B_N^B)PWeF9-SJmJ~*IZ*0!%dx=I_LTB`YNv|XX1t^t39anVz4+H z!K!VG&8yn9--shXYEm8ZEzpnmtM?&b^vBqxW{;k5JmYb=Qg-G+#0j zZHxx|Z11?_jzN)*$wsGPCPYUiQX$3)%O!OS#(Ns7>mY7+Pnb2J7qy`>`|3T4ihHVN z3umUvjW!~?fD3G;s@aaYZj7y}hC1&tGsjpEfn|&eAjhahbzaedosGidrk?Gke@KQ; ziqrdpAw=Hd^i({VQtcQWIqZx*`ZUHr0Mt(@zjK!1;R55qufJSL{marZr zXLe;w1_q#ke#(&~SMO=D)nJq&w#roQ)s22k2H+91C?CN(=9+-i)YT%p0M&r2&@Usk zo@R^eZ15M6{S6q3G2kK&>L%m!Q%kJWs^Zm<>ZGVb+1L8H5?e=bK+$psoOV+ z#Wr@#f-&QAaxAmr14&{ist6d@Jk1xN#<<5=imMu^-eaOs4e>O4nml5@F6MbOK~9V` zE{B6ltlCV7!dz4}fR&V;NJFd`%)%Y(9TyX?DK}_QR6+@vGBu?!WwPAUsH9oTX&uPb*4YzCpXQf%C`MoF*qeff#HSN%L5Xuh}#B$Uwe1 zV&#Cj(qJs*Z1SKa#5_h2pU)4*E$%z3L9`1o6Oa=6RfWDVCI!s+6HABaci?p}%wQga(=UP(x z&xKiF8PZ>1N$tA;f7`s+lGaoLx2cwt-U`c58)@ujSyC!z!~Fl~kM7r}Uk;m-*t~>I zC!4d`tYq_QHhpZaU~?s#zhv_sHh<4%2b&w&+{)(jZ0=(7T{b^vll~%#_$`vgFgA~6 z^Hes+vUv`h7qVH#W(Av9uvyJ!1Dh>u-pJ<7Y~IP{S~eeI^D#Czv)RMuPB!0Q^8+^f z+5DExR8rgFcNCkMY|>w+p`ZGj4d*c~V)IfqXR>(}o3(5|^sIHd7lV|D)K>ji4I+Zbh$+uYnd)9iB83v&UC#@H|hX%8BF&+(~U@?Q}Jdp-4{$pn$v_I zr_aW8-~RyJSf)Gd8p#Da#EC!Vm&YniT>>5fid2EhE* zFadYEo4(_wm& z@KfcM;P@lJj}1qE<&A#5N&R;v=QBf>{y+4N#m60x>NnOVcdX0^+d|?O3zrnZNlT=I zmgL@dagxLTDVUo2KZ+^CNDSVagcE&R6BFwK95LY0d$6^|mWr>Z|!?#i6N<<(y* zU1%@Q{8R0qb&_;V?(ZgY_}((xinO}t#l@am*|JzmoAqy9qxnE zPUiMvsXjQ}H0GDXs!a|ouPL4ePjj7nipNJnq3l9# zuHsscd*O7C+b{N6opp=qe9Eh=s^06FAr6BmC!DQFa+%rekGYHlOBa-@?u9OQ?LyZA zKQz<`S-rHr8qWUtE-3Gykh827b^Mz3DY8h#7L04Ur{06Yh37S$?19Z3ud574Pmlu%o}8D}(hc>%RSXf3c&=F!cZ+TG zmD3)#$4lO8H+QXB4}saxdPJnm9~&; zPuz7n4qo682)XvgU6Ey3-^hJef_q#HeQ|eceUf!3(XlL+iGGtuGZf9U8fdGNbkr2b zUiQVFwyPAcVwApQ*g8~{1UU*H(UhduO6esV7nkvB=_Xsh%U)eA&qYuiYZAOrVWbz8 zF?p{|@RkhXf!7_-*Xdd8sgFymg9+p3G-ik+LsUUaD4z9_z*&bAFZQM;+DU|Kr^%JG z(!);FG1$G-KM-NB$(34_a^EH0%RP%+<>Gi25%FhOZA}&BGi`>;+t5T+tcEzPWLML+I$T!|a4o||Ks}mJGi9YDp2Rf? zlt_u}?NCaCdBp4Fx@2#;r%OrdNbu6CyrRLaPjGd3sV5}r&II?VjY2*>369h2+_lBD zf6?r@1Y5HdsyBfEtw<$%*I*v;WcNw$nYDCSCstpGV~Bm|6xt=!Cu<(rTKn0d-J6?3;%Ej3upEZd-B_1Lm zkF|*&RFLsjziyysJl7ou@-&SR>l0}l)T|ofqX{LTQ<6}9oh=UPYKLS)1B1bahJWk+2PGYU)qv9od<(_L$DJijE;2Lt2OSu>z$B`i^5Qsg^fpU_WX| zs%7guizN%Xh&QUBvq?#{%*7#FI;m`7y-Ph~rFU7$xO1$SZdmSN+>s-37vnz0A22TB zb^35DB#FOTx1Y;6m(H={r!mf81;0o6UnKpPGFEziJH|>6kPSt?kT0+IFK4XQ z_17`3tdZe=&A4xY#GQLlJt7|IK!Z~Kn1+9%0|VwC*Ve#qsF)xJj!W3|7rnz7o) zps)KVyxOnW!dUG~yuw)RKZF^peTIKCR{IGjV55cjseOZ=Fjo5m=P_3M0A-AozW;K@ zO0Vx?tn~L+Ggf-~7RE{+|7*rd@7~Q=>DNDJtn}#rW~}t!qoMGn^yjjEwSuwIYgaQ? z`fD%a1x(+@Sm~MXWUTbb>liD2@Dq%cKKE_HC}UfjEdS35L&j@YN<8E!iItx91ja?W z^e<YYIYnAkWkZ~X5_ZjyyJ_U+wA z?`7P=I1A$t)rVHbmor|;cmd---&tTlgxSnx{@k+-1jPGZ>m+>QvEw{?@?_!+Jcn9MQ#_urBWc)c} z8{-u0pHOdjR1axDZH9*t>W+slNW_w%kwwF z6yA&}yqcfU7rqp~!bC6PN4=#VVG+LxQ+PF>qucH&yuvDcf0_s$3vb30Ud{iW=kN-v z@VPR0EW8<0cr{=AlEW*k!dGG*ML)unelw=!mIhKhr=tZ!uNp({RmV1eFX3$OySjhmu~f>^easMqWqHL zx0$erpXbMSsrVVI@bn!p{m7vB&6vWg`Sc$-yuw6J@vp{1KNa4LDST6r@V4ya@CvK& ztx5IAj48aDuYb+q6;|QPzWW=!GL{Qe|-8B6k0ScSJG#c#$U{>x+pmvDHsK2YJC zlHxaG3a{1=i#fc)KQ_EtZ~RH6-zg(h;ro-~H)D!ltxq;^c!gE?UaW)YM|dh;W=!GL zdgetAudoW=NrCZG;X4JAn8K^|&u1K7VHJLDQu{Sy3g2HT86I__EI)-+_)b%Or}UdK zg;(pV@f==Z6~4lhUJ7r<6kc`ub2z-hDts$f%zuQ1V5`!UlG7GACQ z{>&Y)Tyuw6J;ZG(Deq>O1 zg;P(mSVpI!J~aw&%Xr3W{W*uRT7R}NR_o6-jMe({X~t^(`8H#<{`{J;T7RbFfEC5B z)}JRaR_o6RjMe({GRA8Cc_m}D{;XxJ)}Jkm)%vrIv08urg0WhE-osd}KObVO)}Jph zR_o7wjMe({%u{53)cSJ*W3~RA%UG>HZ)B|2pLa4=>(AdYR_o8l8LRbY4`a3de4Vjc ze})*V_2)=@);-#^{ydYgY5h5ov08s###pUCuV<{*pKBSb_2+KJYW;cqX_CKMe@#O~Yix^*Evsmyy_PYXr*8G+1U&pwWaWiAJ9=(mR zT95vov09IAV7!*YKhIdLM_*;E)}wul)p~Rf<4z8L*y%ETYCU=!W3?U~!&t3H^BMPX z_)^AdJ=)Aztw--;tk$FJ8C!UL@;>8q#%X8B^kgtTg>fe1a~RtgPhmWk@s*5o8DGbE z660GL7cstvvBvme#ubd8WIUH~593P4{fuiFpK_*5e-qpw2IF0ff5*6w@n*&$ z#;-H(XZ$tey^M!u%k)`zy>txYbjD{g&R~2l<4nfIjBSi(Fdoa;%{Z5_m+>UVZH$W; z-_BTL{5QsxjCV7xW&91}CdR3wS>BAZ8Lwx2G2>3g^BDIqzLs$> zLyXhL$oTsipTKx8;}i>~CiLRp5SUhAwZ6pi-eQH0vVz<5L|}ODXL8GwB>dAP>`THw zPr`R3;ro*CBT2YB3BQt%=A@BxH$>ml!X5)3De&VG4p#W z3GYb4ZzbW6lkmTj@W`Qw{KqBXq9i;&2`@{+MiRa&3I9F`|1Ak`O~N~q@HRWVtUU?!lg-gK@wh`gzrwm4<+F( zNqBb>{x}JLpM-}WF47AT%ipOx+>YlCJai-eU3l)p^8lXT;rTtD zKj2x1=RrIV;i2pF|AgmZJk+N?g6B~@f5r0{p2zV#frsw*qI)Pe;&~F!-|=k1vl-7* zcslWP;h`JBw&2-{=NUZP@O0zp!LuFDvv~f2hwc#jCm!mjU%=CgX9u30cwWM@3(xC# zcH?;i4}L|pOYAUY+$DYr5^m<>j|5HU9uwi92Oi@jNyod* z9`Y>V0GD`OkDX)l@u9~!tvK=)hkVR2?m*`o<0$!HW86obXdK`YPlfp$936iH>CD8# zi{uhJwHO29xFVs1bBfAA9#8~IKAC88;vk9B-eO)6~p+MLUsDk6lB1$L-?7` z8y@7KA$i40#(Z`^cET`$B6hTpT+OmfI8!J*O@|2yC!8W|Y>*!T4DjINg~HwZX@GDr zeHb9H>9c@@ZvwWHHj}{6!bN&g4mfwR{_ehu>mctn(peuxoT#5AR-a+hls>ocQIB? zOAZj>`7vgc)L4;=vz(m%3c9Rlnz-((s{S&*HIAZ}AyCI~%$u%dQ%UkQxvJ%nXmg~o zOq$3VJPGLp!!7%3zcBc*tWjbAkrX++;t!$A` z)^gQ+rR>;8P^%kcl0sF;YZ9q*DXzucl1bhr9Jf%VJeZ7rNwBiTv^Hj!PUfrhBAZxcAjXcZ&UZO4m7Y+Js4vN)vh? zT%Af+zPjiJIG4Ec)rCu}T=G)NcyL_y>T0ZU$;)2RVsP1O+%s{Wq?l9oV}hd@Jj;N3 zi+EV`TuFr-^d?x*`QYOyzQZ)mf$oK6&pL5EY#h@qvFt^c#m14@N>`A^$oK*#7mjC> z7>Zq{OJfg2gaV_RW8;r~ z|B8Tv5{fHg<23T7+&Cr4UtSa&cT@MpvV>&vOy2T}TXR8E^P^8|;zV?dY#i|wvMzDI z6*7SD8E{3fxb)RU*AlY?xoYFyTIC`acM#P82bZ_LQMP&Nv&A8Q7hSlBPcYDLtLt5J z#9hE92UlGzHXn`JrZH}X)1Z{hIiB3-bklKEqTHqO6#(69&W)aAg& z5jQQxO`~*8Zmi#1B)(Jh9yCkTO7Q=nG}Vo6v%jgAofI2WHZgSZJ;^_mRVD33%F?v7Mtt5$cmCFUo9g{ubWU^~pd#=r zYVs|0`Do6Y=tSLIENPO;FTcD|bg_C9tDFPw;uSTb!G$iu)OQdzcQV4C8nR+69Ad4U zP(tHra`}IJ*Z*UPoTz>QrK*R?b1t^Ze#sP94FcOgCfM!UJ14jdLJ@9xy zzR4p3xy8l=0TM<9a*2%#1Y(VOA!YH$3;=`B9e50Aq9}gsFd#Vp$lgDR_Mig*<&(Ox z#36uO69xg{Ai8~XrR8x;HiJPt;v)owPaY%8Zmxkm(E8%tsVIRTIf(Fu*ohfXjsxqF z@)=MUmB(O}SNRRnctqbqm#WL*L9DLhEl&En&Q0>4n1u6_@Oer2{3JXn2^S>cyjH1mm|2koRWKbd_vk7>q;fz`R*op7yLvKj$SH337q8p zmn^#kpV*z4gL%g9$sEjA-kHgXD|X^aax}`=@|DM!3cFurBdd9L#&jz2f&{CG?`m{A@`>wZXMfP3bt zJgK4x)#)LP0splJ7Rn)wL0s8*NMoS7zJ&*yD=r*#rnqq6Jn@jmK>n4PLmC6A3_GMT zFiq%83-&`A1J&K2IJg zz>;5sZKFi~I;w-eQ(I-4lJpr*nfSA;RBTmB!ZO`dx3I}cGj!us5+ZtI0B-0UWt0ApRHjIF?mx?FYe}^@IbM3fg|cjuB6yeL@5!4+vFM%3fWTiemFVp0P`Tdz z?pY)Ys*jV;hBk$$9&TPKi~8G>bOyvrZ(OIWcoE4Sf9rdT;CY>bc7t1fG zG(!1eqS?xc*DWC8Ch{@<@NqQ}D4 z8BJ0`m#Oi%^YdPb871j;_O!>TMK3+;Dp~)zTO~igUn0{721Xg9B&Cw{5-mL)G056W zZ}uN#{RT1^_}h{n8Gqd^QNf~@UhX|vpQ(%;UBnJGQIug>Exo;6F{`Jgo7nU5cblTu zb}CghjN?a0FW!2s7+^1de?3t)KT(o15~mfhL%Bs6Mf~-)M7{J*IjNZ59V4Wd>gz4p z--{HzH&2ud-g{Vjuz%nyWu<#ocJ{PcR-|YeRh%XHTc`AI(|Mx|0?WTL$~av%;puN| znbn@aXvjjZec3ccq9341i@%CWNl&H><5I91Y%Um$BuzEGxL z0)I+}iuj{(8%L-|A7hLO9AivT>DPfD1Wd>iDDRF@#(q54ePfid>lDG4(SS7l-L5`_ zdj~!(_ z0>+AT|2u_L(5%{)I@in!i)dzNnz0``nO}T0RzR*ws5`lpy zfEBU->{RG#oUa&qNrfn_lt@l`#}%wy3DJATdpPi+>EVWItNJ_ z;4C-eJ0qg=DM{yxUOK=dQKCL>q1077AQkU5m zu)hWL{B8KEtK3K3e%TSJD8Cs+L)STDDkx+IQ%eMpfB9gc;4cix!tsStg%f3Ab;-h` zMB&iM;lgnf)5nIhwG+!Rpcvn}$`>N`UbBCD`R7B6LW@I7Le}C30%uki>!*3sE9GKb z-_uNCaO(DO3XIP-tDb~D!K36%p{W0GjZ)Oj;0s-nTAe-GoK?RkFmN}V!Td^?1T!~2 z4@@(+&NJvkLaTdA%|Q|xEu)UVmUMWdCH5KmVs-7HIgTDtVdRBE3AQifR=jTz}~ zLs0)NVHBu=G)VZ0zoUz-QpMj?#aUse%&c(gq1houramu$#+y08L}<%bU^|8V3jCzz zlgHEqQ>U)G;ZsJc(#+maE?OVDvR#x@hM7%{GYb#N{7c*huo_y@IKhQuW*$u)UAbGL zo+KV#{9{eK%*>7^1DJuG`!$qA;F-egkfe)^5Dmz8p>Wdf9D|((8%D@F{Ru}tf4P#1&Mp!|VWuS28UcX*V4Jv>U^;Zd$UJjw-!M;Ui`lvl~% z9=g-NAe5Zc2c=EJq@ZsuO!AMEZz5(vXv=?LG)R$G5yhQHOs9E*KeK=KnKXE$`$q^} zmdjuIcsBC3$cDcm)(5HkmHR3m6?DbmO#%V(6=YYi>aar)&IZiF?yw!8hRLHaGrQBr zgtK$8G!?Kkd1h@+7$-rODm+B&Nt*7iP?MR*Nd;AzWXWOYbh2jfE4cWGazRMWROzn? zwqJx*P_s2priE6wPk_nF-KL#;9cxBiCH{Y*@)@&G9>{zQE#{BGSLL90joS_S`7eV+ zXiE#EtX2kPB{GHd$wOVCEnlYDpz~7KK=9IbO+x1e8&Q}Wdq$IC)Y`Ar+JBY3anLWv zkiAc)j=E9^q-U8BA|yC8EwtrpMU>OuWJ#n?;UN_3^dht&i)71XAME zGqmL{5BL8@MQ`FukayZR6 zZJMNNHj&4cq2((72)-mGIW;q%0*l<}&_6}0#Ow{pm08Hl=li*+a!@oCMTspYz0+V;q_F|Jy2waD z!3TarmW@{4Vk0HD<3PCO95F!dQYl+GbeX}v^88UiAu-66Q5I{Fq>oYyjhW4ns+jgJ zEC(qp>*W+fFcCx8S-7IY%sfMR-nc^Q1mAA7K2t~q&{ek^&@b$;5xC`dGy`(8a}l=R zTka;krk-v?5%n}TBaTw+^gag%U9PnEEQKWlAEC_{IMzIAKdB}Sfv3Tuz7o!rpdhIq zXcn}j7^vurR2>#NTV3A2c_R|Ws;REok(==<)sU_WmhjC;sYxRG{<)#q_1Vb8V7UJs zYh|pc;uA#`*CG|#ycG1^)!iF;p&<9{ck80#Py{mniIThlF-7c2#3n=~ALGvf>3hs$ z#M)3&NU5(o$VU=#1(r}OBqfmp12iX5;YD~WK>7fpx*s(hQGF9BcVAtin!obOB2oQU zQN?bgLYrY6i>kXt<+AKTYW@2ln+Ku4KG{qGt$UsXso}djfO=j9Qjt12jZ|PDwB_f} z*3ed%HL0^>(W+1#vG-;BL#WQS^kyId?&B>~IA@ zw7!F)tM%fgS?3A_5mPEf8EZwSF=E-o{*;CE41ZdF+|ib%ZJvjIJLYTUrt1# zeSJ~<*6e>}vT4_2$!y*evft)tE`}E|&WN4f6&UzhG0}nh(Ml*Vu6E+Wz?8a8_1POI zE(`BO3TOraOBq;30Cy?1L}%=}P zQSo1xugo8j&OeW@y2@Ac6~N?f^X{nFryc+%x#iLUz8NVe2$Bvd7Rb=wG*rX-k-c() zU_NZ`&=C*BaH=P$6mguH2b(c;sY4);xtOeojzV(>GSdjLLP|rjk?BL0%qUW66|4~@ z=v^2BUKq|Unz*z+o0_;RFu871C~yMgU2jA3a8FXl(auRPXeF1deY7|oPm9wW>{0hq z_|*POX#ejq$hCpm)qCnFF7+)Ei?RT;M0^$LTA8l3w-t7;YBr;fnA`p^rnc(FapgDO zklDSarm`?}nxkAIewMqw%znszqw3(AbL@wv9JK$s?d3De{`$zfW$&8Nzna@#9FtvC zQEoq8TlL=Br*3?7=!ERT^2$dmcOxD6*KK8w*uSW)x_|X2%;+!7ZO>Cv<>l#dk?i#H zaN$TH@~cDyV)dXD9WjanLX77F=uBz~*1+lHU*^Woq(?TrtJcnI!}A~(-Slbsd6L8~ zK_ZOsK2fQn#eu`Ta-HperM$90L4nHMFkYc63h6ze=Ees4ldbn}#{mch&jSNrfwaPf zdLuCK?|_6lzXH7!lKr|+P-pEv7ERS=&jTLz#reYSz%Ar3v2^VrA>hD2&vvtsezd#S9NRgGl1Waao%PXIuu{cO$@s$0`+Nz<|Cz{b;>ahq6+ycDX zS%Ud=WvKtb>TvXJYTFfY3=I5$`XeJdwYKai_xH6a&#mdJk3L9L?T5|%PekndtM~0F zOHGVGlpqw&HNYYJjk)cQVf5y2P{}7cG|U2%L#AUV~8f z8U!uZyl&c;nEm%31i07CE_n&r$Xas1?BB81top^;$A(68Uu@`A#GYOrDm+2U8DQJgzVLrY4XpY*@7EMz|svfm2Z ze`Dj2#n9I6LCkAnI9m_7-xMVMCbN7e+S`BAMrwA{I3tkB0f4TJgRa%uFBZnx59rjv z!Z@sIRS%@*gtN_)X;`AKXD|Li)y222J{dV+=~hsun)VL+>7i4@+0{Y&^q;OBU2qDX zv+pllF)s9T5{rwuS#^5?8M;GMD-MX36^+S1ipU0n_RGv{0!xutZPLvg1jl}4>Y6hn zWiO#Wsfi}Kis$LV>{B4^e8_cZ0+{0AO8*W!Bq|w?5-ASd0`%#c2}7e0Y2#JtruEM`=wVV>3Em>!SBIC$QufEb=x9vGO5Zib`p%a-kJ7=yb+&3z(Y zE+tqnaHxc$4Weiant)!r=mrKTf=j!)x{dW1RXR|swTE~~9+-ntW+6$X^fHIfnz`?aNC7d*j@6c!z*0c-Wyb_^qiy8sm$GZ7U+ThJzE^-i>JO2WF)PP zy27iltMCDcA6{V9bbTO_UA8ci?Ohtlu3Bd9tQPJvo=YK7XiD`mde*~(851tlk^7Ju zEgYT#J&%gm%NIuM)wS11^u)RBk zq%Z^5nAyd!0KXRuK;g*u$*g;q6k@fIL%xSBh%^UguJ(-0;A9=mYDjE-|EiOX^v5L> ztVy3hgVj`@ZJIclJlu+*lN^}L!oX_~N(ie|xPRw_{EH+hS6GZ%SMDmzG#UMYW5GzC zj2<;%Mytm~s$L3Y{tXoszgSr7ZlUmeHoe}=euY$z*Ll(^>9*jE1^Q1!n%9}xW6VOC zX&(pI|8wO6jEpW1_5W>D3bUggMD0Ph88r0uDVva3;o+G(3I#K z&70lMyvZ85hKKAO+YXMJy$fB*jadE#6iNkQkBOA_Q4shIn#pgc5GM}Cyky-aTaN;=c@KYYmVaJy{2RYK0n@0rf9kuqmLsLb|TU!vjBR3`U?`U!8 zU&Glo!CL!bcJTy08WcVr&&Yz2{|6w4?I+0Xo{jF6rQ))abjFFeMBM}mOW-reiU#kY z9ev*xQ#B*3?;c7CSjBI(5{4YCp8DzgTjg0200=i63KRN3KxD&HYx_Bn45m- z>WC>1rfN|~G@8ZQuHuon$^)8M)0&BhX+I_80ZH7l71@z&Y%sqV*jtxEK>05aCad>M zbLW_e=qT#WIQ_Hq7>@)VV~<2Ck{ertM`$y~n}dj3n?Pi!I-Fe$d!@|UOw&GnA}Bn4 zp_{^Xq(Gs}MUELp+{UI%gxvT$%s~mUU0hSkEcbj%dsC0+mE5U z=FU2DvarI}?NZOp;+act#_;bkbM^4LR&NqyD|gcxv;o6w+KUJ0=gvJCvHu890>huC z>o@7SL(AH+DAesjG&M5i4bvWTY`Fj8iSRd{pf<9rH<>QFf+kUN z>|A~dHB$99&4`p0-uCCw7!w(lBXM-e`&#`El!vQ+pSm=h9fR8*l48{xv}p@T#-2r- zfqA<>{V*2OJw@ZXbUHM4yeo?kFu#x;vHzfgNB4l00$k+cJ$~ixp&?hr+>8e=pn+%} zRJDe7N&UF8k+go_IudA^3>FEw^$(81EwC{wE3rw;jqM~kN5|Y`mhCF+%~}((b5A$7 z?fry#^aG?c>&z)nn%iCqrf2SdW@x??E<%aX2eAK4T{`rs%4a@fO&Gcm^@b{oDw{W9 zl`E`W0mn-lfZU8b!KonfGto0l3j_eL(OpVoa|sUQ*P%^y+o@hLysALTPl^csR7KjQ=NI6sef?dqu#ez#JW_N9_$)qr zf3y*CacoWAL&yaBBmx>6%TmXf{r6Dx%Sg{NbF24auDygg{JIusU!E*yk3_620Paf+}@$D`q%r(Sp35F zTUw?NP~Dz=H-86wjSFO6Ll~iQU*W416X(#v->{2R=wTZ{1!arKxPw)VGil3r7o?r+b7gV-^V<}7M&MK*t$7EP6D1>Xa5Oj$${Ix1P(&| z@0TY(UOAXwiG&mhH0h^XI}x18Uy8PB?U(xZ9x!vg2TU8m;g?67h5PMC`kx;l)0CY!4j#y(n8M%6bv13?gqE!jogtx6lD}$jqTNbN^F7A3Iud zIsRCB>O1)B6{V*@wclG@hT32TGr({Ja`BJr_N7m-Xj zN9$)Imt#d^DAM#ks*(3|mYn3bBI%ms&N_YDF~A<0#Ul;FGI$8jHbh~$EKsnKg{8gi z*H~p>x`{_PxYGf^I>Lw)Ik^8qrP=OX`F{ttut1uB_DXBdrJCd4#PW+JU@B7ZO6Pxu z{91HO`?cLiQTgo0CE7hGzxPxW3tgoJ$$i)bm18N14PyGl2;$+zOS!1HwG~u{Haf%O z*x$wmS`gG3ByEb$$D#9#s+tKmR+!n#Y4dOID4bwM4+uiE?p+t!Itv_y?i(rxQB&u4 z6(3fL{Lt2mfJ*D^96E8}qx8bDq5GahZTFik==8$#glx8-LzC_xU#t|qI9`Vk&TZ(v z$Eejufqjm|z601>{}(dvg->k^{mOkl!0+?meTgSg7`FGj1V-;m$T)clp?PxN<#xGh zS0K{>BY;;DmeGRov||$D77;aRJ6<-^w7>s7C2uKsCM%puXOD@ zGtDTeuEtzD;@nSTGaOi(sX)$-%vD4HgsSOD4eiXB4p^_ib+bQ@vc~k;;=CzbZrUc6 z(dr4JM*rYAGkf&9zD13xKQa##UdnADK1A1OehgGocMwv-A>%kyj8y#sfnbsfg|?wS zsS6?8U?e*k+r_n^{088Jch13h(GyW#;DySB7hEoHH$>- zCJVj%%0jRa$u2FImli4q9qlH6$IM#bKS!ft2ELaeWHWbiS$29^D0}kBmAL0zC^X`f zsSu9t2o-i2gSZqvTi=OCc0ZLEOD1dDu_lW-h6m zYYQnt(Db&PnO(n-1cYeDz$GG`Kxkv%n(^?Kt0GTN2n^grf#w1{;5To4mEUs6UPPgM z(vvc z1Tkj>g_kZx{CU{8GY_H)fR-9ay(Wkl^9@U3@|GbYji_{VDdNn_D876mT|^iww)gfg zakh-W2JAp;JcaLY%qXtMn_NQf4(`?+O_nW$3H2~l$j!bEt{CS0%adTMwjBduE<$%i zpXeA(ZC_N7?>-E^C~`A0bgxFE0r|ybRek6_?0TU|DFkBwiSCx*Ksf!Ed^IgvvxJQa z3|xSOxFGDz5M}>q|0W`uYCROqlC{3fW39K&KF(*YyU1ka#!f_^YGLr8$f`$!V$T)Y zT7^18kGt*h$lFW%+xwJk??)45dvLQo?Oo?<5B6WKZ`rjl?>BEmm2cxyojwnjDUaUQ zPy5#D^t2+;R+9RP_wQ)I$pZsw{G2C;-!6lw+9@h-|K7BBsJATOqj(~_bnbzDJck~t z(|7~QwPn3t%oM)oOpE-9Lmvl8e$fp%sbd`maM&!uu}%(7-+l3#3D`{0VR&vX6t-?p z1cxeUG9s@l2#-VATf|mFw~m<@*t)C#oz*KQ=byzuh6~$6x6G+?>x+XExS7T}9G(89 zNZCPLB6+6pVrb@^+Cb)NWQS&5SslpCC+OBWb3zx*sgo8lv~JB@oUxJl1N)Q1WpgTE zmL@}Cjr^Y}vwzKGY}Dx04xa5|;k*hN;aqBB8EWBF6df2B$}U(~xjV4+5{mRs#~!bG zU118|vjvo!yRZMiDJxH+*W=*vgkgrGr}sz79w_{=dH~pCfI|o;0$~;q5S8dR%bqOk zZC@|SUj!$T+V246=I-x5a75xy{e@s^Z*K0Mi;oW6yb%2K@7#0ioHFbJatrsYd++F# z=Y{Nd)(5r@*5od>YjcrRdjda^#jEy!*fEJ0aN8B{4X01YpN85%?x%MzR)d$SM{p}3 z`i>cWsylfBKHNG6>Y7z~gzI3ivYT6gip zi|TW26U)+X<>zD5AKEdeZgxHk3D;+Pa1ga*CJQ{Y?#78_Hv}?wfrBDpzYNN#R*TWt zP6u0i;0%-xRTWDK$rm zWY4L9rqw}R=TH-P)`sjQ)gYm}tF=4u#W|prYuK~yT@2+akm%pGN3a2OnY}Wt`iJq% z9cSkv=AKaCCt#E@j)6X4EU(Ioi&c)_92od7T56?kW4{!y8^qbf+BuVjK$%5QaSP(7 zw2kS)pn_yzU^$uZ=r)QrxRL&ekmdp@uyqfvi_qFS6*h{OP6$6^5z4u!4lPc7D!&(F zMUXsPB5&Tc@scoq3V%zrBL}js09}1ma({?Z!jHh22LRAJD^gk_20o>xm%~( z`uXpItSaw7Ic`7I+PmFYKO?MLfQ2nzEf$7@ZUwIXKaf`3efd*r-M~SseARk_%SnTs zsx?wa!5mG%`MFEwQhQ|HuQ+e$KAKaUqMg%sX>@7&(5Ce3bO8yM4-n(o|0XTaUpC90 zGN(Kew&w+hZpKjJLuoaVe8o;Ilb zYJ9j2e$o!`ui*1IT%>*<&m&Qf;E&=n4z#NA*@Hvi20WK4n9_gmrx&z1UM+r)qlwNK zCXiD)*UU~ZtKLh^hvWacnivrrvSdd`vK4`?b8E9Jt5t*{oIP%0BwH5AUS1A!Ir~g9 zNZ6MD6}QNSE|279y!i>3+T0m?J_bVs*PaL<`8?%H&kS^nDT2&)6oU+2NsHKTz_$p~ z?;I4JvNn4zgSikPw-qaE6-c6>j3HA3a zEDPLTGq*Z$`_4$Vrs5u0X`{aC^;BJvLHMQU*k2?12NyPD)C>80$juNZ2D!_&^&glX z_+kdt^K=cQ`qmrfR_>-HVMaI_UWo0=ng!UFr5f);9e4b$KJdNi@4$O3Gy8WQG^-v) z?B>RyA^hrzJekd26v|$)5JE|S1!d-C;}`43cht;9;Gu?M_J(9+<+RZEP3##Ofum1^ zLf;P$)r7v^JakF_4b{fx1;7s7Q-g2Z;ojx3fIo6t!>tkgp238n^3eC^4~-6ezo9<2 z1n~gDUL<=~efHvsw_ZMH-8)Ml(|4-V=Lfbn*5(r1`VUSI+)Rg;*~_bi8;srA2Eoqs zpPFR{3onXO=AmAJe*L!o0?_{#F_W#S7De*97roxD>U4 ztu?iw+$vc$0(V9X9yYd5iIKk_9p7x0?J4ZNhkUF25AlWg3wTA~5mZuJ^MjDsW-4?t zzn%Y2%A`SZGH=h{flL~0V<;X*fFL*H%h1uv!CJfiv3mQr5qq(`?vOu`@W7lgG`Dgv zvpc^Lpa33FK;SF5?6`Lfen4ZKrXLufU{Zb>)uqsmqunB2l*ID(IxTN+(DHVSSw@E! zrj6|W8)m}Se-~AR_^5|U)MLLbWbg}I4Y|iGd!+EZ=w|*w!k}*Ce?|~7n*Tn&DhKP} z-hj2-mV9q;(wvEMNiDVb=s<&UR&DK9wIq2$k z71g^$*1Js9yI;yw3zTXqU6Zwkj@V2hGVPj~(!W7qU|i_d`HOIJkv^h!=I+#@b??-q ztHRl<=p;IY;A+hTd8c%=2^-amh*lD3a}9Xn&<|6dyz0yau!wY=0WuHI$HVro%&MnS;czZOw;7KQ<2Ddi;UFc)Z}DyG@8ueYJ+_Pu&>0EZeAV~eTc)N51kG}AmfTKZp1Yjjm++Ya3DU<6a~?gf0}j2i%y|b~ zbqMAUmw(tNwNIZbR9n~JN$M&0PKL&rR8BhASVa}uH$@o+$97?<4iAeLu zUFXBV)INQPPpV&!XAeGyYM=0^4)MV7>qvKCw$jH9a~?ha131^a@GkJcly>L2>wXZJ z+NTfGqBfty=TPkveRmy#r=fob@uZI%<~(|?#HU-~P&(>?Deca4*Zm+cwND?WMQxsk z^r6}(`tCXe^Lb-`A-QrYUE;#Rybw-<4QFTkZ(xD2G~J4&X>s9sl*~QFFz}maM?7${ zd{(RUWvD^<3)HhkJ>%-RUp@b(o=Nq5Ts_}X^!`N8%s#k8UqT58uB1nxcALy3vdH{g zQRaZm?BGlndygry&#UL_^lV>$DVA{xApC#vL$5M&zvsJP&Z8&ol`L0ThYOAarjwMl zuDqLFu$#`|;4h)xSMm9GRsTnL?#Aaid|p&}MB_CVOzF?!vrpv_%=@Fp2JDQ=20w!k zFQ3nfmoVXsA@WHvY+QZH&Hgx)78=%#v3Easrq9ew}nu%bAs@UH;6XqI2~*LRpIRXap9`@ z!8PZLOMAGxVb=lkD%{CA_ZM{ZZ_me-^Iepi{(c=2{T7fRk||;ijlBjZ26T3jW`W>dHC|1Yk#+s^ zd!eo0L#@hZsEKb4{fqSPMk22eV%E7@qX19tw%?+ONOUixc7nX$S1hlY|L5fO?gx?A zTT))9!;nCQ&OwUg)pra$$MycQ?Jwy4ym8CI<4|ixpAV)Wcs%d<#`PB>2zG* zlgfUkRCX7VyhJOD)6Xj{#4SJUJunEk?3wFXi1&aN)>plsnnZ7m+(^fG^4i{*^a}CL zmHhorG_goSfc;~1Vc*UFiSO#bz(zbwdSx%W zjzFB0E!g)(QHCFF%zkMhwu5xad5)RA0>{>mu30Hw*Q!drGa>cA&B9Kz>WLfQAo};o z24r?Mmkj;$zF-OdXKKT0Hswo?!eLaV(Lm^FjBSW##gb$ zS4YS5vWp(VcBzJ0UUlA3pb}){`CL8Tw@if#h{n|8M5W)0-1kCA9rdN24fp;Jh zGy7H9lSlD;uG!C_C%f1Dyb|p$x*uFTK^PEy)vg;~9m3tk17yNBKqAzqNY#@#V*L?N zlq}gE>)(&XeG}5UI{QKFqr$YC@?Jc#A14HHGp2_W6*o}%2TLX?MU}rSd+`Zq(0&&Y zCl03Lt(#dx=OeTgtgm`Lc~ud1rN*we_qrBXmW$E9d zg%x}7f-=tQ$D2eucejB7+PVwKxJMbW->J7>ueYC9O_B9{O&xmUgkh=Ku*5f+QFO`tV8UMGRV`zl`-~Y$s!q1WR`0b^|n56rM`lC7H z{(E<+J0<5%aZYjSaHDa!_KT@uE_QfxN~g;fm(KU*jvpaCZ@uBt!TMODBNl84CS%v7 zV?EJWFy0>QZRt!TgQCj4?Zq`eX#b0A7pKC-Ns(gx_^?ke$#hR=yr&&MAaBqw@f%(7 zmbO>|zuqnZ%QE7L&W_F=5l5<*^{PLR#YU<4z|T( zvhD7cRCHNTwc@H|X!28g`&Jq9UlmEl(}`$Ij9KvPNzG?-2ijs7%UGMMPBRVg91QSO zLC1)#!ao|&)n`naIt}elo)S#8EC&aZrq0CI^=-l4coLF{_q22cTM`}VZVWb9O$H}Z zVMphRSkDwA>C|2x>suL5v|;qp$rKHl;txUq?GDHk!+73!S8`eq=J*_-)Dd@NH$ZZ27^t@F!x(K@o(4k5m|{(U4mkyT9i3} zalk+I5+(I%jdryp#W)i+G}#t|(qlHn+RjC_wqSRQQ0zpkJH7(#cJ{!uw5P#^qbE?3 z2BC6O!RMr@)019CDX*AQBe-%I)D3f|s|)|;3}{LULHu(Vkh?LjIT8W$Nk})ivJ>i@ zP6cC$1cVC)8v5o7EUN~!OKFZF>_ayh!cxUkMKL!$X+bav`dw|9fGc8-ggr95tR)$% zTNRDKZbb%0unjZ6 zho(J7%ApP=peZq_ZHf_2#kzyZ&g;d3(kcmwIo8^jicLyR@frq3J$n+2h8q!vN^sFe zT`?}}>^Lvh)7A-btNbFn1}hqbGN-y?jHN79!cd)QiDHgO6L3+mj;HO}H=G@8X(!`- zcGKAg8Zgf03ZmU$cV|)L<(3spEEEi-PtnPg^_dTsx&>Y0Qt)}lO)#_TNP}_Dn(@Z z$@y*ZbZb`(1sdQIL0ab)rGza>W6Bm!;1<|ra2rb)(%AHLKrOKpW5GomWF{efWqS=h zYAuc$l1>U0nsj|yDdF{L2Xj)JgPLR|Ej?bdg0SYPV0&i_a~u{9?Z(^NlQF0@RtOqB zda@R9KlCyuS159*U_aYh5^crIOD4(eyTlTle0Im#Q>IQenw^EDsLMhTu&%`t7eQm9 zXB#ywJ*4+=G}<7ZM65SPCK#(uqNOiMdR0{2k;9=S*5*dUV0O3oNJ-fV9`rD{g*!Pp zMT^(f8_Xygp(3taQ|as}XB)NbD5QJfq6z6a-R8+ICu0#A2oDmOV$?QW-B4$xN}4mv z!m5~##w_LQSi@jpl+kd?g-1C?DiJHaGEnJM%j$?>u`NkbdXtAlA>tYV{|p+rT*FXv zN}GGcybzv%bo5|odpo1c#qtRGz#B7!!IWmRy$gOIO|RAjJm6>x{-rfiPH2mfZcq0_ zmBTYtt_kdIwG=HivW!v0WRspQtUfLK@WDFC69~3;_Ov7@P4)ooO8;VN&`}snp!P(( zJ6IE32LCmd;2Ep3dBuj`1mh^D%zuAVSap&Y(bDBOq){U%{7YB^C@}pCdSruOzTnSH z4TjoUdTG{)t}IKXdXpEOe|`ttk96x)bp3o7kVI!&N9@|}^EJt!XM-}wZQ0<@i>(D{ zlH(_=`nlMd!STUlgr`c=5o>U7-_+h!ZGzHa>rXYpVqZ{4?vP>3gCp33F@fts3vm#> zEf&3^HMEGs`LK7GxUF%_N-`{Mu~k!z1#+t(Nj70wmXHt?x#Gr^7M01@s&M6X-K2-HrjMLI)ypF6F}C{4Qb2i&?3myp2iS;Dn`?(i!~&H z;o@|k9w8pZK8ya!N>iLzgfx5{69-;Jf2FAzhInVljX6xac!{a_@9)IJiBa+2F!W9; z#zKcn_hh8~@Wow+p*K?gMoRDK5%%MwrbjVx_g`u08OEpFNPvgKyTF4t9O7snUTKO) zjt~!TKotFzrZ)0^1d6C3F^nFJl)sVc%ZVdw_xKUwja2XH?4;;#nEsAbPe&@3Nkxqg zuU8&4oea^xK1$&QZ1OljS6Ml=V(JCK$s+f>%F2ohC_QcJw5npC=ltd*9Psn8P$%Ja zb$6cM&_^55?uJC1qAkhu&Awi<#_?&e2+$IxVx*l(xn^sZ$H2y}2n7o)woNjmSqr$^ zYDKifon=w%!-%(XfehdnmI`{HAQ5Yif^0*dg_y|oG5G!bq<`r+fqybo7l@4(@qlW= zB^KX`R72mDEeS;)0@2P`0wGp{MP!D6&Ys>bxYeS6uB5wjjN@cv+H2}%Di?lol(lY{?2xBEt zzRpT^b>bWY0K(>$C=hlE)&~{nc!v?GTqDya25Ogt$+{N*3p~)^t~(rXj^adis2l(E zH2ur$u(1;2?sWHZcK|^tlF>wGZ^}SIw5~H`tIQyXA_Bb3pfAxy7+r#4NKiy^aeBf6 zx@LWxr+r-1pmI6y;|2p<06D>oAkGYaFB1UPnP}2zZ6_0=iZmod0R~jQe29Os8z6~` zM#>;T3wuOHkq+As?da?_5Ep?8z{<8Dl1yhBFx+&yCyiE;7Al(2UDS3W))j-*RqYg| z1P|zvwAsRrYMV~86Gd$pSUg}-Xz|68q5x5K1;wA4NEFQo$>D@$nFyF9Vupabds##) zV=V~mBvX!Y74{E8p(kSzEX*MTT+pp-DfB@=V$JQ6Yg~7iMa7VP%^bvm=(NH>p6nU` z)sgNPnbIVwlz@l?`Ueg$oXDLUOEtz)lq-%|kxvQ$hG@9yLm<(j#R|a_sw@^Yk`<1Y zgv{V>B#0!fr%@cnq__hjO&TOi0O%6bbx8%GGYq05T)8}pZ?4f3TWR3K$#x3u(HCdH zed!QmN9-Yn)@yYq;`E5NM3)J^p)lguMwar}$R3EPp!_W>)k0Bhwb(1gKp+XHvT!oG zF`L0HJ;-o%!>si7;UVPLE#%%USNv`xmzt~d};88KbtnYY#1MzcqF z7pjJ$Lrx5NhrNB`Utbqz=UvI(u5{8;14k3p?XBoERf~1^ruwW@8s4lTBy%WuC63=U z4*X3DXDBQ>1Eu=#O~li8$W4W00(v?yPK4Efj7E{s)Y4kllfwGki<96UoCbj|*;A+n zHv$lqmBCO=Ebq0_mW;_jNgjW`zh|GL|=ouv~#nM)PG6Udb>gsoe76i>Mxqo`{5Mae6WcheD*16hk6c z1WlbHcaq8}mMUvG5Y1whO(+a6cSCe*M%APtQ}I*_6MzQ4hP)w;w{im`z$rmWg=QUs z+^o0FVG-eEfGG=BisHAH4qaj&1kW-RN1>~WBS!3X7@^QRr$iSh0~{w}(%%%(UQ0%M z(IBH*A|iTtJP%0`5O%1^xOgd=heD)*rE!-5WL?{rMR*)rmU`k&iBfTdrYXn(v`RYV z>WIyQR-Eg?#?r@XqaxZmhp@2J7taSzh8w52jpe$oH=knSF1BIPU20L3qVZ4xb4vuw zF@$a6^g<3O9l|j8Bg3Pey;$L8H98FGVKospL#L=`E=)?grmMQ5RWxFp=QBuL;5B=k zU&3y3k$;5{OEH}@kdnxRUQ<-^g5uKY#mO1P$qS2n0Bft{3@P1PM%~Oe9RsB0hRki9^v> zF0rNDNF&XTl@qop@+xIp#58%*x|+=H?ZY;X^oX4$ihz}Fy`hg3WWKm7r8=OTz|#1t z0YPwvoDjQ443P zOajgt{MI>?Wy!N{mqTgDs}Lfbho(9b@pP|r;G{op$Q_Ps8XFUL<5gODteNs6ltiPo z82`IbHKr06oYmpP>lW8%qrLLd<#d5hUqu9zIOW;ByP_%p^YS>qM45BKU!qVR_R9ic zVO%SkNb_R1!re;>TE$v=tQ9SZPCABEyix_1F)g8eB1>$X+E5v1!m6e)qjEzfN4N%d zRcc<1*k(oH5@K`IvI-WLAe?5uv;;I9Aw^0J=Wj-P#!w`zA`#Ruge=iUd$n#%e{ki8mIlAlXfO@^GY4 zTxN;PuerRg)}7NlPvy;PxZ0|Tgc}S3u38Y1z=BY?u@3ZT;>s0(W}sEGEEZkfNK(H1z?MMnnmv;lxyDjeZZH9E2LrOPdN ziduLUV>i*hQXwPykH85Dt`=sL+ibDYNd#HDTiC9OT|JVxwM!du!o3`z!WSl(isDic zsh+s$3)E0!O*pLZR8&#K)ue+XHq&&qc{wdaA`k>cZb?QvI}z8$C2wOT?KoG`p@e(4 z%oz=R5!~ftHfX6(ETCU)xZ;l3iTI|~g3kx(wS zN-bYmoaPvhL`Bd?0K%D(S&*5`bB~57Qllzham5XGj_%oujO)@ZU4jY}Q!B?D+-157 zcWy8U;-a?UErjIf)>x)E9qEW#bm7QAga@Dqmf?vI#tKSfZY7Pjba!{3JRy-c7-{6_ zqLdPCQ3~@{EJ%p-l+3623PO(%J>Ql!daz-D%zHsrJmCw7tK8%ixQ=WHMdXMmnFxR} zBUUYi$EcrzFO{S<1S4+H?p$on#ga%n4-jWGuaNfrQIQAfkL z*k4pmYK-QQEijX~tE9^tkr27)Ur_-%sLN=mXvsAsabZcAeM$Io7#BeXy(DZ05xZ5D z2dEuI*p85rN(s{}t3ihB0usIHRCh~qc@aW`%+omZ=0y=g6EZ|8FFW<~YwO^tb-+6` z;A^&s`4Xjgrv&Hq_Jz``YH1cZps>IqqUp+;gT+>M45lyU#;&0ZQREz%VTjZThT8&3 zwlViYe_?iFveHy0LyJB}uqG=5p<{l?4%1yuu?tY!3tCYTMvh{4iijdE zbb%7T@nb~OxU&z+V*em8F(<4fuA5WvLYYQN8i2((la9(=B1JbSR70(=q(BD_5yblt z2Ape5@hFU&mFi~quD1^)EMy`$sTO0&mOK^Z#mo4H2drQojtMO1Mj9SV}sX|kBo8DPK(T{K+1(7G&C zOC16PN_>0E8*Z#xLh_W{YMoQ~%Ur1bf7V;QKW=lMBbJZ3` zXlra0CW3b|)kNU>A|lwNuahbfVmG^t{3hW7V`rYkjSMXF@_>{EE1&|)zL z(ovvejW%)&Ot(4#z++u@B{1;GFH7T!t0-;a&=@QOQg#tX1#PhvWX*8yMsZq2i;hU6xNJc;pp}Fy@jfC> zO;*wfV9wG`P$UJG%7DX0a}lnatV{wEyRsPGAhe?Lz=`&2MQMw))JUh=XG&IZ9NUq= zg%W8*v0bEPX$5pfWE(xJ;^Iv%Lp^aWL}zz5}t7HB#r`YsbV>W)||>$riNIl^LroCp)p(IvD=Zog@Fm{5wS^T;=87rt|A ztevI@zLwK$5pS4r3NILoH;s!kqj=A;4U<2%s#7|w5|m@arb)ybVF~fZHaQD&2=KaJ zTD*vh)xHLX=<#7hBqJ z_XB5~P%)t@MVW}ap)O8CC6WV)!*nPHB8{j;C#3XZxeyW@@eVaAPWj3NF6V$0aQvB) zH)ykrJ)z^wugsH|2oh)x(-}A5)RX)+$X|qmL@3hemGZ`35@RJKU3?NQmt7iiar__# zUqE!%QZ3;ajyW;BydCbrpkRbjd|Zx#1&|R`To=I>i_wOwsfL;$QG}3!PPw{}*a&Ytr(RHQU|023G)C^jKAc zM5%}546uVux79EU#XS>uJ~@&_h>8UE+e&i9rBoMV?85S%B1q0@OOmo^D~m~i9Zaml zqOAhd2k(i9EiL2e0E;E|epqp35Qfx(_Mq@C>03;H5nSVnbCmhl^=iraS&lUl=uun@ zQyT*uoFEI4qa+H&$&s-fkjOy9gxHcKucGUz%{}z)v~bgfdg7dnt$P}NiKE^0Zr?Uyh4J zEoezBd{P(1##t^Cig~?v2`8IyztLDlhY)miQ8hiB-UvVUFgRi*)dx%PDi9cz9a^C; z39Qfu|H|SH(f*etj^NMbQT}Ut*{bt+yLM^2q}w??oGW);iz)EXu!Q5LY8UpsB3r-vD}~*= za+taQ*`}p?;_S^ zX=#Z0$P7Xd%Avy*BL4!F6pJbLX1HE28pAlb8XZgk zg_up8uAB;sdB{PS;i^3>w?${3up~T@d;8>NSlk;Fc?~2na)~cXw_EdSjYL#kmX)f9 zT)NZ?Ln=3JT%Cg9!XeXWR&8fDodv5YzQUq+LPbARiw+NwX{t#0gG$NK(wy#;^cd^9 z;4zA*yedSnh);>tp*`O_lx=9&L^?_;lN?sb9|fIcS3*5)SCYXX7f7DWN+#&KPcbLh zSP8F;45T3r9NNL3I-RDGmlDCnLIq)y4kj%pLXSm)j)3s<3v~TZx>Qt=lvZq=DOV?e zEle4dk>2Rmf+eYhvFBGg*C0f#Mn$4DwzS6<$a~Hz-!(8+DA7R{qDfwtq0tT}8}XV1 z$)?4iTd|T#xaTr)RaT8zkzTtzp(^)L`moAZS)s3O>Gw$wL%0%#peT;!7^C54Q6(&w zC&s2Ltx)$7Ft{Q%ddLY?3A0v;5J^i|cgTncv|=(~FtFu=r!7Y*mF&fSjusSpNu_Aa zgu$0~y|_TWL0_swH0J!^LJhsTB$j#N1cOVeP$SN7MXa`%tfN*=%O*$Bj>gO;Hg%i>zRKqmWfERaYi&|9NAb%uFHic_g#iin~tg|)7 zoS^iOBRZXi(}GHotIhYEhE-RI?I4r1T|Txr9gq!z9QMe)Zlmv-9MmXtHk{I4C<6vi zPd96y#fA_LNkX>bIDW$}n@q;lMdF%HFz6i3!kdG%?TRRN4$Ze@>2RD+r+ZNzzGo`F z!3K@T2pE@CTx?UlL$fFEV<}Ha`CoJOA%ayy*W>9#p%XvrqJFPHs#ZfE95Jhof2XNl z?$UUd8%ywnEsfVCuB*#E4b$_rJ})kPJ&DlS(}O^gBsZ6Sh0NRbH2A4m(1Hq6s1HX{~4)|Bl z&`spZC^&u;4Y3k%XyB)=tZV2!B3irUk`B`$<9Rq@$1urXiZZTC$FY>iJ7{8!$EghB z;Rv2n@R=Qhpn7??Qa#IzW(MC@uWgqZOUl)o?#HSpvL-3;4kt^$2dsdgdS0lWWk!>N z^n=^ltWhc${FWxXNTVy@QuSP@Yc+H!aJ7@AApN*oK|3`{qb^ebqZAwz?&oEi9bc^% z6!!bNmixyqMCM0}@@YLXmY=<0+jd53SQLk_9$%;5OH}vtgFD5wMj0oRdHJC{T|ogu z>iMR6me30>I$2c)8G~VNuFP0mqBU=029Kpv%{PD}K%sxYk^bo4fuujo0G5oUHNz(% zZ!MCBw^}I)U7%W-rCamO94=awB&u;Z*ZUXap!JMTP!VYx;wP zSTZ*bFClL&l7_chDGA-6TItuV`6R?eUsot3A%-0$7nf*FcEI)hB}Kxi=9AC}P=2nc z9NMt5u$<}YQ!6I)uB&HkqIpVCZ@r`_&-?d)qVY@hEHN3mi1{Wm3^NNQ770S*1%tT) z+DMpsLNVh|Z}j%B%Gy z5*+8`P8XUQ+Nk)Gvup-ggw-tA2%q@)+(@c`$(+6!^`PB(H?V@Q+j; z&=@>b{niknF+54-kwH~p#D&K2H4YkskGasiiskKlnNi{GI&aw1nB`aUnE@xgVGr4Dz@T z8pGT-pfSkfLTC(ge}Tr}f9n`=XCYSxoqk*1egn(jZHv3zrhfJYSPXXQEQ`VGbXEm} zyL6Vt;8QxQfrP$E*Y%4Oc1YLqb%F^xooHZ!cWc7FTJ4J9 zmo(ulIzg*Y)cZ_9|V=*9j)*bfSR?zOM=U zYTc;_?$CrAxyy5g@A`+U^>x+87Ts1ew>3+*0HFH~+>$ZGd|GmO~QP=Wyf(bgEXkda)Cw#S*sei_S zT`5|(cu{3vit>0-y;3==l*hLChvTK)p*-)Omp<&Zmprn()RE;SUc%6OX@Atbzolez znQ}ABj77}*KJ9V(;vny-T4QuA-)N3gMHgrk%TL%B5BU3PIh`1munT1b?6fK7-I~K< zc~AYAAB_mZrzp?7%xL(S0&_acVhwmy%>hwU!KbUA8bsb&hC7`+gW5&l~5c zCc`sS9-%4lex238;4f9yXk*3es~=K{=iQmNDYZY8`g?^0EoK>=u4IHP2I=1#q(5-R z;ICDdV1tFUTN{cBmdAO+_gz$#gq?3@?BBHtRxp^?S&hu=Nt&@n2H7}(`je}fvCW#X zMlWLm@3V?ammHs5?VafY)8SM?%r9%3OOSIka}^AJQD-$XYc83wjxmd9@W5(LOw@v` zV9=3m^EIlJRZdi8W&4J%+I)l34b~Bf=TR7uIb26~=uxO((CK>v56scJqYd2A@98n9 zV9*(sh7x_p2>5&TLyXn$G`|%LvLeB+;w~_g7-R-{c!0$q zD-*C7nuhUvr!65e?SPXLCONwC;iy^JWu*f_7pvB6}5&|s-*#-jZ0|?8JjP?L{ zyg{2m76+^%gDj4clCfAax9V}OV34gkXfepP9kdv96h!YgSscJ(ki`L746-qpu^GrVJ|wpU?0>qrw%B*)16 zx}H+CZqRM{x^AnYf6^${M#aYWH9I~<`TJ`9#NXCVr>);9uv||TU-K+GhtQ(UsutHK zca7l}H1S0YzN)ea&HFc5Sxi$~&L*C~J(`kF*5@ni3w14@tl9qFp-~pGfxJl*Uc`p+ z65W5FHZY-|jfhZUctWj;026`(uy-{x!1Y9?S4h38=B=8ACayP4x91a5T4CR)Yx#u4 zF1RBki~VCqB0i1y`)YCbVK})h?mV)*UH^_^-l^4KsxH^-t~bnA;6n8*rD?pN{7!jD z!vEr>gmq42dQH5@^jdV0>E)L9$0?=gSP2-sS7%uaKB}`S803g8B*Br|_fC?nln@R# z$F->2-fE>p;jITYz15I4T<1P$Yb7M$CC%M`SxdyH2p<5287v_&rot$rjB!hcV}^0c zjA_H6ysG)FV9=@Mvm{R`?B{hY-<)MCll4K1kIH$f$kHfRd)fP&D*6|tI_PD?;c!ay zlF3Za8d$*~Q!e50jZxUg=~}*CGL=S+;_Kx?RdlOH@%3`l$+Ayj^@PeY$R`u<-Wgo! zV0lHsgf4ba801rr5~{?t9F#+yk&K}E$xibO-l4O60^;TwrPMt4;*^-wUKE(M*L_>M z5wOEjU~xlWd=}(%-8ZTEAm~`V^YEeURYe7j(#+tBQ{+hEWbL~Oe86!(F!#?2eACI2WzIJ@ z_qJ~C3I=z7T%wIKR`}+#zuJNl)vBF#B*d~jQIUp#QZyJ|;PFnp?unIkbKEEsj#+4rz`Sg%x;}ljSGmn@3ED2djidW0aHiXfI-Y z<5B;}YH=If0Ca}ia8z_Lga4p3j3z%Tp3@QEKPCNn)q%CTBaJ*ucxsf0ckncGSX#o< zjB8_V@icP?E#Ya#a|~Es_1mI2d0KPS%-Ah@A~kz!ZTHn`^4Dte*4m|NJ*?aEO`>O2 z(Tf_Tu}!hjt=Vbx66RWtG#Xh7%ofDTgm~;qNcwiw##Y^yuj?NT%0H_H99{8sicx-` zdHFCX|K@ARrvi-PH1uImxF>(p?E19-Emh>$9^YcaC^u>IG%SkK(1$@8qZ)7;^66rw zLaEcdEMPFKvzi#})maO?>Upv%VuEBW7`|LryMn=MR2HEz>`=dg!L$pFVW&4&d=Ms> zBrZBL$P`O?HQXPkwT0f+xX2l5A44TpA}67_r|UZTC~ z67{NwYmZk_EX52m>oC1uN+ql@GjNaAiV6lDLXCbxKFh#_9M7kMLH2-3Iztug7dg!> z_BXefU4@JEN?*Z?Kd<;D+!5}|R^2-v-zAu2j^5X`e1?UEJxl3C3CS)|Mcf%2gR%y_ zcbXheWU)`RP4~;EBZnX~)*(D;sx9Vf4geqbeQZ}M z>?OLEk1!W4b5I!kH=VWcZUx?_v#xkffzRtKA8l5uQ?(}f7S$1;@J_&?;_K%o)xdV$ zkk4h=ql#X3P#D~=vwZAvt*10f6N9hmEZ_8aT@}4QJc@C;)Qi*96RQq`Kh;@_pH<-C z89X}|zwikOcAu%UzM{bII$3W_l%gJjl?ABR}n1fd}2aEh1Eb?=( z=rP62Ud_~^w-k6>keOPekRDWErRKY0x&nXTWO47fOCZmnGgcMe-W`JV7qkLZur7T=^#;+N zjcYmK=ye5yJVXMI69@F*R519S&RW1Ai$YZO3PWVFIF3_&7nz(WArNOqRWQf`5mkp1 zNrN76J(>weBn+}>uy`}bql(QvgDeI3ZQ=1 z2t{(27Ri4)I>aFBkf2vWPIs*>A*Z|6vYdjBobFo7i4uy#!YM7MyViaHIXMeJ1%o`3 zV6++Jez`{fJ3-kBvb=pl7We1}>R$&(7K3l-EQ?j)KlF657%b6iRt3-+u7e{pB&^ez zWDK$q0Br`XPjUyB_&c~ncTlswgqH<}&m~?yKdTH~wKjM@|7eMCh4XoIB~X5&bejz$ zx$X>C>xFSKFZ*9`vfff!d_hn$OEnpG#&|J{V4+?t7qb>}f2pST?^@NH?+@SMDCBWuU3pkxeK z{-w$%vuji{H|XXTGi|n%@R___ z__3D8BJPhfKE9datu@N12zskgo>z+Ada#4uY9-9>hpWXs+M|1BdD-!zlw#S7Q-Z${ zpsjIrjNb&Zx8C`uY)3z3$e%U%>X@3wp}=436ci)tpk; z1G<(k$iTID4T1&WT0G557zM87aM;APoVI*Mfj5A6>V7Tu4&h%^(fb<3*U!QG*tqftIjEao8uPk4PPr+2+}dYPEO^s>(6?oeb)BK7#&Jg|lx7T(>X=7BZr zwYl0nu*TaalXJD{N8(_|-z_jdA&XhxpnWZi8Gp{nN-013CdZ%l_GG?tVVNL2v@(_l zQ>45R)H6!d^HwvWp7yYV@K!^Xw;DUz%q84%f2}3nTA%l|wb)6W*AbbcE?$m&0&({M+aj1M46qdO|#V6p828C6^X~;MJ9}UXwN@UMy z(fMrCM}u;&YJk-hhGpYguZDwX0asFRz?2Lx*xuk^rJz!Uo|j6>$%T8U=(J! zgeNotlpUUi&~1N+f|0nX50BKK`olv4O6y83HtW`U$A@dSDhi_JIm*1UxfPk-n!GFK zHsQ#yedVR5gm1&OxV;i6*LgYvCzl!FcuEPs_rultf@*8MdX^d2c>8&?55;E)dC_u2 zVf8B!Ivo3Kz%z>QA9ULd403-V_*;BKHd>M9QGz{RsIofMvxJG~T1>hG$}y_;1Wl!a z!HGJnlEI5~)-}BP&iU{kq(l47?cr&T9ztzGO1lxpL5M9H)#}K zykVItTBA`GGI+br^7-3$siL21lx7BJO_p+nZ*Zvs=QvqjnKPjuX+lj5{#j=&{`y(6 z-ec;C>6cgF>1T6ui$AHr=}y+;3Oq$~;9G*31E;wwxVdlX=B{AyR!!TwU4c(KS^f_D z#-7FWn5spgIEIFmo;tIl-z) zh~B^LN&$bZ6|s>Sxk-Ul8;kDb_g~4 z3HeMvV>2oyt5@*I@(P4&P1j1ZWVQlJ5c*dKYdAtqtqOnhKBthI|NCl{QnFH`|9_`7 z7A-g`^U9X;SWGNj${S9)Obb)gOA1+DN+l*Ti{Sq!q*ZxXrTm{OBT{bf_*0%&0VvP= z_ur-ge-Bd=)o3^(x4iv>q4ajIgzfyu2%YcasKL)s19S8htxXMHc|WI$*t>zFbEaBf z*t?%RD9ONi&Ns=whx6;>FxW^RIeUZ&oaa3c8;K- zANiKW(4W(WS6A>ROFV=uIcfJI0Lt zoP)w`9j*J(I97p9*L&nc1KkYoH%$YM~Hzlf6T<+E{jZ8rN204Di1Qu&Qtgu2FN~i`FT@t9j z6R1Yu8b>r%;PtJflZHme{>#esaRSu}yw(XcAv#dhRgEOs(+M<6;0i}HRN$vtgzo@U z`E)r;^`2yFHO|tlL$b&uNEX@V(!i%WMV1QO=oVQm_&UdI*uxrr7-lB8o6{1*=4mJi z;x|Q})}no`)#n->c0{#4U6W=`*Vjsg+PIah7Tm)zi@KyAt}~R1Vc8~71`(R3Z)DSq z`#-y381IN0#+Pb8=?a{EBylMYqR7(3%WdIt0`JxVaf9+}4P^*m!WY=uX}WO&Wq`m@ z;Khzrt+d?#kd*Y}5XUR(^eg?k)iH^hjzo2fV^S?$|FJ8IY>)Lzcs9u{{x z!(;fv8t!vN$24qmf+_;L^P*!A{i;3ibss3-2EnZ=j z_#0mBbf%r1jH8;}2&n`U^d6%`;9N&EbiRhGT~TDc3bd+L?=kyK6gHxTGQtNq8i))~4#=weu~ z^cC(>ev%|)N|>Qw$$|}~(PZ>cM8Quxl^hn?Gwd5VrX;)G&S)u>Jf^#%$P%#*c|;fF z7Fa6QzdFa#Pzf~I>H4A38AZ*2l8N*LijQn`h$7pl zN{b)43(Zm;3Vt|&6&Ia=j*epClVnxNuQw`(G8OhaemmiISIuF%PB zbMmcq{T2EfQ7(;&QWF^^MNbStXMz|m@Ips4^cfAmc13>`$aYMI2`q3#QL7LsYr8g~ zp(KU95+)NY31H&f8a3$tX)qMpIkGyEb5|$#>d_jGcSV20E7GKu_LgW34Do1_s7YH) zdONw43UmWkOAl^!tcD7d25;c0gT$6V)F;tyQHz5}H$=Wim+KZ5HHss>8ZInqAtc=* zIW|y@e_+zkyVDXznzwKDCBPtarwZ!ouaI;gpQi1n7qM-uaq@s?RT%A-~r^3~$aolZjlu4~5`HYif ztu(;fPVu$T?Hx7N8;I=|tdL|j%gJzf1B2qPyux}-+AOTs{>rPwsaL5$>8h~C-{e%) zY5cogku<(EOasTGR83;jkuF(EaFRuaB3a}oG8T%93o!QUlBO#o%5~;h%{e!LZjofSEP)+A|NVhI2|{#!de_zX)TUyK}mM7Gti`a~$q=}w(r>@9$i1fl}%ZhX(+28Q%gby|%u^@hTPQ1{xYU62!|j85U{cEIORBqoRmOAJ-&uQfgq)D_-V*0(%x?C)e0Qs1deKR@p8+KT7CQtlN7yH%>L^& zqnH#pCQ(DAnO3!ROiBd~aYRD}p5ut3mTMA7OzH3tJXgCx<`FER8aj+5);PB~fioOY zZDgbdCI|^6iG(M0h7)OgWTb|2YM@mj2XCE@xY~&vHNM4Uy<-y9BNuDc4US2vz{efY zP=Q}NqNpB`Kw?U@68y1tgUl;fLN!!-iS?3OoWS=SQEgn~w5BEn6WGGGc%3V{ zTf@dxj+G>}+7(@);Wk(FkcRtQ(YG2Nbwx(RN7`Uqg;LNlBlvnPGmRR7m+Lx^ncxRp znJM^5r`k0Fk2s>C0+;K$QnZy3^(L8A{3V?~$pr6rWoBeO$u9Dfr7IJ1DmAvfhSjd9 zPA4gKLr+SwmQD~N>A_-GbdrVxT#?kMfzEx(wK}nz%Cx86H*o)78vkWyc#W3;o+{;y z$Ar;CVtiz~H1O_|#NMf6Q_~4{%d3_0l6973c8Xw~1IZ$jXs9Q4>E@pARA<;q4cEJ( z=p=@Hp<7Lw4DSXB3~N1sL!1U3wkjf1I7-v}>NH@~IrU|or`rrQ(hPf?{;QFsMmWXQ zNW;u?MbR15+^9=-58)a~>Zp@cjS=zLtCQO2jM-tsbfb-R8&8^ci7RTLJtIOJHQIWD z<2791G)FXgj)rdR(SH@l^%@@C!%@o|2`r|j5f%7PUG_9*E*U4&p3DmkT#&{@9n?dk zy`mP}ZM0WEr>v;Ol9-HfOvVbF<%p^UhRrFF4VJCPQ%7f9)mCZfPAF09{RX^buG!`W ziY!Y4%ekk4mw-oBDJS=Y6V*D>+%gU0am{;?B^mW6Dbd$@kDJ!M62CNN`;LpO%}G(kmA2IZW;lUL_v@Z^Cyl7{%UB&~wccYP9$D74I^g3@;HZxKL92du zO{5afIHN7fYqD0kV>HTSZ?($iW4&)+E*Fz89FwSJmYDnxQQp$tUprAs1^(iQh91_i znQo*8&KvLkKM3@FbVg0xj0Cz#mPU4|G=$q`QKv{-2W;a69xm`hM>IZG_gK8%WBFg9 zVRu&)S-iyV>;#JHGBJ@d(eVQRYsE{z|7L87xnEa}PAh_?vCv2YrQOI(8tx?Ba3mAl z|F0WUO8nGm%+ko{xNjoCdpm)m289HYbQ?+?Yp|b<$nbwRd3KH*3sUM5H+_Lp4rWP# z(q3UTa+@YD#X6b-;yMZ6k@Htl$*|80j_0Iwg&}B%yXt)WU;*>vBg3Iv5+$^mxM^OXQ z^?xnUnL3kYPDW8Z{SQnUdYMQL54StUMR!Nku^?VNG^Hq_^7@MUIwg zeauX9j-BBGlk_DMrp*o-R=A>>8qRe^e-(SW6Fcg3^Z%lFsSi#!0{^e8CV^6P?djMM zEREGbyOEhR-25$;feqBiZJMa#M{0DY8(W|R#OX%h{}?-J=9bu_-3AqSnj@MZ&F&@{ zH3|LK0!h^_acUct^glDXMhE=R4g8IUzqz8wj%}czoE<@@?!%eV^Rh&qqspXJq z;M{VtjwC&f`|jf9c2Lv>_doNJ46krnXsA^GKTG;19pGLkP}C6m2PO@j$K<$k`*~b+ zKSv#8;^pS|zhtsqH^8e-L)1!oKf9vHVOXaR#w(qJa=5_P9nrAwH2ldGMFzTBt8Q>i zs{et>TiSb{6J_Yn8kXymAO`MM4WD#Hk!5+bs<&e@Uc8REqQCNL{?{f6TIHrQAv$o> z%pzWH;3$(OQGv%s2aY=W#LEpFWztm#p6665s_g&3WU~_`>Nt}q|80|~bbII=+=BEN zar;wDra0;T6B8LdZb4CZhsDG#=%1L}tkbM_(k&JEv?Hp1R>K2&k8izJ3;y0Qs}(2% zoy^>pQAi5B&2g(180MyLkA*qw`z~>MkF{ZnhT~k(91Rz`q9q!R9if83F)S*>-dgha z0m#k9gE!Kx zp#xg{+_o=`bZg*suxPKplcTMx(NgabSYV|iifTpia!vHI(5?JL?Y+T?64gFpQsI|X4RT^fE$CNk>+2k^Qh{-f*H8(x&=p0tk$CNO0!6K2-q0#H!_g9Wyc0NT z$}t<61xcx~F-a-D%%qQ(CNwe|<4e7s_C`!nztnCC0_Eb;5M|`j))rcXdVnIHNJY82Qm^U*q}rwkW?5+6wpxa^ zYUh>ihCzF``{Lsh;}f{kJ2Vpun0M5z4C79P=%&uC@uhKULRBE8-z|YFP}Ul5l#{NK z4exU53X)NkFkW0z8IR1nNHq+jYmnPV+OeB6$PlHW0zs^;Hv53Sn0eWVG(35%7eA^cnlRjDb##{UF)!%m~_TS*o8sNz@d=JGL#-m=afu6h~-%eqJJb9(Q zr@^M8aBHw9ue0w3um{kQ)(}r#mG4ckr-@a2^7{II1G_#Etj3d9?epR=oQprJ){{5N zmjJYqEQfmXCK~>qQS|*(d}%E0imVdf)7W>Ua!#O(wj$PTWFPY6rTA_I;~ZLh^3r|v zU|&$SCwlU1!`~fFFTy$Y^w>ACONpJ~`v7~gkDW!angFdPHrtaIF#K}?zl4Ezn12c2 zPk=Ew{)+*R0D2b2(1?f)1g^j?E(@ErX6(tPMft5osj*{B1hp!mpeBnQ3z}~A1LYFO zf!fxHa9U(d27QT)CqY|koeg?`=w#5&)>3p_nICitXqB}AbPUl`K>J#Efu2wFRM2Yc zJJ3&vP6Hif{Q>$t(V3tVtpXe#m!YX+XMs+)egWNyVH!IdbdEIu^F$F2@z}YbXIoQ2 z2axeRGbXRjv`z=-(DT7pnAQUDYBE0)e64A%1|Lg&0r)1<+6F$I_}SoFOluPI*o6L% zT?~G!X)OWgCOQ|q-n1?Nr|}WH419-a-2zS{B=$n^U8Z#p_!p#K0sgFMJrB-pdI|Vm z(|R8~F$wzB;P05$LGb3p*MRRgt+)WDLE@K#e`Q(&!OtRo1^7YJngYIz_?6&?O=}A{ zkBjx-bsp#_O@ z-va)Q#~LDhEBJnoHA?sm;9q&HslsmrKj^XMf%7Q53H-3fItTm)Dt{YzU5vF}^tXYp zh%x+EqcMswR%7SKr^n85j?mb-bX2vMAwCaBs1bMqwh4Q%iRlT2&rEz5cs4m#nSl?1 zlgwnQj1i!NJn>h+Wu)zG295%!^oB}VBsa#WO(t#xngRNAvAKkTUK_g>yG_3He4DWE zh2iI0N~zoiM)tls9N@k?g)Q^sCHU?Et0BwtX(D-4*ae=v#=a-PMv?A9npWNwzl&%R z`~>V=(ygFL@Efr6h^?ea@JFyU#8%NH_$$~w#4e#pumlI>PsA>zNw6&#m#~H=!H!^w z7_`2%I5>U1!Fp5H>u_xP`h%sD?n+PInZ8rNP9V14lef?}1B|0=!eQ$>UHq=5qtv$$ z^m!`q8ahagK!4zvtC3T{jCl~dSWoO8>{5JVeJ^3ptu~HY?R79Ne>_c#jRF_IQFjAX z+z4EGyde2@aNRG|(SZj@Peq%_HTj49z%RzjekF&7diU-_zwW40(x4<1hK;$ z`zs`2WhT>fp^IpY>NoBJGc%Q{)T991h%uU0Llp3b$xOTw3Ee7+*w+m72Tq}prbiQH zZ6r>EbSqi(Hv_ZCqBo>r7J6)63{~P4*gQJAekP z&xCdaO)>nh!tzyezb)_2|G-qw^rD1IRE&@g7MUTgvRn*FwXyX8q4PjJ4$1DrLbc(me+&v z6!Zs;<(ozKC!Klj0prXJ)N_>euuv0pqV<$e59oC3d7&|&bF5c|dO^>&-Uj7_Vrk|v ztq;Lz2*vtn<}s~rMDGV*Yg&iIJq{da9uK;gQ?bCem{ywbcyOF~S_w}8uQ#o3;M^RE z;5hSCi#`c_muXEFo(zsN&zZtg!1v7plLlW zJPjOYp0|Z#g-d6i@4>k}nuFuaL$f2-FB2SR9t$%d^DOX99>d=OBP17%5_@}~958H* zse$Yt0qLn^a7SQF0|we^2~^jT)t!N5WaSeyjgrJ#fCj9|pd(0|3z}k`BQy^*-C739y_^qfTdP4Al5qiOk#)Oh3qeb*e}P_0 z+LoZ5t=B-g1&Tqdtj|EXpjM!L4Sz3KRznthSD-&&3Z0hK(QWuAK`@JScL%1DE^KZf zGsAyAq?^g0K5#J^xUG;(2D+_oh3XlyIuN)k!b+Xjo`N*-6>PjTlH1VS5i+f&AlzWB zk*Q(jfO0)f1PxdxfO=>NRSJr^BN4a@x!)IP3>cmY6{1o}Y!B5?vKnLt%E+u2Hd0+m zc`TIPafviamXTdQGm#>1COp6l%mz+82OFBfV=K+Hl-M%UdJ^PX2xH4R)2^7A7Sn31 zf-*Jyw?g#_+3ybA1sI;%Q{Z~meiqRGIyN7W=~J;^VpkpepzkN_x$hsMY3&y!N;IF~1B>;$N2|8jT^fjo9k;1WQ+SV^Xu88I`U@CW?2L$QWzz6;y~ z7~TTA!TBU;`1b-{Lss7g-i)xKLXE_qAl*p@gU!INWDzzXxs$2B>QwO=nGG@dv~iSh zwHatdE7&GjYTAL$J{x;FX9misS&P7CLLDflW~~IHP=N|QTZm;BG^?6GN+Aj~4lIU8 zk3(#3fMd^T6JOIxdl7uLS#rSQ5p)QY@3H%Qk^gP2*C~Wrlx0 z%+7}>E)e(}Fub6 zz#=wwxEZLSP^x8Vjn7B2k$5_!L9!TT2IfataACAD64yf&BC~F0U^6g=17{Jl0z$tx za5rS>96azapr87Lx+Kso@EmyT2QW*qDt+H$PhDW4(GA}rFbZRJr31>FiW+%S(CokA z>OJK&nBkL3>u9yssWrS6Flk99*U~k-zQ9kVB9)10c>BSmKbhPNlePLXKXoJ|vSRX6 zN|ce+t+{ss%omY)TzXv0F8PW8ugvB{6`$>0j2&04eN0?Tl`b>m0!X)!-^iF$8gMGO z*YI8f#q*>X92*zYSDX9agyarr5_0@>MR*^eXRP;0>^O91gs#@M-Zw;A2I(k~ej(Cw zNGFQ)h)6p?I$fk5Ou8JmBcyXgYKgQHq-TpX2hv4&cxFD2_NtzxTm524RF(3u{sSq6 znYq}LR%9;nSaf#rG=^Z22mNUE0i`xz8nF6-`bC>!4G7n!Tf;!9PZ5kxdK1EF3yV%j zjyBf_P%RQ@Lh{arhU?_<$Hm+#*|}PF;i)HpA^R!IM$2fK}hG4qe;?e z$2`NEiMftT^ulC^IJSZGc5?g)CB7c*m|%G6?8A<+aNH%1b0Phd9FM_qf3#!1;oU5b zJ~%!rjt@hch5KRVuXJ3@&^_cH7flWCo8st)<6d$67SiG5cnFRK(T<6R*Ti7tR0D8) zM;x0%x|$rngJauhN6YZG6vsF??ia@jar_>RmDN|w2L;0F}#Cd(v3{MfJx6;QBiz`cMMFp$DpDZLALG?JBl;uw5axr$Kr#75zJG z_ea;Sz{pq!6F%8>jmg*oOv@RwA|~T5!Id%Ie*tqMjVTeCex4U;3Kc2RcSZUhid-v+ zd?(U)4i#w| zeO9FBiL^bWdqsMgNIO9Kj!3T&X-7!+i}VhWc7pUPkv<~Q&X67y>2o42gY>XS-w|m! zqz2s^#K-#;q&+jx8_lqi3214ig;Pwrd9~Ln1z1e#YrM2*Sqhq)33@GPz`6vq2hr<5 zar?FomU`vA4p3jsZ2-*d2-CjiYA-(lp_{kn8jeWgJDozTr4YOf;=!>FG~JpAZIHB= zgWA?Kp;v$wS+hXd_)5@HYk_FjgLbwS3*7)(Wdx{}0WuG?M8wE6Iai%(ay*c6}JizyEhw&qM$UHv|^UcXh=RFWEov5Y33GED{ z7EZyB0mc(p+1@Z_5E$73*P{U0#`oCf7@shH3tM{;RL>LW&=Hq{1p0QuBALK~&W3Rd zffZ%AUME1m*|VC!x(ZxK5ul%-I6`14fDf+<*sZ$Y5{|$ifNTOg2ID>hK#PvF>55J6 zpLlj(7l(Qk#0BScK|5jfpO=A6@HwzT0Q(Anwg9=^u-Qen>oS6UyBfw|(w3pPlL>qa zv#9`vk-sY*{9afL8Ha~2^C9dVR4rDc_hw<7y&49q$szYQRN^27E{Y4<-O!_m8KhtJ zXaZo*gq;mw6kHAKYjuP>B~nRT@RTYnN1?Mf13XCJHGn4x1iBl>%K*xGyLNg;oI`QJ zuCQR|NdWA85db^iD$a!g8zJy%XYX&9ubPw5~FY(;CzqMvcyb2A}+i z7B1pq*3~av4nb~Dyf|S)Vs?uQ&hCNxIN-r+2N=c#0*waZ3ZB4gD0Cs2(iiqGAg~5t z4S^UO30D&s2(XR740zp7U<<(G1l|I8fxvG7Zvzy4N-S%TVf;W~2!_Y+0L6ZcWcg>% z1%+b_oI+Hn4P^h+7R87R5~biucgXLka95OxrO51|?jVAmq_sRVWb%q8$Cz_|cL zD~X+e64wJ14#lBGpQ(CpuY%nT(9kE}zCn0wN z9RU1P8xyKj0?z^D5cm_I1OVl|oJ~8!_)PEZt#E5R9+E=&7uUV=*}|}2z$maumAeZG z@ipM2xZrxE{t9@}KFYH23T=IZc+G>pH3t;YeWH32q}mdg^2DOQ`8kv(JHq4n8A)Eo|&d5x74EHd^#XOXW{YKz^ek$hQei zWmVzhHdz?P>o)Im_T z;W=Xc99bu6=1AXC*22rh`g5{wrI{oBNm&aYBG%>vSa;LRktRWkp6!hhzXfe%mRNZ; zz-4T&LIH%N`Nu~4*~Qd@E$-7 zfQtKwj+dSb2|i|3X0W5gy*+Xl7C_Mxj_A6R)qJTSQ*pYKfzXM@bheFOf<5_E6|HkXJxg$kCh)&5i736t>pN zo_cS0LSYGN-tzCx!+eVsLSjzL8`${+t+o_UiZ~q>sl7Sk)DzKE?Jbj6v|bM`w(ly0 zq^pJN2I@0>N=6RBn;{{#BeRk%;NO?JJQv;io6AoyR=0+-+#=)9Iw)ybZkAaXx<)7# znbY#!>}=5rK15%>r6s)CN$EG$8pdHNtb^hogL^1mN9L`Q+5pe6nj%a3v_6seDVF>j z&(?j2PqpOVkLDYRhH;{2UDXJZce9>Yh1qB?j&THkEjHi|%z5 z{DC7g>R+M`vw}Zj29KMFp_vWPlt2%F76eWO2oYETPzGS%0nm%U%K$Y1_~f=i*WF0H+b4FZnDWP!6z+z#M?f0CH(@IEP{_wt|CTPwT!s zTJz=cdhb@)(R$DRHvq5Gx(wGVx8(r5mU{(&S9j?n^m=a+0IvXV2jDf~Apl+_cEfs& z7LE1_09r%ZZvgPZFNg-@g&&<7XyI2xi#{Xw6XaR1Qq21iShub8nDmr+sulbaLyp_F z6F}36Xvr}E+_vWdaN9NkD1*x03czjqG=OT`RJtK5x0t=DO$=i%#)&x!*CNj%Df%SR z8&vI}iM`+SR$>1WS@fm*)CfbLuv^)nJGS<30s6#WI`Xp(qY(^Hk7uOCCy@Q$a^r@zCzU;bu+)9cwieIvsSJ z)dI9P5;IQ&ooECOqm;}K5I^0V8Dkv;IFTaHg4S@enhhGTewH*&2gNlT)hm_qa@wFJ zqK_p14VY98s=3KXrEHW5?q>~#$s#hTq5I!rLJxkFiPvb(bJO)?Q;qA*UAocm=7!Vb z9wTEe;&5lZ=JQ@I_%Sr{9NjzK`$YOYq-Trt1(Ci0X`M*F6zPkQt`Mm=O_%X9q-#YQ zgp}qxvl+5mEB6&bB29yIla^+bL(0wly3adaELy-~i?(R)oeeQx?(NHgqZCpn#w6XM zrG|GC#CwZTcC4>O%&l5{g*T?&g*yZWGH-)*ifQ<)#{oDE(?|WfTc`)rYrO*MZ-t;S zpaCP00GybP&D&6zf5xVzm`7u+pFk?f>R2qr__~=6`3ESRxx8wS_e?GomP_wUZ33eQxk*Lz&eTn!E5`BSs~6Ua z-k{nctc2d6dJ>EtuO;D?(X)N8imo-iVdC2_%C_`^iIH&#oNsG&i7E9apJ}!+({WU` zNyQfb|Js}KahsMbC?!FgGHg9YyOXfO3+l8TXJ`1(LW^KvS@Q+z|f=-^7l7)bYx z2RjDmRP?&-yBLh7lvMOHYUv3fbRsrWAx~}Gcp-LXfYJ&CAx$jCW*uZr2AJ`sO?EqX zqnad}DA&3kDn1{ifTmctfYNiRCXGPTtvf(ZLx3jzKjX#bK(dO<>MU|6q1^ez?GAH|_=9|HTo z#^xO;n&$dxF4zy~nI8C!R9>vQegsdqV*kL-P8;s@N!kcR^jR6WR)v;og3j-Qj^&Jr0sOZ0$(x;%qt ziGjjUuXNvNVW_w5n~@jDFZ}-v_KcY@b?Nvfrq`i6Bq}cK$Y^(20B7cseyTa z!M?Hwe8c0TZkG#6)ZcfTz6UNo)>0n(&LB%+s;2PPxV7 z4EmI99z?K~Lr!nNq}&FYVqF4CLo4MD&~$4xX%QvmE>PQ|S7Mmn2U=u32Q9Tp%5Kn7 z>t)b=Wc&&I=@_ zr+_xMeuFX7(?BygX{IwlGp(2`-5j$)v#bQ6XMoyPs?fQh`Bo703tW?=ECem$72p?C z?zy0)RvXe1Js-5Q)d@7UE$GFdRn~pkTDuaouk|lbvlFyyK&yEwx|HY@preey0hE$i zhzKbu8$8?%-0mBpH7t6Ii3{2U8ZZLsC?zo;n=*1}>*;v5new!0^#|MB4w4sWBw5oy z-yr%r-Ven4j~9UdLi`PIy#IJTc(6VAd*FEg@p15B#P@;kGOZ85mk|FL9PdB=27Vjy zFTwHtV@eP=Hi&-*j`tsnz!N%v{~LV2Y4rf_Li`9g-hUhqemZf}!|y*{0DcYe065-% zyb7HD$4yESc%8?33j7D+O~CQ~Sn!Rg^cN+CGjobL)gmh?s7cyoR%_)6l%;QKvR9r%O9TY-P&vF-rp`j>(q z^cbnz(3on%ZE6JW1WDY1%@8zG%GIWRJ4n3*O-F`8{Kin=T{8Y0n={CGxvA$VQmS`~ z0>6_5{lmCR$l_u%`~|2mvs_ptw#Mc*GF$1C>K4d|H#7<8=%dN)RBWClw@V#2jvQvU zjO;GM=5w-JFIn6ONiuI#b#4Xk6u6s=AHl{zN2F{JV~)uQ&^)6Pc#mwqz$Tq+H#rGJ zoBrf*lQ^&$JDdicb|7J3 zJ~=GKW-2*cW~QtK)~~X24vGC?wg}1~-WJbmc#iB;#Rxo0W^Z6~E1BKb zu$gL^)T1y{gDM6u>tpzF{AbDWHZwH?0!N!eTKcbYACva>kI2rzxSTtWpuAc{dm?je&W3z{NS2Ocf?Cq4ErnMiSA5EgYc*6S)bTZN2 zpaH81PESjT_65b2@nGP@ld<`n;&i9{X+kyv(?~HNn?Fg>!%QKuR;E(2s>MC{N&yy+ zL4*ySYX+_*uiLO`4}sa+o46f#2;om-66uR$r;ybh9@MOtbs} zqEDs5_U>H8EFhwqpu@TBnXM89QIEP<$tSq-k zQNRR`7eV;*s7LM15zTGrLpoh_D^|f2HpCt!W5G+yncuq#x0sfK_ss=w&H7LhTB1Ga zHUAWxQ&+t8NiCr3mQLS~qfbE#G#JjM{8^~?=85U{cHmNK%)%X7`i$O(4ghc^I;u+K zb|E`_%<}Z04}k}Q2k%0`qX?V{$teJNbBI-fEdj7M0<0hq8-p8{0EP4wL;B?Dz5NMH zwnBqNI2Az$idm5!EP?|Uu}X^A0Et_~crY%4zFomZv_wa75o2}enNoxony?}!QW2Hu z!Tu0)5!0lI9gw(1)PZpk`vACzezCfUn{?>=rHDdk!irc+MRZ9I(%bZ01bx+u8_L9? z;})?UdM+X#VlLuE0IEg)UWBkWfT^&B(wW=PUi2yN(*k8waqmPcx$Be?wq+;SupN;v zheIEtBlD+LAWV&mE6c|a8IwOB3as1qpx){*_lA>ajj}0ZH&xG>%+H#?lOYXF{zHRG{#2R9GQf4U1HJnd4A&0YFNH{Tv zE;(J^p?&upoo63b>O2*}y*5>c-r+h$99`dVog$8|U${;YN7p}GrwFynrzU2g^iFM zVI$3@;gz1H902VGBzuC+OOeMD~2c)pOMCdVY=&X z*5=R+?uw}-ug%#~B1g_J_AQ@F@)0>xO~@A$9-c!-xf+!hN&hYnZxcl*rwhp8(wyUt z&P!EJYn6)IezU?nCbtk?tIEEE@EV1=KC2aeh~$?k{3PLZj8#rgNlwqOP`8sJP9HuS zu2Tg0w%X;v7N0kos=Ybl84BM^pYuyRxOSxfMFt5a9vTnMhxtH0m4{Bo^utrYfOKl? zkO!xB?)?5r{|7h^jDGCjdIRngnO~>xuvBradAj>3eV{JBpcF0L8s{ncyr%c&q;$N# z@zuHApab~!+yMZE>msb6sXK2JG&qZI#g0xz^tk{h4*Hnu(+lbvlFw-tq+j1y!>)yQ zYx5uVK15&jnwJOv>-6dUVKT(vFmF!JeHFNx@WHg;g)rO?Zui47?^^(VF{zHUY0ZQ5 zvOK?-^audIm{bTeelf}5F!f~kV_J}YFN4GMObiRNUxzsWEr;0-z+qazEG$e4I@J6r zEw~6`4%00uEKC(?kqvz%p2N_SJr0uvv#>C8$na2FZ~?>|raU<;%oZKyV`w?d9RM7r z8O*}M>?Om0rv>Lg%wam<$aC7pKo?Rr??cOBZUNvhjbWz37+ph^xCew`N1y2!ZuBv? zrRVm7yp$r`nQqU7{V;I*1%QbJTH@R~3m|tHHg#lnYqKDoaMywd9|O3C%;*KpTLFq6 zz~+D+m4)=JdHVFwdwU?v9)pEZC^o-nTRRP^7odvP>_;K*kQ1`_68n0};`V0t&G7Ja zLE+D*;>iL5dPmftS+pJw<@x$=Gbs2Tt(}kl)b@ zTpGO*XJGuB**SUKuwUX5fg3iMfe4fn56)7uDbO~{p<>1#8E0~-`U^2k@1ZYLL8ldnF3@rLQqWAV*8}F1r zV-)Pe_BAb@gKzU3lT0&o$rdAf-GRKzC`t0D@& z)nR|vd;5@$7o@0yM!^}#A`Zt3eKzR5`Dl7@c0PVi0lHv+0Q#?O!9suy0Co||xq-l3 zfV&B719*hML4Z93E{E}J0L33-Ggrqo3LnyI5`Yw5PmI(F89k@6MjXX*Exs$?tpc)W%b!ZkZ>4K+kUzg?;47EAZK1Z22)g(P<~_3s2q& zz6xPq((|1@VBM<`^J{v(Gg;U-xEt;}9gNl=$p`59&SGKT((|3=!hWFVJC_SP=)v5Y;fESKU@55 zaNG^wB>uVJ`%UY1(dU8VZusM(F91JiTCWQ)1jpU*FNGI@*LkcT!0DlBaxpmWhW7zx zeggPfj}f5Z5on9<_IJT1pG3c^QiZ40pp%oM!mls zjBb}DUr4?G1Q;#ulkuA>6Mb)hae4R^mFd1OgyC0I=JxFKGHr02#&>N6O zs&6MK{XS0e%@`1=zUM@H3&umL?=4X7?^{v9CPsid*-ry-0@@)b*54M@>yBzB4~pNP z9P|y52B2ryzG=en1l8+XB&-GX{t7TY5OS&aX%?mHfaE;t{cFTBpL+jhVFffx(Cf^- zX$C2zv9MDZZd#t;dtMlx;+Oi~6^6Gp+WWo{hPO33`~EEqZ);Tg%mN+r1R6DsgyG$d zp1wk1__?pXzEZGvLnytJ#!wg0wV^T811yKSsGSF6sE=5-r!h1{EIZN|8YPyUXbepf zT^Wy|*`h4xL30i$m)M18o3%o_@@%tSe0#)Tw(;F2zCCHO@jWKSy=boSJu9>~O*Ot( zg!ZAC#C^!2+nr4gurQ|;mwQY=nnLIPTI(eeo`ID&gsX2HM zPNwdrRG3Yn?xswbokHDBi7-2rx|{M~HkCS<(qM+yR!V);Hq7waN@s3HW_WF-%2$F! znBlb*{0hel$n6ZuEhDfOP(SM8GZEDTUvGxA+l8>0W7>^;PeVj^#_h(G`y~*Qshvvs zT@FTXJK0SrzpKEg9J?vycat!@uu$r|TNqwg=V?zUI?o)(7J5c>LF5lg&= zQ0;pgY!Ai6VKd72xiGwjFxvOCSmHpL==&Y4H*&RcXiWFT;OJzAK|RZtAPj?gj*sqc za7+y9Gkq<Yu>y3muIi00Ghb_Nnq~#BoL+0r zD<^ud5n}3?3VxuV@mOU}a-(Vjkv*>Oo-p4%>SieWYRtY0moFsOXVi_=x-h)T#rpQx z%WR}?yC~w^c6lXSr--B58?I9XIhU=Y0upSKU(7Qr=%qYR>bmkjTN~^`ok{_HyQB$* z1AV^0u%eH7p&dLOepf&jJO*$*K+zqvd5AVoVPl_+WAhaPYXSBF6wtR(@^z@edT+j+ z6I|D_;cuhl&+)_kUaUgDf;-b)I=hQAMTU!y^0`uiY8?tRF(p4w%(9UKM4 z6I6qfaE^Y7z*K;D0SdmrrU`BX(Px?7n~m+@XK?u$x}Xh9vld`6B#8jFAE$}t1gZfF z2)qf<1_0gB6}$aZ>5gB{>Hn!po~oJ!y~fVlv6o7T8`A+QKwC4r{^)&mr8 z#ioNEaQXC8LN>iQcRQp;el^j>pgV{fxqo0+2bp<^9lQ>u#SKLv_d?$kzs|=am3lXZrdH*SYWkoueG5_FZl9 z#YqG=3PZR-L!Xg)Z|{cJWK!XqaB;|G8ccac+Q^eY{z0S?>ItD`BLyX->XPj$vE8I6 zj8=Pf$w&3x95Dk4n|%Z7;Z@0Ac<}di`Uch^gA!jm{gs-&0h+|i`F8pM#-U2+`0G0T zn5*0CD+9mk&_>y63Vm6IJQw4qfR|;^BwSIiRCHBPvCGBf{Df{b+Zbi9l44ngNmiId z*?$@9%IT{E<^>u2oa6^GJ3oU@x@Er-Irn&AMqV z<4kVY*(7h2$!92jP?nNOzkFqs%_GGF8BzxOKfsl!;4&WIidS$M4{(E2tW_=?Ya`+9 z8FZ#D-%R*H)fhJreq1%+&4eFP^1BE>s_=G&sSf225q?C;=?AgQ9SYMcn&wUwXD8V_ z#`&nn!MoU|%Px|~W>%_G+Vb29Ca(eZ zDKWKP#ixV|xFsw2q*b77z9D&`lK;{r@KtN?u@=^`#gaogU^M+sHkpdU&Ji zVVZzpMx&^LdvcTN0Y2$&&fwhWJx=qg3_3xVa|2(a8hau6ULDpm*Rro}>U)^rM7SM( ze!8ZiSIg}a%g!gam!0NsQwGz%evV zpm++a`Koaor)-lvRpC~In<(6#a8rf55>8XNFX3hi*Ai~7Fh63< zK_wqc_DKrQB%H4B0>a4(Ur0DZVV*}*7^}Az@~kfWxH4pQxt{D2EgU`s3gc)xtSsM2 zqyuN9mx!G;;gO~YnzXX~8M5pe7o6ZMSgXP<6(Jov_F$c`lN6IEeZ!;l509dV6J_9W zQ3g3txQOw`DJLGsCLhO6IgXvK7?R=XBA>q{s?%1)sbN95P7y~}7_L*q(X|ZMDdOmg z!gY!`y5ex1B95+AxK0uDOW5~NVvMrasE_99@6wtTJj~}=?l7On-(aoaVXkmF51IKK zTMhFC3iI$hi|y6$T*%*+RWHb#&2lxw&eub1IffQD=%VmM6>%zYLAXv4RHE!K|0LDIrBP}8?CB~PzpW;Sa#FL9B~P$@6)dxl~|a~_;h(6U+b1k1)o&T7BnB6WSr`f z(350L{DI~JEX+ZN!DDRj``Ov3x}IX^xwXkxwb@DH0%g;xRA)k0W%R*3Na{At_3Eno zSiDI|g|t-}odZ6Pc)R8=ucC}L6KSuMPeRGxJnq2v8A|9Iv5QIHk?UVF4SWUhPMk^T zJMay}%h*5k>UezT6RSYs0UZB)4PVawp(^k#WM9dJht2}$*K#VDw|3yg*Ebb+X*<4({ zodmZUaXUk~83ivwA}L7G<^|1zw?qCm{(=`{^C|u?7(b!L{ytv@BcHCm&*!n=lTH!fo33VTq9@7DgWDVH6(IDrvINs>%4)5QJua z9<@>E7w})GUU_*mYvi5*UX9@beeec^I}hC64M2|eR{$Fb^u*={{1x1T%}m`NQiz#W z5Znd%PWP@|w9iYW1Ptw_Zon%zaBY9I--jsj( z(&%oWuj#W|@68d{k!495Zpk#Cf(KO8ktJzV&%!p^W`f>_Cc_|`4BE0m=qm91FuoVO z*yRNWPQfVF&I6>t4r#$wkpF_eg4Y`|NDl=4kbj6j`jkCQ3HI?Hx8&;Mrwl9jryDfp zpKVZBom&R@sdv;lr@x;MH9i;hQ*tj|BKK98&s_rC>O?;<~+JGsn7s!U$;)hWzN!KDiG za`QZec}clgVO|z4nY-6-qt6SNNYhn7BBQ{bt&C}E*R5A#Sy1-@$ z-AgaI0DMAw=G34iAA$2_R&&+EgHP2%B2)2!Q*kFL9`+e&R3UX&tuXCrT&B|}_d(d# z@u83wjDhWL@Zjd@_`!YxT>(A-u-8NNHGy{1aKnPY4FD#j_6euqh6O-z0X7+QRO3?| z0-2)=DeeGrrzZLJD6OSuUEi({7QT(j(r2>P+MlAt0npfI&cHnk0OU9oyMvVDe1GsI zl)V5vZy6a)M%kAE6kSE^4X~RD90s_TKx+hfj6e;*a{%h6H6$^~$(-#Eo;wq_a3-S8 zFTu1afgb@{5NHBbh`{ZTlmXbCAn8TmWPlm~R7INfbzPOvMx<)lNV_F>1zaDduB{Kq z`Gt@FdOrTuwMf0XN5TW-UOxWIdC+ZFm=A^rl?}hP_)vfk625NOq2xR;A5fSF=KYMj zd`LwT6^lO^eaPB9lcQmi&%7$h^$qliYm7yKreAHdV zT>VDNt$|iL5%rraHw9kNJogn0FgqC~-xdfqnvGctJor6=d_#)%ko-bmB!CCQ$i5#S ziNH4i83gRp(c1t;ZE4dLo8tc1w9zFL*Me--gnzcJt0ukm-aHTpK7kb9Z&xe+9!hl-YZJA~zdLMY|4`V< zen;5K{$V8_M80=gJ<%d+@ZG26Jh1My=(|elYN1|XzR2CqKU-7IGv56QZ>KnSC|{oa z9#C?=n0-*;$I0d{YX!cm5{l8(mp005?6X#a@DHG*a*WGC>4*N!CKSU+-3@#73^IVASGPy!2KhWqKjR2F{q#x& z-({Q|?2X2(;JbD66sE7-ni`)<_Va=-qPQ+I311ehR5!Zng0Dh|dqY%@#1F8UL;9sL zX?@KzW2}onC`oex=f4V+f|zH4rdw-3xjG9$ZHvC(%k*r}BI~AbT58=b^c-kATaSZM z&gLS}D(iXBJvd{Ui$Qx@uM1rQ+RNH6^jy&1)^|eB1MOo}9R)W}=R1ge_wMw}9XJvz zxYlQ6QoU`%{o`Z2O<|+eK{O40yk%-{j+jrL8}-Cg;y**r{2Te8 zEx87q=O@KOhr#)TcQxyKsu%P(^TeTN{;PPF>ZzvvO{`JR3U0PGcUGmUY2!vK_dE1U zbutpT&I-PMmSG$P57y5?pP-z)CfEey7GjbG$PHmrmkisJGlQ4Gq>{7=bMYNK0J}TP zh5-~_-BFeCu-@AXp_xP`cLB@>FbWo9`@YWQH@!Cl`Mu1VRisB@Svcd>C!?_It>B3$ zqXay7Dgdn|?5hDzB4EwK7byvh02o8ydVpyJ4gkz2aN`1exs$*?fJ+E8LQOXk=mT&g zff)ez02KX;*kxeP5U2-u9iaFCHmy5yYDV!Pkf%E-l3$g=>$55^rmfss4CMWk^%GX` zU-MCI@ZgLyQEh;{bBJvLyNJL$0P6^(Agyaje;YQ%+p(eVi_)jyF?7f8y4X@JG|vhK zKSbb6PBHwws8T4uCP)%@8C=1Y|Pdc-YijOHoIrcEns>_Zp| z9Rc{+@+-P#hopwzTfx0BXy}&?xjZqa~&`v2N(o0;Tm~rd5hyth7ogQ$y_>y*Ed^NV(?mzo$4s}WBFL&$olf~{y*EenrDR4)n|4DDxJ^f~f5~KU zPFHc=rlVO|kiWn%F4TeElYnCr^4dY3*A1H-V*s}HMF=vIz{>zr2xKh53wQ*k04xS5 zz8IUwb&SH>H4uS)H_X<;0-x>&weq8K=D0LJw*#usC@f-1@uacGL>RVrm zpJedMSVD$Wupjk9s0x-<#2d4xx*%VWahooraIgj<2pxvQaB?VMhiHSY=V7)y0S4`r z0o@>`&l0^4Wx~L+VbF~Ypvt!!A(csx^Ko$&%k%eRjtN~T#!3j|vXxZrd$Z(7D9kZIyB<0xeXFaAF+lGr{cUwR z{hqMY=@$;IQiiMbKJ+@2^g~3Z&8g!stUpPaoZ3_E%@HKroFuO;!-F0Ml z;CQ$ zxsM@`O?^KjEAK_%;C(Q72f)bv9NTJA&C1IAH>tjY%2rrV3 zUGT8Jk%w0ga~Kco8}$Io=mgW=@p3-k(|GUrFK_^;RYo7iMp<97t2y4ThF{}Q_xnfk zD;jDgHzJ;xs^ybFvwcR9E>UD@B&P~gC;W|Z7{jvp= z-9uJWzY^B`5KZ3^R zXEc?37q}#NseXP}nMU7W$=!g{`&v3mx}*iGpt~8|o&s<$K<-X#c9FJ!e75l}NRIJ2 zw%Nvy*xGl(>==Qc0pgHfaZ_x**BKRz2l-f&ul3%X93QN?4A*baWgF-4_9EIYU571w z${wKn*B;+(Ys0$j>acFx9M)}DDLLQl+oZaUyYNbd`6B;vh51I|MrF@87S}7xce^(z z{3)fejRi{u2R0^CaAeSilDbVh_-1g->lk-#78Fk1o?eMXyuBpP!$ zW_*C+0LnT^SD-irq*xQa|4l!$PM;-mh};#Q$M?Q(fWB}0}m!$fqMY}_AE%ACvX=eZvkM10%N-;Xmh6fiS~n8OVIp!VufJsNof@R zP(wSzh^1s)OcGq-GT~)zI*#>~!j!kB%P}AB7zp->AXMk7vFPJ2<{lay~e| zRKti5j!(me)W-_*!SO{r&qI7be6BDbD4!{OHKnniu{t;s64b%bNUqY3sqv|2$Heff zG)0^PASqm@h@<<7qv(T55wt_u162GQ$G5^8VKsSE72c{^H}9gMs`<@y}fVaxcevx{9>##0PgmyA|Bd zSdV2lflC1%Ch#V}ZUO@~VA)Mz8^8wyVi4+U0<$+^twP`-0Fz4j4j_?0-c=Y<0L2B^ z%-0nu4uOo;ga`Rex~g~Ty?I0r@>%fbLB0ln2l;&f?jWB-H8>g{%twLu)nSmo1vL-y zeaMan`GU*DRYqe;iIxi zr0C}Ou&x{HDlSke_Te>PRW{9u>PED}xRIb!JvNN$gjge1lG}l7wfs;|Ee>$Nk~>g~ z{WfbUXz1VI-w^*kn{I=L%CE+a7vkTtz4{diG@*GYn}2D-ZUzJX?nc2vT!$QqEc)kc z`vO>;4_)pWY$lTLSJ}b$A-o;j?r;ry7NFoMY_{r*oy=>pgEL|98g#+N03VV|+v|`c zfg1tndJEok!>?R>Z~@}F;NA71>pZFl5s8S2Z`MUfbR=V1mOFE z&jIj#!SOoOJiWK?g*V?9oD!*74UN7pDAvox>jK2%`+^I##L?UWjlM4^GD+Y57COE! zc!~CMG|8yAb6>EGZpoM}oL7c?aG?7@e^mE{X)e6*9dv5eu=A^5G-5o&LaNGgZEtBzmt9&+atyRrvX%3Ppg zxrcDEvzEq4kNjZA>+wK&1-fi0KoWuN02u)G0f0gPeju@n?DO-3d0Q|Ep8>O30Q^AW z1^|8_QLB?WUGMF8py3A+Nn3Fk!%01mn4|TV={+7u1lzzu9!a!AnFp!3p83IHkoTah zRsjsAtabsMOyI;D@IVqEzdjx8RIvGATsa#OvvYp1)lIr`|GrUI?rxZIpGp<}UBviRvdXiE{W=J*zLQb|YOSgZe-rEyVB3F3>09P5c#>r%&Hdr!} zIi?HxQIX)ou%e&$2)+-%zamm_GgAKlXgd@58m=$!zhunwL_~zxL#Ta8Vh<8xC$Y7Z zSZWty4N25iOQ>pV32l|CP+MtZskWA=y$Ed;t+li$t(LZms-o@xduGndBc;p#_y5l) zC*L{uo_pu+bLY;ynTEIwW5;^M$0l~<6(82Sm>RGX>{vCP|z5I(!T z`z2NG*CRcf$F?}C{8m}Y&vuuu+sc-#v^CHF+oru=%4yRbpYF zZkD0$gsNSv(jD)vN7&a^yLQ>^7d^s0PVHtZ-TC)_M1F^=-L!1>S054oBDLG6beCuI zN5sEe?Y3pJum1@9&(-dCr90k^kFftj?QUkXk9mZ>`}JAB=CUi~vX4!9@Itn?G+d{A zw%#?+=DSK;^ZdW-viIHZ$#Tc%emR!M(%$Q*$8{gyZI}J{t^VclS89Cwl=a!l(y#ipP+U#v)RjA-yXJY$QFOQe~ACT+WTp~-1VHj z-b(86-1(A^Da-c5Bhu^c7w$J}&F6F^+sgbl-&5XI+OD4ea;rhM3d){JcYL<5=YNdG z(?R)ya^WN5|FEDPR=$)iTX&`=vh`Ein&eB(j3TS|F#zih>n^143RYAJ2)zW?ejukn}7Z6Eds`>yIfQYr5)mu->K z);#}v1>5^?DZ7`p^+n19%FB=0?%Dre*W<{yB4i5>w&19*Y^`+1@BWVCzl}etgdJa3 zWlv>-GD-9G+#~W=Dx3ZAf3SCdly-0#`?$|4-JhSeT|NH|jjxvSj@k#6_1N6M*Hi7} zRrRvfP`j8%*w@!`eOv8sD*vfG<>gVb-B3O%{(afvT_0=(bL>!lt>J%G+Pn zcVe@*i@nHY;=c6;~F zpek0eeVQuWzgWs{f4-{ivc8(l6H50F86IWt{*6bM5Zj`+(j9(q_3R;S-5pMT3N71E zrTh4{tLMM_5&oDOwp(B2`$~_cy_Ztkru+HAUE#Lwelj(?{flbvey%h7^PAc2tJkz$ z+z$n2KTdZ09%?_XmhI!VcRy*F-M&p7jbG`0X!23^&9cSsey;I@e|bFj!-nn$^xoC- za+h27^zGMl{abtY6HMz_F_Uepa;NemrTh6R+sgC*e+|F5z8%-02%CEv*gUEHMj6`B zc5kZer0l00uawua%H|!#Kem^mEI8g&URB;x+PympE6eqTd$3)i%_aowu&lZ1^M}!}w;s5FQ?s9ZL8S;*Xd%cyN(#=ZuqbS+a|9N}c#r^!i zZPndRHe|P#PqxeUZ|$o+Zri)>4ZCj`yYGD4zMlX8)qb+Zze1Uz+^h7&Z0}{aJD_$a zA7Ot^-QD+&|0(_d)xP%=cDmfR72Wq5-8WCOr~kj&zoYRVQ+}`fMVUSR>~_DYovTB3 zOI!C>clT|_e@g#L%`T?Og^bkI4MI8d4pRxtYwDWDX*Bat@dCY8284k#nKA%O>Xm8T+G=7^E#C z?lRs;+m&*PMY z{xX#d=B+TId(^9^${gSI%H5xLe|&IJJy)+AJvzNrX7%*nEB^f3&_dlhvtP1GnXBP1 zPiy2FHF(|&@%a|?YTNa-Zn*CbY#p9H#5I1{V;3??y^}fV#loS_R?SFz?a+^HDrc0+ zJ#c&5DuZX>mfGmd_VI5I_;z!T4L=rHT)A!gl0S4<-k?**kD`7n8u&tu0h50!xxPfDcZ2p08=L&y!jS5OYISLIB53so-D9eIV`j=LX56w|bBZ1R<)<*>oK)n%{A&f{7jK+*<#^pUi{vTR zzfrsQ@^-D|d#G!~we6?YZ~1(CviEQ0i+r$VPU-oL_BG#MrDb^6x$`@o>zu3izPO?* z>o~v7U8qfB+dp4iG1R|uYNX$pl$eh1PwXDQ^mP2@(PM_!e6~tLjtV*FOt|;cZ(9P# z=Ktu2%woT$`Il*PqV}N9i4|Ym>MXi!-~ZO=2dhTq&u&DNEv{{EOVcMeoswDh%7B^G}8<(}WK)NS6PY0l3p zPp*09>pYd;zSQW4#b@qaJ#ut$!J4nETpK#gt99&v+INqDup5I?%$wVMUhLDc@5j}@{rSk?%3Gg)`u!?D zPrU4(;5Ve+wL*>WzPhr|a~E^1$??RY7pDJwt5(_9j!paGd#{yyPIsI*+Z-q_s633E zL*xySGC=wxWssUkQ=}szH^q{WsmRO7a^yYaL*xu{6><0w770eekSL@*(hHe{q#{d@ z^~g@-FmevLhU8#SE`XFlY9dXMSY#kF8kvsFM^+)5kxb+yav8aexERn2BXaX79BGNf zA_I}pNGh@fS&!^Q4kPD~Ylxf({E=WJ42eS8BfXFWWD=5!EJ4;IJCVc4IpiAR^5fV@ z1tc74iNqoUkWInPA*^Fc&Cy~p@ZN$aNr!Z0h2}fEYvB*GVG%_8TkE}vIKt4v~ zrruTL9^&iI`3k9mL?Eq^?#K{iJd%nmLFD(0JCVbP{08V6;>btd5&5A|7!rlFM|vR% z$Rs2cS%R!bt|1OilKzO?C<;TOkoHI~L~asILQ;|C$a~0#$mhsK(r%e5Riht?{<7v_i|S75O*ZRi2e6AwR@mf6>;~+Szz49W)25%d zoE^n9+ysqBUh61%8_rFhw6eBMe)1&8Dk2j#w!)gW{aT*ZgVnfyJxP42-(cJRiAI*{ zh}ZBVG<*jw-zSRL{_;L{liiroJg|lw>d4$NksIhTsbV{;c^{{FmoMf@dNygA8)*F9 zH2(bbaq&N=_RrU{^*2XLY_uUn{M(4amY?xZ^dG4++2p5lQU7@}=RUVkfb?kdh$A`@LU>ybA&nfj3Jh~~4urhBgH1yz@E zP>$J7b?g14=#xrFX!4_J>ZWPRsro^+w_b&XU4phT>m7LL*Lv}f?Q<=MThy;?)<^$f z$tck%C*qOgXOy#4#|W*5PqZGa&u!xMToc>>0(B|&z8!7ddLISr={+5PoZ5E$wSP3$vBXI}Ws6t)#%gc<$P)L?+P z%l!qdmq@Lbw>6z}G@aLUjO?c6WJtcIIqcH|*y}YCK@=Pt;{~0Ye zIUk7qi+X(P1sUkehD&IE|EBG^Ch3sPddwOw)ZY|pq9^Vjqg2;&w3LP{vS~f zvdQ^g><4PQ@YeDSC!Mm%PiDN~-N}r7a#70W6=sKduAi-2Z_8x2iKfANGbehFUbg>m zJ;nq*#t&NOpJ<)u&@%VeGMDp)r0Hd~zoTVdTGM1bRF1!)Wj=*IE%ry6+sEsxZRXE% zwmwtidrRY!Z&*m4jy;KVvTa^ho1JQ7J(`SH4{fJ?gY9GFX=K|ksA=o(CfWMi8veM3 ze^Jx?p0<;T4uX7Ju+vMZJg@Qs&4(96!)jbS>BFgIv!PYk6*#|TFcj*YsOOsdk~+-%vF&2 z$S;h~MVfM>5P1)A(f;Rk&8LDj}S=)s5 zeGvT1YJDZwvF#g7w8JNB{PGh}**?2wYA zp_b`eS_f@3j*1$G_4^pY?3}_sw)$G8`Ls-n1lz}0M<0^SdSxl>+|N=Scd?T++|s^k zz55)!e<|C)r^eS;<2z8xPUE@Jtoe+wZSqyI=Q+89nAak^2O*RB^^KP6P;Cdkv@hA} zVlT(cr}Kr$nub_S!&KbG-=S%KjdBsagO0y#wOspY8Ch@Nz&|cY0x=&Bw$sz25kHSa zt|B#PA7c^OPHDMcENtu6&sW$TtL>zfrl+8$N8T%J;D5Ue^KSZchk8W*{U$hKSa-%RtLvy`2m)0&>E+RhtlyR=^UNw_)vt>6y%iG#F@9n)EB)3IO& zWt0QAMEs5;b?f1W$Y%W%5k5BAQXOryUGCTTk5snfdx3uRht@$|(&mMEL=iiT_1-Ub zCy%i84O-@hw9MyJvhCMCY5NCjnTBea%BvJ4eFMj^6u|sqJ8}b&&H6ns{Ca|=I$qUs z9H-@Iz4-&LjAYxtyr$p%AmG!%_OXA7vi-l&HtI_nWV3!y3zup9)(_#)SLyMs&qSd2 zD9%5&xs;3Ky^GGHhO#d@)oyLp5BS-;q2rSEmU{FTwd~}ZP0~INl%ijCWPMZX-TFN< z?p_o5$7cNsPIk0k^wE5s)p{wRbx=<0z{ZJP+nrx{K>tprodNr|i`Fy&xv&g1gD@G46$mU*SmpEjjsau=q?lt!RV)F#yRv=`}+N9hi9)l~b9M+1w zod*~0xe&UZwU*2<>Y$l9q=`sz%kU}9O`5A@B^W7%Jcg7(Bs*1+5JcKRb%gG1tOY@qHOhsgPcmbJ(h~G=_W!;|#Uqu!muOW*Nv2kx{=u40{ zkdW@ho78^w)49)mIla_7PaSU2WZaWI-yWDSyl?O;<6{<1Kjr;Pr2@5nEcE`i@wM)* z^lsRFbja_C-yAENUTICsAirsg22`Fjc;~&NJDX0Oopa{fxAyxczV+ww-hL-PJ~}G4 z#7|EjnmcT?BhST}g&#ce<^7a0EyPf&9`_oBZHvfF?!rdoYP7nG1rR#@_ zU2Hwz$pcr$)r>iMW!<8Y>oU6r1(xY|V{>N1nDu^FT&>E*?5uadd)|}z)_?GQ!s^Cr z9ku#-FFvyP+NDsRpRRU%vy1nse*No>=oz{Clb0ek%)mIAz7rQ$9^5KY|7v4)t zJzehmsX?2=*T3}C`QEE~G%h}4(U=i`giYJB5HTkLjRp`%k; z-FCfyuG~+@&rcY8ao&tgeqX$D#+Z7p?Av3TCe`hCZ$_;@6Mp@o&$O8@&wr}I+L;%U zLVvtBJXcDi^X}1zkXr;h_4)n%C}f~Xv@G+XQDoRb?M+v z({oR3y1d4?d@bMTmN?_g#&dI`FRoZSYgXjN!_8+#ex5OE9;t`4L3$yH$TVaDl8)>^jv|+k+emH(l@drbq$$!F8H7B8q$10ZjmQB+ z*0X;?yg5GwA{7vspFN2TL{gAfkX6W5zBWWD-b zWFK-0xq&ztP>Uc{kcP+;NPlEB@*)jTJ%)5pnlaQB?mB<$4W8^F3I$|==7e*>0vX1sRB5RmW zBQGF}5Lt)bgB(Y`L+&AY1MKzFTCgP|*Yv}X$%w2;zKO_nldKJ$LvqmmycjR{Q1)_8 zVe8L1Nu1=f4(c?#xb1YRMwU}eJ+aDDdummNlaB|B z#jbqVN1WvILK@dL+NwAer~K5ZgCL5-Rh*O<1HQQY{bE?y~nuyOxgq(-jeCZ+*Fv^qE7*5IJBv<(w zFoB{ICwWz>I(@2fE%Ib&sRqpO1Ps!Gp5ZCz_cY*8PrwSqEz!&8R5kjB8rLtOS%p)v zsBP6bB+DvDQ{Tsv`qe}raUHIhmB+IMY$tiOu4elrvpli-vT9ab?KG*YJxP_1k&0EL z_E}bO8qnJlFidNEFg;9DKZ8ILusNbtTUt{uA6rl>d3If__IZw2oAim(JghaT)tJnQ zQ$8m38gR8%ZD~){zGm81PkXw;P(n$-Pdue6znT!IwVr@?P{nCH|1|oy={w>iFOE{D zd)iiI)KRBMtw(Q9Jyz2^4)EmhUE+~x?e_=)e*v1W^O}~DwX>o;E8{g52dGZ0I(v>E zsLf#k&7lw$Y=3A?#nX<|YHB$<`fu81B_fxO8Zn-HmDBpVQZ37BmF7OvQ>)XpF)tnx|CT1L|-Bh8n5t4^%s<8_*@ z;^^Y^693dnCZ6K7*mFer;g>j__6&W|>eSd%xEVU)4{4tj{T9vRbDnl^M|(sc&u~#g z$A-i73{97pW++$7EGPMun<(Qjb{(oCGdM~o|YoGxkind~Xa zjhKklxkBy{K;d!p;=awwY=MV%DcUmcUjV> zt+9oeEKu>NH1BEPyr(f;(2}_7=}I3HwM1W=f10kd zTF{xkSx(2)su5Ot#Oc}q-taUNjNBW;xNH*h16#0auanUuvF2a=cS?_9lc!`J<}WWj zlkGc-@nQb%ulH8Lrj*0`FY#NCx8m1D(vxDQL8`>ojVm_5w@nuh=B5yyAGxVSiN@L~1iepl}MgnwB1x?lM^@=@t; zYp4Hv8-K~a`(>9c@PAnO20v~GtVGC%rO*97xJUU<>R^X|<`LnuUdLpo>@Vqazx_wf z-w!)JXH;wR8vBI9YqYL%yeY<;DlRi5Bp5DmvP|%`-i0aBKDjAwBwg?;sJXt z4=Fca;)?S6!>Vr?FRaa-j%HJ`>aQkttJF@$jR))=a{PYS-*(#Z$~f|Xee)?+?xY-M zV7ES}Z71W&19sWkg{1cb?3ei3_A-80n>)St(h>m(H5l z-BvppcOJ0ImVe1tKkVlhwBwa=$lBcLd`SJijD3Ydw!Mr?57=jmU&`S_i9gu3*Kvwf zkq7&!*j>dg>@nL;#w%-cr=zi_ehcK_PLA5ixb%SCL;7=5u`grC`)}-%#J;R;FXP$+ z@joPg%duZo&bIHK-Cl!BIe(1Zx$?H1jCa=N&R@3nGnn(1w?kf#<>htPFAx8%b0eX= zLR-i88QFW}n9!#ENA({vJfZ){&?du&4(&axU+ef`{W}gHJ|r=;L(`bV&^EpMw(AfZ zlGtx>XmaAn(D-3}ha~sw9~xgHytd9idMq_8*x@^!*e24(vTN z{(p`8e+?f>+WzM_G;faNVe!L<#l;Wn7t&X%%XSVKC=;okiHY%J`}a&jqXQ3(9~R$t z_^^JxYh)F4!kDCi!-v%fsWUV*VNAmCkzz>`|9i{feFpXKtCl?zllsLECln1Q>&P^T zzmH*Pe-7L4{&@c0z902A^52^e9o{c_NdNood&Un-s$J7v5IyfNm7d8SKSrXzPe|Y4 z{rdl#B1#yOnAAJzuckxd`%utY=Anu4N&TxP^zJ*j_kjM1p~I4gCX5N~JA5SVU;BaW zM2(Fc*?WxDl>g1a`wr=yn0SBg|2|Ji$q5e@*58}=i|?EC?<1#iN}1gspy$){!IAE| z`1^wm89r_2vgxa47d?+^R;>BKUAXu=Rp zBZo;ydRPws@2WpxOwYcIp2LUzo5~*&pZFiDN7~}Z{=NJCo0#K9_8$5`Me^_j#b|HF zlrS&T$0x>g7!_RUW^EtiDOZ3QiurST0}TQqXBE6Bk!&0y&MqG<>k?ANMy#1=GwzM!(d*u_z=KeIKwW z)+X<9&M?#8yLv&hj4^rOMKh-}#59}(%|foO#FAuI&XiIb!2WSFGAY6=!hRw48?m3; zX%vq$jbt;AkxR4`vkI;T7I`93Gt4Mei$+o!8D<+*OGKJ=h&pGI8I@t?3^9Ia8)pVP zjh{0eu3)p6Guq4(Avs~E4*4kpt2;k6!(qK>GcW=ZW2`IMbU2L}n?3 zvD7m4NuxA;L+qw@YFwOIBN^ir|72X;X`IHmda|+npG+x?FEFho@h_nB~kSn`G?ktDLZ3~Zs2Kg@z zvDxEz5{I%*gE*v(=Fc!Y<513NgvXhcPngwCm{m@gIZv3irKWO*m{q9$25V{CDb(Z_ z?L(;a6`@IHHRl|&&Pg+hC<-`@HGWB^&&yW#aTsqljx#B&FCwM7xfnB6G)_0e(dp?S zmKrB5>1<>K{iU$e_;^H`SqekibU$g+#BE&lqn$aEE}He7gRRk^Q-=AZw54wvQD06Y ztpS6CaYfopvbLEdZ8PnRm#jvUU)ql|!Z=R|4!6I7i)Ov0(Q&e3oUi6x-piS0EN&ak zeq0)cp=2;8?bvipbtXlGq(_7p3)`mJ#&HY}d7U-r4=EHHHt0Ui9j2G-kaU_^Z7C`a zagH2E7`q(lH2x&BV}{uwjTC>y@oO`5St-8wuoM%;FKt51HkJ{&C_u`~lDgB4Ld@32 z$_7bhsMCm*KJsFcbP|p(okN3>oj)l`ISC9fbGoWqgU}%K3QnU$9Il)YTH+-qjC@WR zCLif&>Ks5XZe*qKkI1YfcFER{AD+~x ztfbOhD#Q_C2yvxnl{wXuZdK2J+A)2dMrgX3t0y^ScZ}{9B-6P_F~h^DaTG~T zNW0(MZNs>5+P3-WFE$coiXFSd_^wTyom$s*t2KF&E77J_k2TvFvwUM|g%@ZAjDg!5 zxab8mBRRVb<>An`}nq*{bm|nI2}m*C2_#RGIi}!PGSJ zNa2MT8I6*pt1~|dVWPs^#*OF@r%ZU5^0c6%CZthqN%UzWpB&B=EakVieVh!8+d?BK zAn)=4)YCZAMImukCMed6DfkRA&A^m-)M*awa|t_fTVWUfS=@3t)9vXC6-*h*1g^5t zBgHIcdMYj4 zY1|wkv(AE?j!F_ECyQ_fY?*L{+LdGY(>3e~$2&|oi0}v#4z;c4v5hmz z-D_pSvrc+uxyEKi8fEcx<0Hl)tG~uEQ*7i4k)9iD?b$&ys3Q7kT3%P28RX+SCG%&R z-jNA%t_WmEPK-12FENXDrP5P;U37HmZVqE5dCkSiv0;SsxHTf=WkkoPFr#i6@>M;K zsiH~g#ikf@qcS=F8Rr|On2+PdsdClGzmEURBrgz~HF0$si4pA%W2N|s7AC|VxVb~JLzi4Htdckvx<#*$hz@7!$%2{Sc7G% zfpw8(8u`3ydr>n3NIg9_znq`t_{Osn;|xEt;WWOML*lYzr$eSR?VW}%Rz@2wt~jf> zs1zx#_^jdzpm466=D#Q#P9tGv(a@}NWq`Uxnio5xtuZaX4DK=l8uuooYuQOs%SSWx zN0^nZ(hGJDA&InBO20yDvo0QC&Q@lgsqB;{Rb`URpixv2rx5GHX@J!a3rg*|CYuFa zrO+>$=w+R*`Zz{7+mM?Gvp9{3p`sX+kk;eltYn&vB+O;;R<=~3L=QS}4qd9V&Bp1HrIImPl zHp?tFOD{Id#F&+yH%rIJ3@akeI4l)P6q(H3gMExVsiZL4tRW|Srekjn4>1QijT`3FnOUuT%pm1%Zh;=wgl0j$}j8?a~G8^Y3xLu3+R9L=A^WpJ3)MgABZA^Bck zKstLFBi5TW2CDG&~%Ior5TsQIP=k2oQ)W-7=Z9*%no6m*dB|Q zpNcRaH_n$%G4nhp{>Cqa=c;B-En>5LD-YnLf2wpkmz1%_L~6&ym{w zsTGqKe+Kf}v1X;Z(!kK-#pgn+5IKb%3BaHb#a=5#MwxXSiD|=UWFyvCL*(V1#^(Xi zq;e=3aT+HAqUV~0x|yw=Tva=a<(T98CFXRmlB6nwQhU`ZwNxq3@1BaL4i}cDRv0_! zZv&|n$&A)YoK-8EcR3q-$RP#1odT|4{90Ph-XBF(FuZ zUC$IP);K*l#8_D%I>Nof$t2b|h2xvzs5{mf#+nzz8Yl2uEq=PAe$wBkm*y;NyzvYZ z?HDtEj9Iib3HZ|6MUx6~(!E2Rk^GYr*vrpEm_=jE5_Egxsy8LPjH{m)p1E!oi6N|< z=c3)`IopgyxU5s1CS-kUE?jDm5Z#e+|7UOVOa^we3So{^JDS<2v9(p4vA4GL;H|Av zrD2&Gq5^MBSJ>q$C!3@GW|x$|9su8=IQ4gNKcy;Ez5w$ z?%EXZ_EuJ>=SrI3VKi0NfM{B6nYw&KRbaN93drpui^R%RJT<_XZdEPn>SVMe(|C)J zg}6X!Wfn>{^LL^Mqm2`!$?cVF`gNt%M`udmuB{c#Wn_r+gz0BAJWkS_#!DQB(oD1-7ZB29OF4tEtpvjt*j73QaA@ zx>t~o;TvrR#L#W2)@ZYCl0?ZmYLQ6JVs52$q*+u(TQ9>`%InTEWYWjT%~X$mv}>@H zqn!n!Da@))qi7sCky%DO7c_CsH_V#O^h`#M0jSYt%_JG^Uz-qXjq5V-lUv+_*<%(P zX_hk%*9l?d|D0=8#+5?tv36U8%Wi)bK#YBD zQeyJs|}0lDA7{4BSVCGe898xG zwVFg$n1ZbTu#{7Z2r^AtkU!Hk;^S;%Ez*|=Vc6zaePl*gl2fx>{KlEZB8)ePnM;=Q zEE&}0h=I}Mm6>)Bv*Fi?Fxa?Q-CAiI>tZFA39Z9e%6QJq^efULweuKjyVk;9pA=^5 zmQEY1Dpj7u*@7v{98$>%?Ir=FDDWLCD?&*uzR5Ku8ICY3MVln6CGaJJ5tTU%jxxFt!eMA)>ehST;n2(c&({POr}v6QulXS zCt3S+qU-sX+W8p%Nt6dyOZDZ97j10IV8%y(Jh+$DY_7_UjTsXq1IDC%j%ez3lK3-B z?%nI4y=={x$N;v_+RtELLVhM%rbKy?bV(AuoUS5fe&c{aUodhz_#;GlM(v%h)ba2wPVzrn42+;UAqaHihR;st{bc*S-0Gnp9Q%Xx4BojgVA>o0~=LU0{hZ7axqLFKN*pandoM=fhowCQf8z)4C2y&S}ibNo$lK+>Xe~E|co> zqf_ijwfuizE^TaR&1J}^H5jL45$T2n3dwk*5AL%E(M+tRCYI6ca7B!%hFl+~8S7eQ zNJ4Jz=X&42i?-U^UpSg{`*B zP@ZP=l&hgrEKE`VCktPcP(`wZnr(-=;SQBYLoKmG&8c}&&TF|do!4nKwaGpSuOLIT zwGv#2HdWY=ju|kPij=d=hcO{?&e&d)zAhQ3J{DVEvKW?+2ujdwv0wHXcQ#88l#>sAs<83P1m-i&SnkGEp>CPkP_WHqT4a1s zHX*kBVx^((}&+5g>xcCP1<%&juG_#V`KJ!oI zWEsaYXmxVT=}m6m=kCTZ*^J~cQ{aYrk;@FzOyf8s2duGbt%$Rq<>WBFZzi`4jD__g zsJuE>M{FWxlO%JB6Wk;$%!KlzW*IWbY_G>mNos;#nKqGx8&~P+VH}q%l;pTFqbp5C z$Q}M7Pzqeg9rMDGRC+3bBx*YI+GkSDg4?o6Hr6gW)BmCrX{70I%~h_ojB~ql29tS! zH9t*dsMMpD;;8cYKw>fkY|Rg? zoDMo}mWs5lY#7{Tc^$WE%3-W-mTtEbT9ULBRtjk!(ySi3kE^wia;UD;Mx^&h zFKSP+IgJ$2B+k|4awnJ(w<=S?SZ8&2=@g<<+SBlbw5i9q`l-h);@0k_;xN9X_UZb| zIGyF~!XBptS|!UW=?vtdOjRRTGB4b5>1F!*NHe5uM4076WI~@af;1Wa3@b5a zktMXH2$Rm%nE_v>QOQ<^$BeO_p4@`|$&4l={5pw@F!r^uR^7LSCz-Y0;8rge&SE*j zs<9R>uHO!ZQ#`&tu0R@Yobhf8tCb%Lmta;Jaz@CxIn0b$Om;pBBylme+`&E_^uoGsslsrn|JV{7f^rMrt8vKjR$9%ikII<5XpHv&v#K zXDe=U1vaskf*F--5aPGrgdLW>j$@n$$@5P##h3D%S{O=dFtz2tF#1*EvL@ohM# z@W)te^^2jCMeuyVVj{RSf#s`rT4wMRi*Yra=^?X8aoU3uE#t><7ehVP4e2O`@%sdd zo_(z1RGml2psnM(l{L*)$5I$aB<7ASJ|{`Vf-#6MYw^%S%GY_sZIB6!8ix=PL# z1M^!hs=}$iN|bzY=M-xYVy3|@uu@cWZc3jLo-Y?7H(RhuNC$XR- zSJe5PuEJ8CVXe4+kkv?g?JH33TUe)p>&;moFlJdJ&UG1mxE83(8pm3z;5bS6F#BUv z`5HS~(A>H*{79RvE#o%LIFiC){X~}kt6R-oE}CUkDNi&Bt;$urq_mBu)ELV(=)iQM zw1ymqag||%c+=}LEHj<_j3hAYUdQlOz~~~kC#`X5{sigu5fm2_2g+z!9q;unmQQ@R zEIZTE`!O#Gw6zZB+Py7l+!qdTGx2H5c4)1BIvhrlYvIXq7>^IJ&fZ|O5~iejwf;! ziD70Fx@HPf+||BG&Lr#Z$mzrkmc&;0rjsnW&692%9w;r$*j0$2vRWO@1BBZLGI8Hi zD9-q!fGd+r7v^)eg|TCxbvpa73Xc=|80!an(mI30G3?wTt*rObMqAV5LX7EFnr|1% z_-mTaR+Ka^>!fLZ{=qcg%1ZN0E6vyMOY;;v%`*$%m*(pONb~H%amGd~&0DQBi-mDx zfR*Mek!faOA6G-UYvj*0St7%(JUp7qcrD45YBfjeo}oOcMEAI9J#yql+xIo*Co%3& zMRJEB%Zm;rDW1YykF%@H`y%8{y%Z|*hcM!u=Ox8lm;pVRbET}d%QC&`8f9Mvun6OR zc!LK!*0;9q1@4NVt?ytS#b~mJ(+Rf@jcrY=#|J)S?rfiuKfuBAm$MbCN~m>NYmdkf z|1@KB6Itjm_RD$3Vf>o=I5T$E^x5Af*ID$a1DRY+hWzj0P(_ny-)0-csx4+5b!>&h}5^iED zO$*?%jQF!I%N)iFoAGd$FzP5y7c8k1F@2_3N0Y~BWOipf^f4N4KN~%mm&q!Rq|JIn z*uFF>=#tw>JVRrxfJ|>liz~vj(9w)AV#{Trccp?{yJQ%DM8$cV^0U*?oq1~!FMApa z*TCNJ5Nr(j#YLbWyulkWZgt{qN4S3j#r+J-zc2I&{lA6c|6MaX+$T`N?Sta} zfx7op_gHn0R`&}{ZTn-;#Qq~F$M3D~P1HRC4j|sj>R(3P1C@Ttdrjn+N9SlW(LiHHcKW||B ze*(q73zT^GMcNz*<@m)^Ut8aH&jrPOQ$5~Hhy4mD>0byXo;gtZVI2Gv_s8K`7!Acf z97;MXLa{Fi#a`a%D((CL6!+cAmGCLt=Rvwa)j2STzZYNu7zZU>7bxMLP}YVLt{jwb zr69jw4k`*I+%MtQc+loEDCs!_CH#kQGwG4H2Vcj15xjx^GL+*y3&n1NvM78N_Z+Yf z@n+Vs$B&&*+~0!Yz5q%&&4m(vBJ7F#2-OEEyTc5Q*9wY#q`KEo_s5{bmk0KSmq?VP zPu?Ug_Q#;ae@OWO+=731D0WZ6SFw{fyh=Rf;Wgaft7YqHP~zwSPid{1N9J|LM@wF)n8{=MBbss3lm-oR*xTDIAkR()nTlMA2=}_u#B$WCa z3X2k791MV6;VRr4!+o$6WGJorTXnnMPQe=-Zzq)aH$pk?I;Fg=L&|HO>a&&8m6Mf; zP|B|p?2LU2b&rDGNJkL7jC(%V72OG!qTi@yGXpwte;3Xpp5D-#baYYf472sk%Js@s z$|cJA%Gt_k%5lo4l*QpM9KQg(1+RtL`Wz_7eO`GZ#MZAUzgB*s{7m_ga<_7ea;-8| z*%eBCghM%gMWr8n0{s;4o!~F%E&fTpOofMW>IUC}E#OVqKv^BGK;K`*`jT4Jtx)Q3 z4SbjI^Ptq<40V52`81UJ>JQWL@1^dY)V&#$bUp_6(@uY=Y};Li691QQBjH!Uz1X#a za-0V0UlU6F`PDs_y5Fs2yI+SA&t=t5!1IJ(3gx&l%KGYlu%h)PxvHa-C1E;tMWMta zZ|C34@f=XX->qPet4H7$=&O}4!5`6QK?ye*{y?~q>R$;;KL}R;BFa2a@+YtVm2kh6 zw|O0QqQ0)Eeill;KZ0VvUEMb+*F&*it@^7_?31DNn>h9F37^ES3A~JZ9oP}QDwKYc zL)~we;~guw{{Y4P6XksPGx7F^t0X-93Ec-uJG))hcE18euL#=^Pifc|`or&Wzg5O| zKM1d*Z-&w?UxdWpW(1V@`@!R|E95wB9#{XC@EZEL$LxC84W+!_RsBu4o^Vm{9q5E6 z$G=gUw|%0YfLGu;D92p^*P$nrYSAmIa7!qw>Qp@dHhw(ETX6#o~X zq+=YE_R#=tBb^oDLEPt+wCA;*A>}f&HKbf-HnjDia9aPebBuvjy(M{|)7A*q-nyQ0zOwcIf4yl>cv>jHN!VK{-walyV4C&M#(t>2c;P z*qZcBhtb%LhM9yf4bMP%iQrcF2PcPI_}_#vu&c5IBz#b7DB&aE0qo1G`=BCf55>Pc zT!_CDI??|u%$sT9RVejv9DWTmp_I40K}xt<{r#aFUtY5<@l7vey(_2c6e#UOLDvyH0@;|41nD^@kFFJNP}}3qc7d?{d0=zB|x*(|gbxa25J^WiMrj`d=yFa4f<9 zYuKFdXJ9UP0H)#oj{2{L&2V3;{!hVO_(wvq3xglS%Fw{h7k-HTM}F(QGC^O#Cb*x3 z5xDP#QvTav1Kc;k#xTw1%xQ2Xc4MH}jf7%1SoPj8gL-KJ#V$(S>q4=su6hNy1v?k~ z3_E#?mBc4s4r+wmcTm!E9E$s=P{QwlQSbxxU#0CBEHoC;B!h_GvH@z6vG%6QJ11TZ4r? zpxAd&{kT7G97aC^s}XJ!d>wrQtdA~V3KI9%p|ppWVLkMj>Mk#1tc!ax6npvdgtY&L z$`E)I{cK*_eS`81DDJbMgqN3+NqBjSvV?BX{XJULF)dipIu(ppyca2DCztP zZlVZ2gA(p-D92d|ufvz1)Qi03St#$Dm2&S5C7#akeZseZ60VN23>5qPkS09S7fLv9 zDBNKT&yxuSz4J>DPP^-7XYQ6^T2R)r~3cOU?KJV6Rd-~d{t7yAA?d)hoRV~ zLF;%>j@Mt^<%^YKUrs4s-;;Puc$M%n7|kQ!zxmkid*Kaqd3!kd8TuYf$8H^za#{i3 zlX8MmpR=LlJHh76eyTqOYvca}lyLIuYGEVDxHYsElyIe#_i&WsZi15D)yk!?7W!-` z>3so8dZ(y+qPh=*5^eyj31i_Y>^rD?YghyKW>AhRZ(Nsh%@3=iOQK#w|JB7mbot__ z#P^-@0zATTPuXlEZ*Uj?Or^XXTl7`%98oM&{dHIc_g7#ToTd76Fcf`~>SJIC`ba3p zAFS@(U}f}<@JqZ}!b<4jup+Fc?qy*G^gvi1`l-7&EQfwQCtn$YSD?i66=aGP^eKD{ z%A4%P{R7CAg9crCF;Ha2BOb}^#7oEb?*c7qj!V! z^PuYLUK!>?F9R6@gYME8X?j67AwyWuCHMyUKMVN_!8-5)^o8@`%^VKLH}DAbCERX!8hsnYByb~? zbgqLE@9U5*8}tg?j$JAgyJw)-jZ*g!>fQs=w1YaskFjqJC7uXK(+H{sFX0{nC7u$H zDhMhBC4K(teuqF5UC<497I%5K74|`A;Rp1KLvRi5JK!O>(Do0McWX(!BhK);? z*tJvlYU*AX$~YkJ22003r@H^{ZJ$RjL!5$6L$OPR%dmS6E{7B02HX?XeUQ5MQTI;j z-bUSi(mb-7da{l8@8y8uPpT@H39LL){m_H_+#*J`sxl)2crS-$0L6 zy$%%rP}TFmH_+vcm~xz-9JW7YWa*znslRvNCy+L2g{O^K{*$1T%Wz22gZe@#zaCKH z>j>YYTpFuC=OV{${2BYK>loUu<0EwHUbdhm)O%N&_BA3UymLAngg#02UN9a#R`qZ= z5Is!w+a#i&goiWXN!S-2hA+TO_!8U2I8$ zt#Y3ZFH@d*VJ3VI?u68t-x4?t&WDxYX!tBlfaJliJ!}A5!ltkSoCjfu5sSjx<;cx;BgN%oM{_q*-f>K|XDfIDB z>T4X_3CF_CQ0j3$90R5PYQh9aUHJ`!tzb*|G>n3b<9@+#6f6vDz}wVYGNf z^3%z-|9)kLa*gupB-{U@GKR+JMf^>awUy~KN^xJV>_ejzy{oc;vbM6gvVc+=vDn|H z@d`gu?ok$0`YGdR++x>5IhaN+dS7K-Wi@3UrK$X$P9XLdl)IE$l*!7WN^j*I8nT4z zrHoZJpwozZZDo)$Pp#*SCrF~6O{4F-pW{I0i~~U51mlr+p6?ex|Dy?DaC)M zaKzH&pnZU2_?{eiZ=M%haltNea|?SDb}v2urUgR-mgN}O%~wKA>0tTPh1EeU+Db+xEwldzHWSvfY1H4p8=VyLYqwzf<1oZ0ie^FDWCGHI=25 zMU=^%>~I&Jw0T;&KsiS_QTep8udpezg5{)DbEdfF-}D&YbwhtH;3E)>y^2b zUdnwHt?N?fR^@u-0_7Ct5M{Korm}?6rMzCjj_-_epK>0|K|1BWp0J&=cX?ZnQC5IC z@z10DzMSo!sq76Uzg?7OSzG_TjLl8THuJ5a|}xOPn0W_Y0Br7la<4j1C$+< zG0M8iYRVvGpwdv@Eo~ony>gW@R@q)zS6NM2LRnC0DDRfC<2$ZAr0k?@tBg{HD=R32 zl>tg0<(*(V-s{SX$}`H3l^-fMD%UF0l=GC+m6MbS%7MzR$|scHm9&q4UU^WtTe(j8 zrgDsOgtCXSlk&$Bc6{F`XDXjnj#lmtvh6aI`pGTl64hrZrzxLQwo&RAgPi`VA1ZFg zw@>+2F}wY}td#qKUbMpm+-}tutNy&|ajMIGL&!@Bp`E#Ic{{@uzH>^@*y-tKLENNM(6- z&!PH{1?>1vLWys;>glRKuX>{Da=%d0+d}m+s{5%fUuzcsV^HGTq55jor>UNxdK=a2 zs4m~1knn#5*x|o`qVH8*?%RnzL-lyoJE$I}dQsI!=Cjr@o!z0Nr@1mrSyY)r`J=y< zgHpcsDd9%I9I&ynq`KeBiz9#C9JYT0XrPye(l6+~7JK0+dXzF)DaPV{&fDfr8XQy(Ba+0!_GD;b&bSTehI(I6UC?_dj!Gs29=OtGC!-;9pfwRecrZCh=cZd->9^==0UT0Q;h! zRR4;qFHwKFuOj}3)qjHOtJJ@U#eZ<`@vorzXX<}a^<(&1@oRe4ssB0kpF-J-|0?x= zMg1?Uzn`XWz4||^{@2vMx8^5Y^QR@gA^G?9qEM-;=Giw)aeJ@13-LwAACjBJmObInB>o(qGVTt3HM} zL?5X3y?yQY&yg?LWc(BVSoN=??X#EaiP9cOkNdkuQ#Jks^)IgWqg5X%?OoE}$&UYV zZT|_H{~J=C#3`S@l&y}t|ET|IE#FD1%eQkRebZGBCXDD6R9~y@F;#WUE&o)_e+#Y8 z`KrtJbR_%|)$>UCqtDmy9W;MSR4*^(h5t2od1`%cR{ssEuTp)c>g!dnEAi9jW4n?t zwj|YislG#xKS|5)7tu-M60QI9QoiW!?~YZL@l5o}c6aPLSmXDT@Wj8fyKO&Q?cLuYyQt&0 z`@3MTO8ez_?(dL&$N5dd`)hc4jzaw1-w9hG=_fy7TAq7FM<%Jg%vZ$Tzpj1!pQSyZ zPg30_<$>=0ZdkDTyT3CgUr)Efx3$BMllZZBeeW?$OX>&z2-Q!rFM4y;n@M@0_fmbk)E|1H>Z{a$lIlk#zZ}D* z?Lod>CH5)mpQ`pVRqrM32mjfsk5hfV>ORsw@PAG9hEiVW>s9Zm@gG+G>s+?KtYgad zr0O+PpQ(D3>RsIBt@;o>-dxpvrG7cy8>&xL{Y}+(X#epaVjpi75c>`4KVQphr|K)z zK1}UbYWhD>|Cc3x%5S=s-%dT=IrYz>-TGoY$8c}* z+*w}wSYd5{QyFjX^LG49dhgeNr~lorugYfcgXjJJ<+ADXazE(*e>%H*7fG%oeqcw6 zj3XH(4jegHYwts=11GyPyQk&$W7yr(VHA{ly5G#Ux~IG8kKG-EK#@S95VBMIFYpOv z3Zy_b!ifWcB1@qWGRDSV5U=n*Bn@vDfwa>eZ`PRo%Bx?+JbXhGC)nJ3{_# zA^)b3e<1ArInFoKx4?Z1;ja*XA^cawPZxKNj$Jh_#UaQ?cIbg8oOuR>=QDL4PLb?+f}9LH~!Ke=F?!O!()w z0{(^AFaI7#Xy5aK{;r_EhWixq^Y4>}@ZW?ze;4QfUjct4?E9TK|3biD2>uN9Azc5b z!rolKUy1YjTE@Fr?^6-aUkdo1(8s@j7TWU{vEMCmf7~c!xK020gRtiVvEB<}y)VW7 ze=Pj-6BrZP(+PX_#D0;k2K+x0`d&wV4E6m<_;)VsdtU7Kv7kSDZm91=Vc%V$|DVDi zpNRc$hp#NF;_kV)^BeCAU1pPlk{u|+sZ2`}Oe}5zN-65iCc|ip=qz8cAp~>7)P<*CN91*Dm2|P9P$EE0 zmfLkrlNxibwxQF2Poui9&{>qzHh%2z#3+FqVH%i0?O{?C9jJ3wFvd_Z_pGHHFp8=M zv)mkb!n4X8z^cr%ahTq<^#rAGUfI$PX4=(JfdN`Yo6ftk>s@d&r?=~(bzTzI{mvNLgRo*p-wV7c+wCbT^$2#&p`XL#@0P zUzbalS|Ma1uTi_g!y1n|)CLr)(8qFI1~ zLVIPIb(PyKA8_FzWX1kjIBn74{^&`oz2}@3$nkVmdkD+xI@fH`H z>Nl$Dt3xZ;?|Q{sndO*nC=ZT}m2(-=4Mwcz>4qfh@>RkjO1+yh3LzaPP6tk#V~aZn zZUc6a@;p3Nxq(eG)&!e1kJ9)QW3IWk+QNuyXcN8EnHu5#@G66B>yX$^oKbw5>G*SO zHuxuX8LOr-vELP$vy}~xb3_N4KSHZ(!oyLa?ot}BznLUHoOpYtx1PWTC(XLwa6r~S zGCu9`{Aj&}IAHJ48{ae+boh}Oz~!t+e~k8Ks0t+PV4jChC6Fs=Ef`% zM`(x=!fTrms1PE2(C(f&TeB4mbIt8-?71YST4I+JW7=@*4LXX_MsLjId%WNxl^YBn z{1INXkZ^hDI#Rdze!QX##`(hDIJfYixFjtK!jQ5NoB7*xpJ{qzIWw?(Oh?2wOdkUb zv0ikj9n6I0!_<8R^Ndz7I-Wg0zyEsXeLeKtf+l;I3`MnRK%AlMPi}r4jC7)`JfnD|+-*zmCCNhwF8qWm3BRy@CzJjK64YR+Z{~bEWS&&b0?Q z^XM-m)Sy7%>lO-ws!=%bb4?$1fS}aN*s`Nj==MdWVl?F(KYVu&V|=?o=rYX7h>#c3 zS;`0#>Udb_y)ef<3N}71a%az=O?upw;FO~r6{Y5aGwxYfV&4iFg@d%)&5$VFQjK|W zz$rP5f6$qU9Qw)#T)#)Y=8#R9w~)e@fk7ikkm2j)y=%TtJwnSeb~YG`=%IjL7VyTM zoYt_hwfh@_@{*_cr@Jo+o(BTH?_}23?+emB2kRHdn_jT!u4ljTwXNs1d-k$Aqv>v7 W?K0fDTf@q&zvvKw;EVV_gZ~2n9P5Dq literal 0 HcmV?d00001 diff --git a/unionfind/unionfind.c b/unionfind/unionfind.c new file mode 100644 index 0000000..f0068bf --- /dev/null +++ b/unionfind/unionfind.c @@ -0,0 +1,9573 @@ +/* Generated by Cython 0.29.21 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "depends": [], + "name": "unionfind", + "sources": [ + "unionfind.pyx" + ] + }, + "module_name": "unionfind" +} +END: Cython Metadata */ + +#define PY_SSIZE_T_CLEAN +#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+. +#else +#define CYTHON_ABI "0_29_21" +#define CYTHON_HEX_VERSION 0x001D15F0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !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 + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#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 CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 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_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 + #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) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #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 + #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 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 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 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #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) + #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 + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(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 + #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_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #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(__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_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# 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; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#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]] + #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 + +#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 + +#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 +#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) +#else + #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) +#endif + #define __Pyx_DefaultClassType PyType_Type +#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 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_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))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#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) +#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 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#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 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 CYTHON_COMPILING_IN_CPYTHON || 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 >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if 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))) + #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_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) + #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #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) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (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_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 && !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) +#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 +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_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_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#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 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 +#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 PyInt_AsLong +#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) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#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(MS_WINDOWS) + #define _USE_MATH_DEFINES +#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; } + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__unionfind +#define __PYX_HAVE_API__unionfind +/* Early includes */ +#include +#include +#include +#include "numpy/arrayobject.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 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)) +#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_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_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) +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); +} +#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); +#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 +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +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] = 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 +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; } + +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; +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) + #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 + + +static const char *__pyx_f[] = { + "unionfind.pyx", + "stringsource", + "__init__.pxd", + "type.pxd", +}; +/* BufferFormatStructs.proto */ +#define IS_UNSIGNED(type) (((type) -1) > 0) +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; + + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":775 + * # 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":776 + * + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":777 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":778 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":782 + * #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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":783 + * + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":784 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":785 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":789 + * #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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":790 + * + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":799 + * # 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":800 + * # 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":801 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":803 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":804 + * + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ +typedef npy_ulonglong __pyx_t_5numpy_ulong_t; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":805 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":807 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ +typedef npy_intp __pyx_t_5numpy_intp_t; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":808 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":810 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":811 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ +typedef npy_double __pyx_t_5numpy_double_t; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":812 + * 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; + +/* "unionfind.pyx":9 + * cimport numpy as np + * + * ctypedef np.int_t DTYPE_t # <<<<<<<<<<<<<< + * cdef bint boolean_variable = True + * + */ +typedef __pyx_t_5numpy_int_t __pyx_t_9unionfind_DTYPE_t; +/* Declarations.proto */ +#if CYTHON_CCOMPLEX + #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 + #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); + + +/*--- Type declarations ---*/ +struct __pyx_obj_9unionfind_UnionFind; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":814 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":815 + * + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< + * ctypedef npy_clongdouble clongdouble_t + * + */ +typedef npy_cdouble __pyx_t_5numpy_cdouble_t; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":816 + * 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; + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":818 + * ctypedef npy_clongdouble clongdouble_t + * + * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew1(a): + */ +typedef npy_cdouble __pyx_t_5numpy_complex_t; + +/* "unionfind.pyx":12 + * cdef bint boolean_variable = True + * + * cdef class UnionFind: # <<<<<<<<<<<<<< + * cdef int n + * cdef int *parent + */ +struct __pyx_obj_9unionfind_UnionFind { + PyObject_HEAD + struct __pyx_vtabstruct_9unionfind_UnionFind *__pyx_vtab; + int n; + int *parent; + int *rank; + int _next_id; + int *_tree; + int *_id; +}; + + + +struct __pyx_vtabstruct_9unionfind_UnionFind { + int (*_find)(struct __pyx_obj_9unionfind_UnionFind *, int); + int (*__pyx_union)(struct __pyx_obj_9unionfind_UnionFind *, int, int, int __pyx_skip_dispatch); + void (*_build)(struct __pyx_obj_9unionfind_UnionFind *, int, int); +}; +static struct __pyx_vtabstruct_9unionfind_UnionFind *__pyx_vtabptr_9unionfind_UnionFind; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#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 (*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__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #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) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #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_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) + +/* 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 + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* RaiseDoubleKeywords.proto */ +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,\ + const char* function_name); + +/* 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); + +/* 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 + +/* 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() +#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) +#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 + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* 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 + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* WriteUnraisableException.proto */ +static void __Pyx_WriteUnraisable(const char *name, int clineno, + int lineno, const char *filename, + int full_traceback, int nogil); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely((Py_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); + +/* 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 }; + +#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) +/* ListCompAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK +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 + +/* 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 + +/* 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 + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto +#define __PYX_HAVE_RT_ImportType_proto +enum __Pyx_ImportType_CheckSize { + __Pyx_ImportType_CheckSize_Error = 0, + __Pyx_ImportType_CheckSize_Warn = 1, + __Pyx_ImportType_CheckSize_Ignore = 2 +}; +static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* 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 */ +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); + +/* 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 + + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_Py_intptr_t(Py_intptr_t value); + +/* 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 + #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 + #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 + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(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_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_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +static int __pyx_f_9unionfind_9UnionFind__find(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i); /* proto*/ +static int __pyx_f_9unionfind_9UnionFind_union(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i, int __pyx_v_j, int __pyx_skip_dispatch); /* proto*/ +static void __pyx_f_9unionfind_9UnionFind__build(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i, int __pyx_v_j); /* proto*/ + +/* Module declarations from 'cython' */ + +/* Module declarations from 'libc.string' */ + +/* Module declarations from 'libc.stdlib' */ + +/* Module declarations from 'cpython.buffer' */ + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.type' */ +static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; + +/* Module declarations from 'cpython' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from 'cpython.ref' */ + +/* Module declarations from 'cpython.mem' */ + +/* Module declarations from 'numpy' */ + +/* Module declarations from 'numpy' */ +static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; +static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; +static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; +static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; +static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; +static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ + +/* Module declarations from 'unionfind' */ +static PyTypeObject *__pyx_ptype_9unionfind_UnionFind = 0; +static int __pyx_v_9unionfind_boolean_variable; +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_9unionfind_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_9unionfind_DTYPE_t), { 0 }, 0, IS_UNSIGNED(__pyx_t_9unionfind_DTYPE_t) ? 'U' : 'I', IS_UNSIGNED(__pyx_t_9unionfind_DTYPE_t), 0 }; +#define __Pyx_MODULE_NAME "unionfind" +extern int __pyx_module_is_main_unionfind; +int __pyx_module_is_main_unionfind = 0; + +/* Implementation of 'unionfind' */ +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_RuntimeError; +static PyObject *__pyx_builtin_ImportError; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_j[] = "j"; +static const char __pyx_k_n[] = "n"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_union[] = "union"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_UnionFind[] = "UnionFind"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_ImportError[] = "ImportError"; +static const char __pyx_k_RuntimeError[] = "RuntimeError"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_Out_of_bounds_index[] = "Out of bounds index."; +static const char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous"; +static const char __pyx_k_Union_find_data_structure_Adapt[] = " Union find data structure. Adapted from https://github.com/eldridgejm/unionfind "; +static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import"; +static const char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)"; +static const char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd"; +static const char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported"; +static const char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous"; +static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__"; +static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import"; +static const char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short."; +static PyObject *__pyx_kp_u_Format_string_allocated_too_shor; +static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2; +static PyObject *__pyx_n_s_ImportError; +static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor; +static PyObject *__pyx_kp_u_Out_of_bounds_index; +static PyObject *__pyx_n_s_RuntimeError; +static PyObject *__pyx_n_s_TypeError; +static PyObject *__pyx_n_s_UnionFind; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_getstate; +static PyObject *__pyx_n_s_i; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_j; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_n; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous; +static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou; +static PyObject *__pyx_kp_s_no_default___reduce___due_to_non; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_kp_u_numpy_core_multiarray_failed_to; +static PyObject *__pyx_kp_u_numpy_core_umath_failed_to_impor; +static PyObject *__pyx_n_s_pyx_vtable; +static PyObject *__pyx_n_s_range; +static PyObject *__pyx_n_s_reduce; +static PyObject *__pyx_n_s_reduce_cython; +static PyObject *__pyx_n_s_reduce_ex; +static PyObject *__pyx_n_s_setstate; +static PyObject *__pyx_n_s_setstate_cython; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_union; +static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd; +static int __pyx_pf_9unionfind_9UnionFind___cinit__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_n); /* proto */ +static void __pyx_pf_9unionfind_9UnionFind_2__dealloc__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_9unionfind_9UnionFind_4find(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i); /* proto */ +static PyObject *__pyx_pf_9unionfind_9UnionFind_6union(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i, int __pyx_v_j); /* proto */ +static PyObject *__pyx_pf_9unionfind_9UnionFind_8merge(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, PyArrayObject *__pyx_v_ij); /* proto */ +static PyObject *__pyx_pf_9unionfind_9UnionFind_4sets___get__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_9unionfind_9UnionFind_6parent___get__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_9unionfind_9UnionFind_4tree___get__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_9unionfind_9UnionFind_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_9unionfind_9UnionFind_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ +static PyObject *__pyx_tp_new_9unionfind_UnionFind(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__4; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__8; +static PyObject *__pyx_tuple__9; +static PyObject *__pyx_tuple__10; +/* Late includes */ + +/* "unionfind.pyx":23 + * cdef int *_id # the map from UF trees to merge tree identifiers + * + * def __cinit__(self, int n): # <<<<<<<<<<<<<< + * self.n = n + * self.parent = malloc(n * sizeof(int)) + */ + +/* Python wrapper */ +static int __pyx_pw_9unionfind_9UnionFind_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_9unionfind_9UnionFind_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + int __pyx_v_n; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,0}; + PyObject* values[1] = {0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 23, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + } + __pyx_v_n = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 23, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 23, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("unionfind.UnionFind.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9unionfind_9UnionFind___cinit__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self), __pyx_v_n); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_9unionfind_9UnionFind___cinit__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_n) { + int __pyx_v_i; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + long __pyx_t_4; + long __pyx_t_5; + __Pyx_RefNannySetupContext("__cinit__", 0); + + /* "unionfind.pyx":24 + * + * def __cinit__(self, int n): + * self.n = n # <<<<<<<<<<<<<< + * self.parent = malloc(n * sizeof(int)) + * self.rank = malloc(n * sizeof(int)) + */ + __pyx_v_self->n = __pyx_v_n; + + /* "unionfind.pyx":25 + * def __cinit__(self, int n): + * self.n = n + * self.parent = malloc(n * sizeof(int)) # <<<<<<<<<<<<<< + * self.rank = malloc(n * sizeof(int)) + * + */ + __pyx_v_self->parent = ((int *)malloc((__pyx_v_n * (sizeof(int))))); + + /* "unionfind.pyx":26 + * self.n = n + * self.parent = malloc(n * sizeof(int)) + * self.rank = malloc(n * sizeof(int)) # <<<<<<<<<<<<<< + * + * cdef int i + */ + __pyx_v_self->rank = ((int *)malloc((__pyx_v_n * (sizeof(int))))); + + /* "unionfind.pyx":29 + * + * cdef int i + * for i in range(n): # <<<<<<<<<<<<<< + * self.parent[i] = i + * + */ + __pyx_t_1 = __pyx_v_n; + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "unionfind.pyx":30 + * cdef int i + * for i in range(n): + * self.parent[i] = i # <<<<<<<<<<<<<< + * + * # self._n_sets = n + */ + (__pyx_v_self->parent[__pyx_v_i]) = __pyx_v_i; + } + + /* "unionfind.pyx":34 + * # self._n_sets = n + * + * self._next_id = n # <<<<<<<<<<<<<< + * self._tree = malloc((2 * n - 1) * sizeof(int)) + * for i in range(2 * n - 1): + */ + __pyx_v_self->_next_id = __pyx_v_n; + + /* "unionfind.pyx":35 + * + * self._next_id = n + * self._tree = malloc((2 * n - 1) * sizeof(int)) # <<<<<<<<<<<<<< + * for i in range(2 * n - 1): + * self._tree[i] = -1 + */ + __pyx_v_self->_tree = ((int *)malloc((((2 * __pyx_v_n) - 1) * (sizeof(int))))); + + /* "unionfind.pyx":36 + * self._next_id = n + * self._tree = malloc((2 * n - 1) * sizeof(int)) + * for i in range(2 * n - 1): # <<<<<<<<<<<<<< + * self._tree[i] = -1 + * self._id = malloc(n * sizeof(int)) + */ + __pyx_t_4 = ((2 * __pyx_v_n) - 1); + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_5; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; + + /* "unionfind.pyx":37 + * self._tree = malloc((2 * n - 1) * sizeof(int)) + * for i in range(2 * n - 1): + * self._tree[i] = -1 # <<<<<<<<<<<<<< + * self._id = malloc(n * sizeof(int)) + * for i in range(n): + */ + (__pyx_v_self->_tree[__pyx_v_i]) = -1; + } + + /* "unionfind.pyx":38 + * for i in range(2 * n - 1): + * self._tree[i] = -1 + * self._id = malloc(n * sizeof(int)) # <<<<<<<<<<<<<< + * for i in range(n): + * self._id[i] = i + */ + __pyx_v_self->_id = ((int *)malloc((__pyx_v_n * (sizeof(int))))); + + /* "unionfind.pyx":39 + * self._tree[i] = -1 + * self._id = malloc(n * sizeof(int)) + * for i in range(n): # <<<<<<<<<<<<<< + * self._id[i] = i + * + */ + __pyx_t_1 = __pyx_v_n; + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "unionfind.pyx":40 + * self._id = malloc(n * sizeof(int)) + * for i in range(n): + * self._id[i] = i # <<<<<<<<<<<<<< + * + * def __dealloc__(self): + */ + (__pyx_v_self->_id[__pyx_v_i]) = __pyx_v_i; + } + + /* "unionfind.pyx":23 + * cdef int *_id # the map from UF trees to merge tree identifiers + * + * def __cinit__(self, int n): # <<<<<<<<<<<<<< + * self.n = n + * self.parent = malloc(n * sizeof(int)) + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "unionfind.pyx":42 + * self._id[i] = i + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * free(self.parent) + * free(self.rank) + */ + +/* Python wrapper */ +static void __pyx_pw_9unionfind_9UnionFind_3__dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_pw_9unionfind_9UnionFind_3__dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_pf_9unionfind_9UnionFind_2__dealloc__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_pf_9unionfind_9UnionFind_2__dealloc__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "unionfind.pyx":43 + * + * def __dealloc__(self): + * free(self.parent) # <<<<<<<<<<<<<< + * free(self.rank) + * + */ + free(__pyx_v_self->parent); + + /* "unionfind.pyx":44 + * def __dealloc__(self): + * free(self.parent) + * free(self.rank) # <<<<<<<<<<<<<< + * + * @cython.boundscheck(False) # turn off bounds-checking for entire function + */ + free(__pyx_v_self->rank); + + /* "unionfind.pyx":42 + * self._id[i] = i + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * free(self.parent) + * free(self.rank) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "unionfind.pyx":49 + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * @cython.nonecheck(False) + * cdef int _find(self, int i): # <<<<<<<<<<<<<< + * if self.parent[i] == i: + * return i + */ + +static int __pyx_f_9unionfind_9UnionFind__find(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("_find", 0); + + /* "unionfind.pyx":50 + * @cython.nonecheck(False) + * cdef int _find(self, int i): + * if self.parent[i] == i: # <<<<<<<<<<<<<< + * return i + * else: + */ + __pyx_t_1 = (((__pyx_v_self->parent[__pyx_v_i]) == __pyx_v_i) != 0); + if (__pyx_t_1) { + + /* "unionfind.pyx":51 + * cdef int _find(self, int i): + * if self.parent[i] == i: + * return i # <<<<<<<<<<<<<< + * else: + * self.parent[i] = self._find(self.parent[i]) + */ + __pyx_r = __pyx_v_i; + goto __pyx_L0; + + /* "unionfind.pyx":50 + * @cython.nonecheck(False) + * cdef int _find(self, int i): + * if self.parent[i] == i: # <<<<<<<<<<<<<< + * return i + * else: + */ + } + + /* "unionfind.pyx":53 + * return i + * else: + * self.parent[i] = self._find(self.parent[i]) # <<<<<<<<<<<<<< + * return self.parent[i] + * + */ + /*else*/ { + (__pyx_v_self->parent[__pyx_v_i]) = ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_find(__pyx_v_self, (__pyx_v_self->parent[__pyx_v_i])); + + /* "unionfind.pyx":54 + * else: + * self.parent[i] = self._find(self.parent[i]) + * return self.parent[i] # <<<<<<<<<<<<<< + * + * def find(self, int i): + */ + __pyx_r = (__pyx_v_self->parent[__pyx_v_i]); + goto __pyx_L0; + } + + /* "unionfind.pyx":49 + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * @cython.nonecheck(False) + * cdef int _find(self, int i): # <<<<<<<<<<<<<< + * if self.parent[i] == i: + * return i + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "unionfind.pyx":56 + * return self.parent[i] + * + * def find(self, int i): # <<<<<<<<<<<<<< + * if (i < 0) or (i > self.n): + * raise ValueError("Out of bounds index.") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9unionfind_9UnionFind_5find(PyObject *__pyx_v_self, PyObject *__pyx_arg_i); /*proto*/ +static PyObject *__pyx_pw_9unionfind_9UnionFind_5find(PyObject *__pyx_v_self, PyObject *__pyx_arg_i) { + int __pyx_v_i; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("find (wrapper)", 0); + assert(__pyx_arg_i); { + __pyx_v_i = __Pyx_PyInt_As_int(__pyx_arg_i); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + __Pyx_AddTraceback("unionfind.UnionFind.find", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9unionfind_9UnionFind_4find(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self), ((int)__pyx_v_i)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9unionfind_9UnionFind_4find(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("find", 0); + + /* "unionfind.pyx":57 + * + * def find(self, int i): + * if (i < 0) or (i > self.n): # <<<<<<<<<<<<<< + * raise ValueError("Out of bounds index.") + * return self._find(i) + */ + __pyx_t_2 = ((__pyx_v_i < 0) != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = ((__pyx_v_i > __pyx_v_self->n) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "unionfind.pyx":58 + * def find(self, int i): + * if (i < 0) or (i > self.n): + * raise ValueError("Out of bounds index.") # <<<<<<<<<<<<<< + * return self._find(i) + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 58, __pyx_L1_error) + + /* "unionfind.pyx":57 + * + * def find(self, int i): + * if (i < 0) or (i > self.n): # <<<<<<<<<<<<<< + * raise ValueError("Out of bounds index.") + * return self._find(i) + */ + } + + /* "unionfind.pyx":59 + * if (i < 0) or (i > self.n): + * raise ValueError("Out of bounds index.") + * return self._find(i) # <<<<<<<<<<<<<< + * + * @cython.boundscheck(False) # turn off bounds-checking for entire function + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyInt_From_int(((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_find(__pyx_v_self, __pyx_v_i)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "unionfind.pyx":56 + * return self.parent[i] + * + * def find(self, int i): # <<<<<<<<<<<<<< + * if (i < 0) or (i > self.n): + * raise ValueError("Out of bounds index.") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("unionfind.UnionFind.find", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "unionfind.pyx":65 + * @cython.nonecheck(False) + * # def union(self, int i, int j): + * cpdef bint union(self, int i, int j): # <<<<<<<<<<<<<< + * # TODO probably best to split into internal cdef and external def with bounds checking + * # if (i < 0) or (i > self.n) or (j < 0) or (j > self.n): + */ + +static PyObject *__pyx_pw_9unionfind_9UnionFind_7union(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_f_9unionfind_9UnionFind_union(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i, int __pyx_v_j, int __pyx_skip_dispatch) { + int __pyx_v_root_i; + int __pyx_v_root_j; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("union", 0); + /* Check if called by wrapper */ + if (unlikely(__pyx_skip_dispatch)) ; + /* Check if overridden in Python */ + else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) { + PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + #endif + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_9unionfind_9UnionFind_7union)) { + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_j); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4}; + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4}; + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else + #endif + { + __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (__pyx_t_6) { + __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL; + } + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_4); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_9; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L0; + } + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self)); + if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) { + __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + } + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + } + #endif + } + + /* "unionfind.pyx":71 + * + * cdef int root_i, root_j + * root_i = self._find(i) # <<<<<<<<<<<<<< + * root_j = self._find(j) + * if root_i == root_j: + */ + __pyx_v_root_i = ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_find(__pyx_v_self, __pyx_v_i); + + /* "unionfind.pyx":72 + * cdef int root_i, root_j + * root_i = self._find(i) + * root_j = self._find(j) # <<<<<<<<<<<<<< + * if root_i == root_j: + * return False + */ + __pyx_v_root_j = ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_find(__pyx_v_self, __pyx_v_j); + + /* "unionfind.pyx":73 + * root_i = self._find(i) + * root_j = self._find(j) + * if root_i == root_j: # <<<<<<<<<<<<<< + * return False + * else: + */ + __pyx_t_9 = ((__pyx_v_root_i == __pyx_v_root_j) != 0); + if (__pyx_t_9) { + + /* "unionfind.pyx":74 + * root_j = self._find(j) + * if root_i == root_j: + * return False # <<<<<<<<<<<<<< + * else: + * # self._n_sets -= 1 + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "unionfind.pyx":73 + * root_i = self._find(i) + * root_j = self._find(j) + * if root_i == root_j: # <<<<<<<<<<<<<< + * return False + * else: + */ + } + + /* "unionfind.pyx":77 + * else: + * # self._n_sets -= 1 + * if self.rank[root_i] < self.rank[root_j]: # <<<<<<<<<<<<<< + * self.parent[root_i] = root_j + * self._build(root_j, root_i) + */ + /*else*/ { + __pyx_t_9 = (((__pyx_v_self->rank[__pyx_v_root_i]) < (__pyx_v_self->rank[__pyx_v_root_j])) != 0); + if (__pyx_t_9) { + + /* "unionfind.pyx":78 + * # self._n_sets -= 1 + * if self.rank[root_i] < self.rank[root_j]: + * self.parent[root_i] = root_j # <<<<<<<<<<<<<< + * self._build(root_j, root_i) + * elif self.rank[root_i] > self.rank[root_j]: + */ + (__pyx_v_self->parent[__pyx_v_root_i]) = __pyx_v_root_j; + + /* "unionfind.pyx":79 + * if self.rank[root_i] < self.rank[root_j]: + * self.parent[root_i] = root_j + * self._build(root_j, root_i) # <<<<<<<<<<<<<< + * elif self.rank[root_i] > self.rank[root_j]: + * self.parent[root_j] = root_i + */ + ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_build(__pyx_v_self, __pyx_v_root_j, __pyx_v_root_i); + + /* "unionfind.pyx":77 + * else: + * # self._n_sets -= 1 + * if self.rank[root_i] < self.rank[root_j]: # <<<<<<<<<<<<<< + * self.parent[root_i] = root_j + * self._build(root_j, root_i) + */ + goto __pyx_L4; + } + + /* "unionfind.pyx":80 + * self.parent[root_i] = root_j + * self._build(root_j, root_i) + * elif self.rank[root_i] > self.rank[root_j]: # <<<<<<<<<<<<<< + * self.parent[root_j] = root_i + * self._build(root_i, root_j) + */ + __pyx_t_9 = (((__pyx_v_self->rank[__pyx_v_root_i]) > (__pyx_v_self->rank[__pyx_v_root_j])) != 0); + if (__pyx_t_9) { + + /* "unionfind.pyx":81 + * self._build(root_j, root_i) + * elif self.rank[root_i] > self.rank[root_j]: + * self.parent[root_j] = root_i # <<<<<<<<<<<<<< + * self._build(root_i, root_j) + * else: + */ + (__pyx_v_self->parent[__pyx_v_root_j]) = __pyx_v_root_i; + + /* "unionfind.pyx":82 + * elif self.rank[root_i] > self.rank[root_j]: + * self.parent[root_j] = root_i + * self._build(root_i, root_j) # <<<<<<<<<<<<<< + * else: + * self.parent[root_j] = root_i + */ + ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_build(__pyx_v_self, __pyx_v_root_i, __pyx_v_root_j); + + /* "unionfind.pyx":80 + * self.parent[root_i] = root_j + * self._build(root_j, root_i) + * elif self.rank[root_i] > self.rank[root_j]: # <<<<<<<<<<<<<< + * self.parent[root_j] = root_i + * self._build(root_i, root_j) + */ + goto __pyx_L4; + } + + /* "unionfind.pyx":84 + * self._build(root_i, root_j) + * else: + * self.parent[root_j] = root_i # <<<<<<<<<<<<<< + * self.rank[root_i] += 1 + * self._build(root_i, root_j) + */ + /*else*/ { + (__pyx_v_self->parent[__pyx_v_root_j]) = __pyx_v_root_i; + + /* "unionfind.pyx":85 + * else: + * self.parent[root_j] = root_i + * self.rank[root_i] += 1 # <<<<<<<<<<<<<< + * self._build(root_i, root_j) + * return True + */ + __pyx_t_7 = __pyx_v_root_i; + (__pyx_v_self->rank[__pyx_t_7]) = ((__pyx_v_self->rank[__pyx_t_7]) + 1); + + /* "unionfind.pyx":86 + * self.parent[root_j] = root_i + * self.rank[root_i] += 1 + * self._build(root_i, root_j) # <<<<<<<<<<<<<< + * return True + * + */ + ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_build(__pyx_v_self, __pyx_v_root_i, __pyx_v_root_j); + } + __pyx_L4:; + + /* "unionfind.pyx":87 + * self.rank[root_i] += 1 + * self._build(root_i, root_j) + * return True # <<<<<<<<<<<<<< + * + * @cython.boundscheck(False) # turn off bounds-checking for entire function + */ + __pyx_r = 1; + goto __pyx_L0; + } + + /* "unionfind.pyx":65 + * @cython.nonecheck(False) + * # def union(self, int i, int j): + * cpdef bint union(self, int i, int j): # <<<<<<<<<<<<<< + * # TODO probably best to split into internal cdef and external def with bounds checking + * # if (i < 0) or (i > self.n) or (j < 0) or (j > self.n): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_WriteUnraisable("unionfind.UnionFind.union", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); + __pyx_r = 0; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_9unionfind_9UnionFind_7union(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_9unionfind_9UnionFind_7union(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + int __pyx_v_i; + int __pyx_v_j; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("union (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_j,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__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); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_j)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("union", 1, 2, 2, 1); __PYX_ERR(0, 65, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "union") < 0)) __PYX_ERR(0, 65, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_j = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_j == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("union", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("unionfind.UnionFind.union", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9unionfind_9UnionFind_6union(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self), __pyx_v_i, __pyx_v_j); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9unionfind_9UnionFind_6union(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i, int __pyx_v_j) { + 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("union", 0); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_f_9unionfind_9UnionFind_union(__pyx_v_self, __pyx_v_i, __pyx_v_j, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __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); + __Pyx_AddTraceback("unionfind.UnionFind.union", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "unionfind.pyx":92 + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * @cython.nonecheck(False) + * def merge(self, np.ndarray[DTYPE_t, ndim=2] ij): # <<<<<<<<<<<<<< + * """ Merge a sequence of pairs """ + * cdef int k + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9unionfind_9UnionFind_9merge(PyObject *__pyx_v_self, PyObject *__pyx_v_ij); /*proto*/ +static char __pyx_doc_9unionfind_9UnionFind_8merge[] = " Merge a sequence of pairs "; +static PyObject *__pyx_pw_9unionfind_9UnionFind_9merge(PyObject *__pyx_v_self, PyObject *__pyx_v_ij) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("merge (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ij), __pyx_ptype_5numpy_ndarray, 1, "ij", 0))) __PYX_ERR(0, 92, __pyx_L1_error) + __pyx_r = __pyx_pf_9unionfind_9UnionFind_8merge(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self), ((PyArrayObject *)__pyx_v_ij)); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9unionfind_9UnionFind_8merge(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, PyArrayObject *__pyx_v_ij) { + int __pyx_v_k; + __Pyx_LocalBuf_ND __pyx_pybuffernd_ij; + __Pyx_Buffer __pyx_pybuffer_ij; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + npy_intp __pyx_t_1; + npy_intp __pyx_t_2; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + Py_ssize_t __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("merge", 0); + __pyx_pybuffer_ij.pybuffer.buf = NULL; + __pyx_pybuffer_ij.refcount = 0; + __pyx_pybuffernd_ij.data = NULL; + __pyx_pybuffernd_ij.rcbuffer = &__pyx_pybuffer_ij; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ij.rcbuffer->pybuffer, (PyObject*)__pyx_v_ij, &__Pyx_TypeInfo_nn___pyx_t_9unionfind_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 92, __pyx_L1_error) + } + __pyx_pybuffernd_ij.diminfo[0].strides = __pyx_pybuffernd_ij.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ij.diminfo[0].shape = __pyx_pybuffernd_ij.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ij.diminfo[1].strides = __pyx_pybuffernd_ij.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ij.diminfo[1].shape = __pyx_pybuffernd_ij.rcbuffer->pybuffer.shape[1]; + + /* "unionfind.pyx":95 + * """ Merge a sequence of pairs """ + * cdef int k + * for k in range(ij.shape[0]): # <<<<<<<<<<<<<< + * self.union(ij[k, 0], ij[k, 1]) + * + */ + __pyx_t_1 = (__pyx_v_ij->dimensions[0]); + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_k = __pyx_t_3; + + /* "unionfind.pyx":96 + * cdef int k + * for k in range(ij.shape[0]): + * self.union(ij[k, 0], ij[k, 1]) # <<<<<<<<<<<<<< + * + * @cython.boundscheck(False) + */ + __pyx_t_4 = __pyx_v_k; + __pyx_t_5 = 0; + __pyx_t_6 = __pyx_v_k; + __pyx_t_7 = 1; + (void)(((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->__pyx_union(__pyx_v_self, (*__Pyx_BufPtrStrided2d(__pyx_t_9unionfind_DTYPE_t *, __pyx_pybuffernd_ij.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_ij.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_ij.diminfo[1].strides)), (*__Pyx_BufPtrStrided2d(__pyx_t_9unionfind_DTYPE_t *, __pyx_pybuffernd_ij.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_ij.diminfo[0].strides, __pyx_t_7, __pyx_pybuffernd_ij.diminfo[1].strides)), 0)); + } + + /* "unionfind.pyx":92 + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * @cython.nonecheck(False) + * def merge(self, np.ndarray[DTYPE_t, ndim=2] ij): # <<<<<<<<<<<<<< + * """ Merge a sequence of pairs """ + * cdef int k + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + { 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_ij.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("unionfind.UnionFind.merge", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ij.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "unionfind.pyx":101 + * @cython.wraparound(False) + * @cython.nonecheck(False) + * cdef void _build(self, int i, int j): # <<<<<<<<<<<<<< + * """ Track the tree changes when node j gets merged into node i """ + * self._tree[self._id[i]] = self._next_id + */ + +static void __pyx_f_9unionfind_9UnionFind__build(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i, int __pyx_v_j) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("_build", 0); + + /* "unionfind.pyx":103 + * cdef void _build(self, int i, int j): + * """ Track the tree changes when node j gets merged into node i """ + * self._tree[self._id[i]] = self._next_id # <<<<<<<<<<<<<< + * self._tree[self._id[j]] = self._next_id + * self._id[i] = self._next_id + */ + __pyx_t_1 = __pyx_v_self->_next_id; + (__pyx_v_self->_tree[(__pyx_v_self->_id[__pyx_v_i])]) = __pyx_t_1; + + /* "unionfind.pyx":104 + * """ Track the tree changes when node j gets merged into node i """ + * self._tree[self._id[i]] = self._next_id + * self._tree[self._id[j]] = self._next_id # <<<<<<<<<<<<<< + * self._id[i] = self._next_id + * self._next_id += 1 + */ + __pyx_t_1 = __pyx_v_self->_next_id; + (__pyx_v_self->_tree[(__pyx_v_self->_id[__pyx_v_j])]) = __pyx_t_1; + + /* "unionfind.pyx":105 + * self._tree[self._id[i]] = self._next_id + * self._tree[self._id[j]] = self._next_id + * self._id[i] = self._next_id # <<<<<<<<<<<<<< + * self._next_id += 1 + * + */ + __pyx_t_1 = __pyx_v_self->_next_id; + (__pyx_v_self->_id[__pyx_v_i]) = __pyx_t_1; + + /* "unionfind.pyx":106 + * self._tree[self._id[j]] = self._next_id + * self._id[i] = self._next_id + * self._next_id += 1 # <<<<<<<<<<<<<< + * + * # property n_sets: + */ + __pyx_v_self->_next_id = (__pyx_v_self->_next_id + 1); + + /* "unionfind.pyx":101 + * @cython.wraparound(False) + * @cython.nonecheck(False) + * cdef void _build(self, int i, int j): # <<<<<<<<<<<<<< + * """ Track the tree changes when node j gets merged into node i """ + * self._tree[self._id[i]] = self._next_id + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "unionfind.pyx":112 + * # return self._n_sets + * @property + * def sets(self): # <<<<<<<<<<<<<< + * return 2 * self.n - self._next_id + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9unionfind_9UnionFind_4sets_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_9unionfind_9UnionFind_4sets_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_9unionfind_9UnionFind_4sets___get__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9unionfind_9UnionFind_4sets___get__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self) { + 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("__get__", 0); + + /* "unionfind.pyx":113 + * @property + * def sets(self): + * return 2 * self.n - self._next_id # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_long(((2 * __pyx_v_self->n) - __pyx_v_self->_next_id)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "unionfind.pyx":112 + * # return self._n_sets + * @property + * def sets(self): # <<<<<<<<<<<<<< + * return 2 * self.n - self._next_id + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("unionfind.UnionFind.sets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "unionfind.pyx":116 + * + * @property + * def parent(self): # <<<<<<<<<<<<<< + * return [self.parent[i] for i in range(self.n)] + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9unionfind_9UnionFind_6parent_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_9unionfind_9UnionFind_6parent_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_9unionfind_9UnionFind_6parent___get__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9unionfind_9UnionFind_6parent___get__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self) { + int __pyx_7genexpr__pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "unionfind.pyx":117 + * @property + * def parent(self): + * return [self.parent[i] for i in range(self.n)] # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + { /* enter inner scope */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_v_self->n; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_7genexpr__pyx_v_i = __pyx_t_4; + __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_self->parent[__pyx_7genexpr__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + } /* exit inner scope */ + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "unionfind.pyx":116 + * + * @property + * def parent(self): # <<<<<<<<<<<<<< + * return [self.parent[i] for i in range(self.n)] + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("unionfind.UnionFind.parent.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "unionfind.pyx":120 + * + * @property + * def tree(self): # <<<<<<<<<<<<<< + * return [self._tree[i] for i in range(2 * self.n - 1)] + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9unionfind_9UnionFind_4tree_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_9unionfind_9UnionFind_4tree_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_9unionfind_9UnionFind_4tree___get__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9unionfind_9UnionFind_4tree___get__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self) { + long __pyx_8genexpr1__pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + long __pyx_t_2; + long __pyx_t_3; + long __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "unionfind.pyx":121 + * @property + * def tree(self): + * return [self._tree[i] for i in range(2 * self.n - 1)] # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + { /* enter inner scope */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = ((2 * __pyx_v_self->n) - 1); + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_8genexpr1__pyx_v_i = __pyx_t_4; + __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_self->_tree[__pyx_8genexpr1__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 121, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + } /* exit inner scope */ + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "unionfind.pyx":120 + * + * @property + * def tree(self): # <<<<<<<<<<<<<< + * return [self._tree[i] for i in range(2 * self.n - 1)] + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("unionfind.UnionFind.tree.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9unionfind_9UnionFind_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_9unionfind_9UnionFind_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_9unionfind_9UnionFind_10__reduce_cython__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9unionfind_9UnionFind_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self) { + 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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("unionfind.UnionFind.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9unionfind_9UnionFind_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_9unionfind_9UnionFind_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_9unionfind_9UnionFind_12__setstate_cython__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9unionfind_9UnionFind_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + 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("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("unionfind.UnionFind.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":258 + * # experimental exception made for __getbuffer__ and __releasebuffer__ + * # -- the details of this may change. + * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< + * # This implementation of getbuffer is geared towards Cython + * # requirements, and does not yet fulfill the PEP. + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_v_i; + int __pyx_v_ndim; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + int __pyx_v_t; + char *__pyx_v_f; + PyArray_Descr *__pyx_v_descr = 0; + int __pyx_v_offset; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + PyArray_Descr *__pyx_t_7; + PyObject *__pyx_t_8 = NULL; + char *__pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":265 + * + * cdef int i, ndim + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * + */ + __pyx_v_endian_detector = 1; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":266 + * cdef int i, ndim + * cdef int endian_detector = 1 + * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * + * ndim = PyArray_NDIM(self) + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":268 + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * + * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + */ + __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":270 + * ndim = PyArray_NDIM(self) + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + __pyx_t_2 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":271 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not C contiguous") + * + */ + __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_ARRAY_C_CONTIGUOUS) != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":270 + * ndim = PyArray_NDIM(self) + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + if (unlikely(__pyx_t_1)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":272 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 272, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":270 + * ndim = PyArray_NDIM(self) + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":274 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + __pyx_t_2 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L7_bool_binop_done; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":275 + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not Fortran contiguous") + * + */ + __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_ARRAY_F_CONTIGUOUS) != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L7_bool_binop_done:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":274 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + if (unlikely(__pyx_t_1)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":276 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 276, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":274 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":278 + * raise ValueError(u"ndarray is not Fortran contiguous") + * + * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< + * info.ndim = ndim + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":279 + * + * info.buf = PyArray_DATA(self) + * info.ndim = ndim # <<<<<<<<<<<<<< + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * # Allocate new buffer for strides and shape info. + */ + __pyx_v_info->ndim = __pyx_v_ndim; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":280 + * info.buf = PyArray_DATA(self) + * info.ndim = ndim + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + */ + __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":283 + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + * info.strides = PyObject_Malloc(sizeof(Py_ssize_t) * 2 * ndim) # <<<<<<<<<<<<<< + * info.shape = info.strides + ndim + * for i in range(ndim): + */ + __pyx_v_info->strides = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * 2) * ((size_t)__pyx_v_ndim)))); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":284 + * # This is allocated as one block, strides first. + * info.strides = PyObject_Malloc(sizeof(Py_ssize_t) * 2 * ndim) + * info.shape = info.strides + ndim # <<<<<<<<<<<<<< + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + */ + __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":285 + * info.strides = PyObject_Malloc(sizeof(Py_ssize_t) * 2 * ndim) + * info.shape = info.strides + ndim + * for i in range(ndim): # <<<<<<<<<<<<<< + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] + */ + __pyx_t_4 = __pyx_v_ndim; + __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; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":286 + * info.shape = info.strides + ndim + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + */ + (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":287 + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< + * else: + * info.strides = PyArray_STRIDES(self) + */ + (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":280 + * info.buf = PyArray_DATA(self) + * info.ndim = ndim + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + */ + goto __pyx_L9; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":289 + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL + */ + /*else*/ { + __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":290 + * else: + * info.strides = PyArray_STRIDES(self) + * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + */ + __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); + } + __pyx_L9:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":291 + * info.strides = PyArray_STRIDES(self) + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) + */ + __pyx_v_info->suboffsets = NULL; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":292 + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< + * info.readonly = not PyArray_ISWRITEABLE(self) + * + */ + __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":293 + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< + * + * cdef int t + */ + __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":296 + * + * cdef int t + * cdef char* f = NULL # <<<<<<<<<<<<<< + * cdef dtype descr = PyArray_DESCR(self) + * cdef int offset + */ + __pyx_v_f = NULL; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":297 + * cdef int t + * cdef char* f = NULL + * cdef dtype descr = PyArray_DESCR(self) # <<<<<<<<<<<<<< + * cdef int offset + * + */ + __pyx_t_7 = PyArray_DESCR(__pyx_v_self); + __pyx_t_3 = ((PyObject *)__pyx_t_7); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":300 + * cdef int offset + * + * info.obj = self # <<<<<<<<<<<<<< + * + * if not PyDataType_HASFIELDS(descr): + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":302 + * info.obj = self + * + * if not PyDataType_HASFIELDS(descr): # <<<<<<<<<<<<<< + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + */ + __pyx_t_1 = ((!(PyDataType_HASFIELDS(__pyx_v_descr) != 0)) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":303 + * + * if not PyDataType_HASFIELDS(descr): + * t = descr.type_num # <<<<<<<<<<<<<< + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + */ + __pyx_t_4 = __pyx_v_descr->type_num; + __pyx_v_t = __pyx_t_4; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":304 + * if not PyDataType_HASFIELDS(descr): + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_2 = ((__pyx_v_descr->byteorder == '>') != 0); + if (!__pyx_t_2) { + goto __pyx_L15_next_or; + } else { + } + __pyx_t_2 = (__pyx_v_little_endian != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L14_bool_binop_done; + } + __pyx_L15_next_or:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":305 + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + */ + __pyx_t_2 = ((__pyx_v_descr->byteorder == '<') != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_2 = ((!(__pyx_v_little_endian != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L14_bool_binop_done:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":304 + * if not PyDataType_HASFIELDS(descr): + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + if (unlikely(__pyx_t_1)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":306 + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 306, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 306, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":304 + * if not PyDataType_HASFIELDS(descr): + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":307 + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + */ + switch (__pyx_v_t) { + case NPY_BYTE: + __pyx_v_f = ((char *)"b"); + break; + case NPY_UBYTE: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":308 + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + */ + __pyx_v_f = ((char *)"B"); + break; + case NPY_SHORT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":309 + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + */ + __pyx_v_f = ((char *)"h"); + break; + case NPY_USHORT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":310 + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + */ + __pyx_v_f = ((char *)"H"); + break; + case NPY_INT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":311 + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + */ + __pyx_v_f = ((char *)"i"); + break; + case NPY_UINT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":312 + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + */ + __pyx_v_f = ((char *)"I"); + break; + case NPY_LONG: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":313 + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + */ + __pyx_v_f = ((char *)"l"); + break; + case NPY_ULONG: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":314 + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + */ + __pyx_v_f = ((char *)"L"); + break; + case NPY_LONGLONG: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":315 + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + */ + __pyx_v_f = ((char *)"q"); + break; + case NPY_ULONGLONG: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":316 + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + */ + __pyx_v_f = ((char *)"Q"); + break; + case NPY_FLOAT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":317 + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + */ + __pyx_v_f = ((char *)"f"); + break; + case NPY_DOUBLE: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":318 + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + */ + __pyx_v_f = ((char *)"d"); + break; + case NPY_LONGDOUBLE: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":319 + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + */ + __pyx_v_f = ((char *)"g"); + break; + case NPY_CFLOAT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":320 + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + */ + __pyx_v_f = ((char *)"Zf"); + break; + case NPY_CDOUBLE: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":321 + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" + */ + __pyx_v_f = ((char *)"Zd"); + break; + case NPY_CLONGDOUBLE: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":322 + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f = "O" + * else: + */ + __pyx_v_f = ((char *)"Zg"); + break; + case NPY_OBJECT: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":323 + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + __pyx_v_f = ((char *)"O"); + break; + default: + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":325 + * elif t == NPY_OBJECT: f = "O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * info.format = f + * return + */ + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 325, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 325, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 325, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 325, __pyx_L1_error) + break; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":326 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f # <<<<<<<<<<<<<< + * return + * else: + */ + __pyx_v_info->format = __pyx_v_f; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":327 + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f + * return # <<<<<<<<<<<<<< + * else: + * info.format = PyObject_Malloc(_buffer_format_string_len) + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":302 + * info.obj = self + * + * if not PyDataType_HASFIELDS(descr): # <<<<<<<<<<<<<< + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":329 + * return + * else: + * info.format = PyObject_Malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 + */ + /*else*/ { + __pyx_v_info->format = ((char *)PyObject_Malloc(0xFF)); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":330 + * else: + * info.format = PyObject_Malloc(_buffer_format_string_len) + * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< + * offset = 0 + * f = _util_dtypestring(descr, info.format + 1, + */ + (__pyx_v_info->format[0]) = '^'; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":331 + * info.format = PyObject_Malloc(_buffer_format_string_len) + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 # <<<<<<<<<<<<<< + * f = _util_dtypestring(descr, info.format + 1, + * info.format + _buffer_format_string_len, + */ + __pyx_v_offset = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":332 + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 + * f = _util_dtypestring(descr, info.format + 1, # <<<<<<<<<<<<<< + * info.format + _buffer_format_string_len, + * &offset) + */ + __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 0xFF), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == ((char *)NULL))) __PYX_ERR(2, 332, __pyx_L1_error) + __pyx_v_f = __pyx_t_9; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":335 + * info.format + _buffer_format_string_len, + * &offset) + * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + */ + (__pyx_v_f[0]) = '\x00'; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":258 + * # experimental exception made for __getbuffer__ and __releasebuffer__ + * # -- the details of this may change. + * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< + * # This implementation of getbuffer is geared towards Cython + * # requirements, and does not yet fulfill the PEP. + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_descr); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":337 + * f[0] = c'\0' # Terminate format string + * + * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< + * if PyArray_HASFIELDS(self): + * PyObject_Free(info.format) + */ + +/* Python wrapper */ +static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ +static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); + __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__releasebuffer__", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":338 + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< + * PyObject_Free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":339 + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): + * PyObject_Free(info.format) # <<<<<<<<<<<<<< + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * PyObject_Free(info.strides) + */ + PyObject_Free(__pyx_v_info->format); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":338 + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< + * PyObject_Free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":340 + * if PyArray_HASFIELDS(self): + * PyObject_Free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * PyObject_Free(info.strides) + * # info.shape was stored after info.strides in the same block + */ + __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":341 + * PyObject_Free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * PyObject_Free(info.strides) # <<<<<<<<<<<<<< + * # info.shape was stored after info.strides in the same block + * + */ + PyObject_Free(__pyx_v_info->strides); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":340 + * if PyArray_HASFIELDS(self): + * PyObject_Free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * PyObject_Free(info.strides) + * # info.shape was stored after info.strides in the same block + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":337 + * f[0] = c'\0' # Terminate format string + * + * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< + * if PyArray_HASFIELDS(self): + * PyObject_Free(info.format) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":820 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":821 + * + * 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(2, 821, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":820 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":823 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":824 + * + * 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(2, 824, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":823 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":826 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":827 + * + * 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(2, 827, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":826 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":829 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":830 + * + * 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(2, 830, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":829 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":832 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":833 + * + * 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(2, 833, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":832 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":835 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":836 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":837 + * 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; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":836 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":839 + * return d.subarray.shape + * else: + * return () # <<<<<<<<<<<<<< + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_empty_tuple); + __pyx_r = __pyx_empty_tuple; + goto __pyx_L0; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":835 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":841 + * return () + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< + * # Recursive utility function used in __getbuffer__ to get format + * # string. The new location in the format string is returned. + */ + +static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { + PyArray_Descr *__pyx_v_child = 0; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + PyObject *__pyx_v_fields = 0; + PyObject *__pyx_v_childname = NULL; + PyObject *__pyx_v_new_offset = NULL; + PyObject *__pyx_v_t = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; + long __pyx_t_8; + char *__pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_util_dtypestring", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":846 + * + * cdef dtype child + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * cdef tuple fields + */ + __pyx_v_endian_detector = 1; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":847 + * cdef dtype child + * cdef int endian_detector = 1 + * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * cdef tuple fields + * + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":850 + * cdef tuple fields + * + * for childname in descr.names: # <<<<<<<<<<<<<< + * fields = descr.fields[childname] + * child, new_offset = fields + */ + if (unlikely(__pyx_v_descr->names == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(2, 850, __pyx_L1_error) + } + __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; + for (;;) { + if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(2, 850, __pyx_L1_error) + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); + __pyx_t_3 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":851 + * + * for childname in descr.names: + * fields = descr.fields[childname] # <<<<<<<<<<<<<< + * child, new_offset = fields + * + */ + if (unlikely(__pyx_v_descr->fields == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(2, 851, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 851, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(2, 851, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":852 + * for childname in descr.names: + * fields = descr.fields[childname] + * child, new_offset = fields # <<<<<<<<<<<<<< + * + * if (end - f) - (new_offset - offset[0]) < 15: + */ + if (likely(__pyx_v_fields != Py_None)) { + PyObject* sequence = __pyx_v_fields; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(2, 852, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 852, __pyx_L1_error) + } + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(2, 852, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); + __pyx_t_4 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":854 + * child, new_offset = fields + * + * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + */ + __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 854, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 854, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 854, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0); + if (unlikely(__pyx_t_6)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":855 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == c'>' and little_endian) or + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 855, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":854 + * child, new_offset = fields + * + * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":857 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); + if (!__pyx_t_7) { + goto __pyx_L8_next_or; + } else { + } + __pyx_t_7 = (__pyx_v_little_endian != 0); + if (!__pyx_t_7) { + } else { + __pyx_t_6 = __pyx_t_7; + goto __pyx_L7_bool_binop_done; + } + __pyx_L8_next_or:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":858 + * + * if ((child.byteorder == c'>' and little_endian) or + * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * # One could encode it in the format string and have Cython + */ + __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); + if (__pyx_t_7) { + } else { + __pyx_t_6 = __pyx_t_7; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_7 = ((!(__pyx_v_little_endian != 0)) != 0); + __pyx_t_6 = __pyx_t_7; + __pyx_L7_bool_binop_done:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":857 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + if (unlikely(__pyx_t_6)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":859 + * if ((child.byteorder == c'>' and little_endian) or + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * # One could encode it in the format string and have Cython + * # complain instead, BUT: < and > in format strings also imply + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(2, 859, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":857 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":869 + * + * # Output padding bytes + * while offset[0] < new_offset: # <<<<<<<<<<<<<< + * f[0] = 120 # "x"; pad byte + * f += 1 + */ + while (1) { + __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 869, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 869, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 869, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_6) break; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":870 + * # Output padding bytes + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< + * f += 1 + * offset[0] += 1 + */ + (__pyx_v_f[0]) = 0x78; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":871 + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte + * f += 1 # <<<<<<<<<<<<<< + * offset[0] += 1 + * + */ + __pyx_v_f = (__pyx_v_f + 1); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":872 + * f[0] = 120 # "x"; pad byte + * f += 1 + * offset[0] += 1 # <<<<<<<<<<<<<< + * + * offset[0] += child.itemsize + */ + __pyx_t_8 = 0; + (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + 1); + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":874 + * offset[0] += 1 + * + * offset[0] += child.itemsize # <<<<<<<<<<<<<< + * + * if not PyDataType_HASFIELDS(child): + */ + __pyx_t_8 = 0; + (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + __pyx_v_child->elsize); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":876 + * offset[0] += child.itemsize + * + * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< + * t = child.type_num + * if end - f < 5: + */ + __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); + if (__pyx_t_6) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":877 + * + * if not PyDataType_HASFIELDS(child): + * t = child.type_num # <<<<<<<<<<<<<< + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") + */ + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 877, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4); + __pyx_t_4 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":878 + * if not PyDataType_HASFIELDS(child): + * t = child.type_num + * if end - f < 5: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short.") + * + */ + __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); + if (unlikely(__pyx_t_6)) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":879 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 879, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(2, 879, __pyx_L1_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":878 + * if not PyDataType_HASFIELDS(child): + * t = child.type_num + * if end - f < 5: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short.") + * + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":882 + * + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_BYTE); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 882, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 882, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 882, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 98; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":883 + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UBYTE); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 883, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 883, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 883, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 66; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":884 + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_SHORT); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 884, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 884, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 884, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x68; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":885 + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_USHORT); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 885, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 885, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 885, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 72; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":886 + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_INT); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 886, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 886, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x69; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":887 + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UINT); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 887, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 887, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 887, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 73; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":888 + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONG); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 888, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 888, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 888, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x6C; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":889 + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONG); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 889, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 889, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 889, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 76; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":890 + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGLONG); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 890, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 890, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 890, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x71; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":891 + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONGLONG); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 891, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 891, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 891, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 81; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":892 + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_FLOAT); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 892, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 892, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 892, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x66; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":893 + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_DOUBLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 893, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 893, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 893, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x64; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":894 + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 894, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 894, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 894, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x67; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":895 + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CFLOAT); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 895, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 895, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 895, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 0x66; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":896 + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CDOUBLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 896, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 896, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 896, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 0x64; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":897 + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 897, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 897, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 897, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 0x67; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":898 + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_OBJECT); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 898, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 898, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(2, 898, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (likely(__pyx_t_6)) { + (__pyx_v_f[0]) = 79; + goto __pyx_L15; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":900 + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * f += 1 + * else: + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 900, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 900, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(2, 900, __pyx_L1_error) + } + __pyx_L15:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":901 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * f += 1 # <<<<<<<<<<<<<< + * else: + * # Cython ignores struct boundary information ("T{...}"), + */ + __pyx_v_f = (__pyx_v_f + 1); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":876 + * offset[0] += child.itemsize + * + * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< + * t = child.type_num + * if end - f < 5: + */ + goto __pyx_L13; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":905 + * # Cython ignores struct boundary information ("T{...}"), + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< + * return f + * + */ + /*else*/ { + __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_9 == ((char *)NULL))) __PYX_ERR(2, 905, __pyx_L1_error) + __pyx_v_f = __pyx_t_9; + } + __pyx_L13:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":850 + * cdef tuple fields + * + * for childname in descr.names: # <<<<<<<<<<<<<< + * fields = descr.fields[childname] + * child, new_offset = fields + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":906 + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) + * return f # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_f; + goto __pyx_L0; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":841 + * return () + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< + * # Recursive utility function used in __getbuffer__ to get format + * # string. The new location in the format string is returned. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_child); + __Pyx_XDECREF(__pyx_v_fields); + __Pyx_XDECREF(__pyx_v_childname); + __Pyx_XDECREF(__pyx_v_new_offset); + __Pyx_XDECREF(__pyx_v_t); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1021 + * 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) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_array_base", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1022 + * + * 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); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1023 + * 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)); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1021 + * 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 */ + __Pyx_RefNannyFinishContext(); +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1025 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1026 + * + * 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); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1027 + * 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) != 0); + if (__pyx_t_1) { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1028 + * 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; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1027 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1029 + * 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; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1025 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1033 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * _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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1034 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * _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:*/ { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1035 + * cdef inline int import_array() except -1: + * try: + * _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(2, 1035, __pyx_L3_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1034 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * _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:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1036 + * try: + * _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(2, 1036, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1037 + * _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__9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1037, __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(2, 1037, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1034 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * _import_array() + * except Exception: + */ + __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:; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1033 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * _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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1039 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1040 + * + * 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:*/ { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1041 + * 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(2, 1041, __pyx_L3_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1040 + * + * 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:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1042 + * 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(2, 1042, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1043 + * _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__10, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1043, __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(2, 1043, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1040 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __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:; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1039 + * 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; +} + +/* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1045 + * 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", 0); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1046 + * + * 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:*/ { + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1047 + * 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(2, 1047, __pyx_L3_error) + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1046 + * + * 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:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1048 + * 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(2, 1048, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1049 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1049, __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(2, 1049, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1046 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __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:; + } + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1045 + * 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; +} +static struct __pyx_vtabstruct_9unionfind_UnionFind __pyx_vtable_9unionfind_UnionFind; + +static PyObject *__pyx_tp_new_9unionfind_UnionFind(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_obj_9unionfind_UnionFind *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_obj_9unionfind_UnionFind *)o); + p->__pyx_vtab = __pyx_vtabptr_9unionfind_UnionFind; + if (unlikely(__pyx_pw_9unionfind_9UnionFind_1__cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_9unionfind_UnionFind(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_pw_9unionfind_9UnionFind_3__dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + (*Py_TYPE(o)->tp_free)(o); +} + +static PyObject *__pyx_getprop_9unionfind_9UnionFind_sets(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_9unionfind_9UnionFind_4sets_1__get__(o); +} + +static PyObject *__pyx_getprop_9unionfind_9UnionFind_parent(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_9unionfind_9UnionFind_6parent_1__get__(o); +} + +static PyObject *__pyx_getprop_9unionfind_9UnionFind_tree(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_9unionfind_9UnionFind_4tree_1__get__(o); +} + +static PyMethodDef __pyx_methods_9unionfind_UnionFind[] = { + {"find", (PyCFunction)__pyx_pw_9unionfind_9UnionFind_5find, METH_O, 0}, + {"union", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9unionfind_9UnionFind_7union, METH_VARARGS|METH_KEYWORDS, 0}, + {"merge", (PyCFunction)__pyx_pw_9unionfind_9UnionFind_9merge, METH_O, __pyx_doc_9unionfind_9UnionFind_8merge}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_9unionfind_9UnionFind_11__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_9unionfind_9UnionFind_13__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_9unionfind_UnionFind[] = { + {(char *)"sets", __pyx_getprop_9unionfind_9UnionFind_sets, 0, (char *)0, 0}, + {(char *)"parent", __pyx_getprop_9unionfind_9UnionFind_parent, 0, (char *)0, 0}, + {(char *)"tree", __pyx_getprop_9unionfind_9UnionFind_tree, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_9unionfind_UnionFind = { + PyVarObject_HEAD_INIT(0, 0) + "unionfind.UnionFind", /*tp_name*/ + sizeof(struct __pyx_obj_9unionfind_UnionFind), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_9unionfind_UnionFind, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_9unionfind_UnionFind, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_9unionfind_UnionFind, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_9unionfind_UnionFind, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {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_unionfind(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_unionfind}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "unionfind", + __pyx_k_Union_find_data_structure_Adapt, /* 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 +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0}, + {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0}, + {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0}, + {&__pyx_kp_u_Out_of_bounds_index, __pyx_k_Out_of_bounds_index, sizeof(__pyx_k_Out_of_bounds_index), 0, 1, 0, 0}, + {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, + {&__pyx_n_s_UnionFind, __pyx_k_UnionFind, sizeof(__pyx_k_UnionFind), 0, 0, 1, 1}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 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_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0}, + {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0}, + {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0}, + {&__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_u_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 1, 0, 0}, + {&__pyx_kp_u_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 1, 0, 0}, + {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_union, __pyx_k_union, sizeof(__pyx_k_union), 0, 0, 1, 1}, + {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 29, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 58, __pyx_L1_error) + __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 2, __pyx_L1_error) + __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(2, 855, __pyx_L1_error) + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(2, 1037, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "unionfind.pyx":58 + * def find(self, int i): + * if (i < 0) or (i > self.n): + * raise ValueError("Out of bounds index.") # <<<<<<<<<<<<<< + * return self._find(i) + * + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_Out_of_bounds_index); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":272 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(2, 272, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":276 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(2, 276, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":306 + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(2, 306, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":855 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == c'>' and little_endian) or + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(2, 855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":879 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(2, 879, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1037 + * _import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(2, 1037, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1043 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(2, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + return 0; + __pyx_L1_error:; + return -1; +} + +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 + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __pyx_vtabptr_9unionfind_UnionFind = &__pyx_vtable_9unionfind_UnionFind; + __pyx_vtable_9unionfind_UnionFind._find = (int (*)(struct __pyx_obj_9unionfind_UnionFind *, int))__pyx_f_9unionfind_9UnionFind__find; + __pyx_vtable_9unionfind_UnionFind.__pyx_union = (int (*)(struct __pyx_obj_9unionfind_UnionFind *, int, int, int __pyx_skip_dispatch))__pyx_f_9unionfind_9UnionFind_union; + __pyx_vtable_9unionfind_UnionFind._build = (void (*)(struct __pyx_obj_9unionfind_UnionFind *, int, int))__pyx_f_9unionfind_9UnionFind__build; + if (PyType_Ready(&__pyx_type_9unionfind_UnionFind) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_9unionfind_UnionFind.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_9unionfind_UnionFind.tp_dictoffset && __pyx_type_9unionfind_UnionFind.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_9unionfind_UnionFind.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type_9unionfind_UnionFind.tp_dict, __pyx_vtabptr_9unionfind_UnionFind) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_UnionFind, (PyObject *)&__pyx_type_9unionfind_UnionFind) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_9unionfind_UnionFind) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __pyx_ptype_9unionfind_UnionFind = &__pyx_type_9unionfind_UnionFind; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +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(3, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 + sizeof(PyTypeObject), + #else + sizeof(PyHeapTypeObject), + #endif + __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 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(2, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_5numpy_dtype = __Pyx_ImportType(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __Pyx_ImportType_CheckSize_Ignore); + if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(2, 206, __pyx_L1_error) + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(2, 229, __pyx_L1_error) + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(2, 233, __pyx_L1_error) + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __Pyx_ImportType_CheckSize_Ignore); + if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(2, 242, __pyx_L1_error) + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(2, 917, __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; +} + + +#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 initunionfind(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initunionfind(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_unionfind(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_unionfind(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; +} +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) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + 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, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + 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; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + 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_unionfind(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = 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 'unionfind' 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 + #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_unionfind(void)", 0); + if (__Pyx_check_binary_version() < 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() < 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) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 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) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 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) + #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? */ + 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("unionfind", __pyx_methods, __pyx_k_Union_find_data_structure_Adapt, 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_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_unionfind) { + 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, "unionfind")) { + if (unlikely(PyDict_SetItemString(modules, "unionfind", __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(); + if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + 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 + + /* "unionfind.pyx":6 + * from libc.stdlib cimport malloc, free + * + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "unionfind.pyx":10 + * + * ctypedef np.int_t DTYPE_t + * cdef bint boolean_variable = True # <<<<<<<<<<<<<< + * + * cdef class UnionFind: + */ + __pyx_v_9unionfind_boolean_variable = 1; + + /* "unionfind.pyx":1 + * """ Union find data structure. Adapted from https://github.com/eldridgejm/unionfind """ # <<<<<<<<<<<<<< + * + * cimport cython + */ + __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; + + /* "../../../miniconda3/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1045 + * raise ImportError("numpy.core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init unionfind", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init unionfind"); + } + __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 +} + +/* --- 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 + +/* 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 + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + 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; +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + 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 +} + +/* 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_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 + (__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; + 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; + } + } + 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; +} + +/* 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"; + } + if (exact) { + more_or_less = "exactly"; + } + 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); +} + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + 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 + +/* 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); +} +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; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + 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 CYTHON_COMPILING_IN_PYPY + 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); +#else + 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); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* 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 + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#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; +#endif +#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 +} + +/* 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; +} + +/* 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 "unparseable 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, CYTHON_UNUSED int 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, CYTHON_UNUSED int 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 PyObject * +__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 NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + 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 NULL; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) + return PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + if (*ts != ',' && *ts != ')') + return PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + if (*ts == ',') ts++; + i++; + } + if (i != ndim) + return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return NULL; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return Py_None; +} +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)) 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; +} + +/* PyObjectCallMethO */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ + #if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* DictGetItem */ + #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* RaiseTooManyValuesToUnpack */ + static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ + static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseNoneIterError */ + static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* ExtTypeTest */ + static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +/* GetTopmostException */ + #if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_type == NULL || exc_info->exc_type == 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 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + #endif + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + 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 + +/* 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; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#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, *local_value, *local_tb; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + 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; +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if 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; + 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; + } + #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; +} + +/* PyObject_GenericGetAttrNoDict */ + #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PyObject_GenericGetAttr */ + #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { + if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { + return PyObject_GenericGetAttr(obj, attr_name); + } + return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +} +#endif + +/* SetVTable */ + static int __Pyx_SetVtable(PyObject *dict, void *vtable) { +#if PY_VERSION_HEX >= 0x02070000 + PyObject *ob = PyCapsule_New(vtable, 0, 0); +#else + PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); +#endif + if (!ob) + goto bad; + if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; +} + +/* PyObjectGetAttrStrNoError */ + static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#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; +} + +/* SetupReduce */ + static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name); + if (likely(name_attr)) { + ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); + } else { + ret = -1; + } + if (unlikely(ret < 0)) { + PyErr_Clear(); + ret = 0; + } + Py_XDECREF(name_attr); + return ret; +} +static int __Pyx_setup_reduce(PyObject* type_obj) { + int ret = 0; + PyObject *object_reduce = NULL; + PyObject *object_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#endif +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#else + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#endif + reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; + if (reduce_ex == object_reduce_ex) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#endif + reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; + if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { + reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); + if (likely(reduce_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (reduce == object_reduce || PyErr_Occurred()) { + goto __PYX_BAD; + } + setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); + if (!setstate) PyErr_Clear(); + if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { + setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); + if (likely(setstate_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (!setstate || PyErr_Occurred()) { + goto __PYX_BAD; + } + } + PyType_Modified((PyTypeObject*)type_obj); + } + } + goto __PYX_GOOD; +__PYX_BAD: + if (!PyErr_Occurred()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* TypeImport */ + #ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, + size_t size, enum __Pyx_ImportType_CheckSize check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; +#ifdef Py_LIMITED_API + PyObject *py_basicsize; +#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; + } +#ifndef Py_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; +#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; +#endif + if ((size_t)basicsize < 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); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != 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); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn && (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 *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 ((1) && (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 + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* CLineInTraceback */ + #ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + 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_GetAttrStr(__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; + 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 */ + 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); +} + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +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; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 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); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + 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; + 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) { + 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); +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); + if (__Pyx_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags); + PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_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)) {} + else if (__Pyx_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); + view->obj = NULL; + Py_DECREF(obj); +} +#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;\ + } + +/* 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); + } +} + +/* 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 + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_Py_intptr_t(Py_intptr_t value) { + const Py_intptr_t neg_one = (Py_intptr_t) ((Py_intptr_t) 0 - (Py_intptr_t) 1), const_zero = (Py_intptr_t) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(Py_intptr_t) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(Py_intptr_t) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(Py_intptr_t) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(Py_intptr_t) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(Py_intptr_t) <= 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(Py_intptr_t), + little, !is_unsigned); + } +} + +/* Declarations */ + #if CYTHON_CCOMPLEX + #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 +#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) { + 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 + #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 +#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) { + 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 + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value) { + const enum NPY_TYPES neg_one = (enum NPY_TYPES) ((enum NPY_TYPES) 0 - (enum NPY_TYPES) 1), const_zero = (enum NPY_TYPES) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(enum NPY_TYPES) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(enum NPY_TYPES) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(enum NPY_TYPES) <= 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(enum NPY_TYPES), + little, !is_unsigned); + } +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + 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 + 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])); + } + } + 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 + 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 + 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]))); + } + } + 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 + } + } + { +#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 (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + 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); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + 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; +} + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + 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 + 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])); + } + } + 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 + 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 + 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]))); + } + } + 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 + } + } + { +#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 (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + 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); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + 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; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + 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); +} +#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) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#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; ip) { + #if PY_MAJOR_VERSION < 3 + 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); + } + #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; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +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) || (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) { +#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)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_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 + 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; + } else { + 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 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); +} + + +#endif /* Py_PYTHON_H */ diff --git a/unionfind/unionfind.cpython-37m-darwin.so b/unionfind/unionfind.cpython-37m-darwin.so new file mode 100755 index 0000000000000000000000000000000000000000..803f99a42a7e4e1007e61890c3ee508706f63825 GIT binary patch literal 57940 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 + + + + + Cython: unionfind.pyx + + + +

Generated by Cython 0.29.21

+

+ Yellow lines hint at Python interaction.
+ Click on a line that starts with a "+" to see the C code that Cython generated for it. +

+

Raw output: unionfind.c

+
+001: """ Union find data structure. Adapted from https://github.com/eldridgejm/unionfind """
+
  __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;
+
 002: 
+
 003: cimport cython
+
 004: from libc.stdlib cimport malloc, free
+
 005: 
+
+006: import numpy as np
+
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
 007: cimport numpy as np
+
 008: 
+
 009: ctypedef np.int_t DTYPE_t
+
+010: cdef bint boolean_variable = True
+
  __pyx_v_9unionfind_boolean_variable = 1;
+
 011: 
+
+012: cdef class UnionFind:
+
struct __pyx_obj_9unionfind_UnionFind {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_9unionfind_UnionFind *__pyx_vtab;
+  int n;
+  int *parent;
+  int *rank;
+  int _next_id;
+  int *_tree;
+  int *_id;
+};
+
+
+
+struct __pyx_vtabstruct_9unionfind_UnionFind {
+  int (*_find)(struct __pyx_obj_9unionfind_UnionFind *, int);
+  int (*__pyx_union)(struct __pyx_obj_9unionfind_UnionFind *, int, int, int __pyx_skip_dispatch);
+  void (*_build)(struct __pyx_obj_9unionfind_UnionFind *, int, int);
+};
+static struct __pyx_vtabstruct_9unionfind_UnionFind *__pyx_vtabptr_9unionfind_UnionFind;
+
 013:     cdef int n
+
 014:     cdef int *parent
+
 015:     cdef int *rank
+
 016:     # cdef int _n_sets
+
 017: 
+
 018:     # Variables that track the binary tree of merges
+
 019:     cdef int _next_id
+
 020:     cdef int *_tree  # parent links
+
 021:     cdef int *_id  # the map from UF trees to merge tree identifiers
+
 022: 
+
+023:     def __cinit__(self, int n):
+
/* Python wrapper */
+static int __pyx_pw_9unionfind_9UnionFind_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_9unionfind_9UnionFind_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_n;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 23, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_n = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 23, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 23, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("unionfind.UnionFind.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_9unionfind_9UnionFind___cinit__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self), __pyx_v_n);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_9unionfind_9UnionFind___cinit__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_n) {
+  int __pyx_v_i;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__cinit__", 0);
+/* … */
+  /* function exit code */
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+024:         self.n = n
+
  __pyx_v_self->n = __pyx_v_n;
+
+025:         self.parent = <int *> malloc(n * sizeof(int))
+
  __pyx_v_self->parent = ((int *)malloc((__pyx_v_n * (sizeof(int)))));
+
+026:         self.rank = <int *> malloc(n * sizeof(int))
+
  __pyx_v_self->rank = ((int *)malloc((__pyx_v_n * (sizeof(int)))));
+
 027: 
+
 028:         cdef int i
+
+029:         for i in range(n):
+
  __pyx_t_1 = __pyx_v_n;
+  __pyx_t_2 = __pyx_t_1;
+  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+    __pyx_v_i = __pyx_t_3;
+
+030:             self.parent[i] = i
+
    (__pyx_v_self->parent[__pyx_v_i]) = __pyx_v_i;
+  }
+
 031: 
+
 032:         # self._n_sets = n
+
 033: 
+
+034:         self._next_id = n
+
  __pyx_v_self->_next_id = __pyx_v_n;
+
+035:         self._tree = <int *> malloc((2 * n - 1) * sizeof(int))
+
  __pyx_v_self->_tree = ((int *)malloc((((2 * __pyx_v_n) - 1) * (sizeof(int)))));
+
+036:         for i in range(2 * n - 1):
+
  __pyx_t_4 = ((2 * __pyx_v_n) - 1);
+  __pyx_t_5 = __pyx_t_4;
+  for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_5; __pyx_t_1+=1) {
+    __pyx_v_i = __pyx_t_1;
+
+037:             self._tree[i] = -1
+
    (__pyx_v_self->_tree[__pyx_v_i]) = -1;
+  }
+
+038:         self._id = <int *> malloc(n * sizeof(int))
+
  __pyx_v_self->_id = ((int *)malloc((__pyx_v_n * (sizeof(int)))));
+
+039:         for i in range(n):
+
  __pyx_t_1 = __pyx_v_n;
+  __pyx_t_2 = __pyx_t_1;
+  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+    __pyx_v_i = __pyx_t_3;
+
+040:             self._id[i] = i
+
    (__pyx_v_self->_id[__pyx_v_i]) = __pyx_v_i;
+  }
+
 041: 
+
+042:     def __dealloc__(self):
+
/* Python wrapper */
+static void __pyx_pw_9unionfind_9UnionFind_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pw_9unionfind_9UnionFind_3__dealloc__(PyObject *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+  __pyx_pf_9unionfind_9UnionFind_2__dealloc__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_pf_9unionfind_9UnionFind_2__dealloc__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__dealloc__", 0);
+/* … */
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
+043:         free(self.parent)
+
  free(__pyx_v_self->parent);
+
+044:         free(self.rank)
+
  free(__pyx_v_self->rank);
+
 045: 
+
 046:     @cython.boundscheck(False)  # turn off bounds-checking for entire function
+
 047:     @cython.wraparound(False)  # turn off negative index wrapping for entire function
+
 048:     @cython.nonecheck(False)
+
+049:     cdef int _find(self, int i):
+
static int __pyx_f_9unionfind_9UnionFind__find(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_find", 0);
+/* … */
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+050:         if self.parent[i] == i:
+
  __pyx_t_1 = (((__pyx_v_self->parent[__pyx_v_i]) == __pyx_v_i) != 0);
+  if (__pyx_t_1) {
+/* … */
+  }
+
+051:             return i
+
    __pyx_r = __pyx_v_i;
+    goto __pyx_L0;
+
 052:         else:
+
+053:             self.parent[i] = self._find(self.parent[i])
+
  /*else*/ {
+    (__pyx_v_self->parent[__pyx_v_i]) = ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_find(__pyx_v_self, (__pyx_v_self->parent[__pyx_v_i]));
+
+054:             return self.parent[i]
+
    __pyx_r = (__pyx_v_self->parent[__pyx_v_i]);
+    goto __pyx_L0;
+  }
+
 055: 
+
+056:     def find(self, int i):
+
/* Python wrapper */
+static PyObject *__pyx_pw_9unionfind_9UnionFind_5find(PyObject *__pyx_v_self, PyObject *__pyx_arg_i); /*proto*/
+static PyObject *__pyx_pw_9unionfind_9UnionFind_5find(PyObject *__pyx_v_self, PyObject *__pyx_arg_i) {
+  int __pyx_v_i;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("find (wrapper)", 0);
+  assert(__pyx_arg_i); {
+    __pyx_v_i = __Pyx_PyInt_As_int(__pyx_arg_i); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("unionfind.UnionFind.find", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_9unionfind_9UnionFind_4find(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self), ((int)__pyx_v_i));
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9unionfind_9UnionFind_4find(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("find", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("unionfind.UnionFind.find", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+057:         if (i < 0) or (i > self.n):
+
  __pyx_t_2 = ((__pyx_v_i < 0) != 0);
+  if (!__pyx_t_2) {
+  } else {
+    __pyx_t_1 = __pyx_t_2;
+    goto __pyx_L4_bool_binop_done;
+  }
+  __pyx_t_2 = ((__pyx_v_i > __pyx_v_self->n) != 0);
+  __pyx_t_1 = __pyx_t_2;
+  __pyx_L4_bool_binop_done:;
+  if (unlikely(__pyx_t_1)) {
+/* … */
+  }
+
+058:             raise ValueError("Out of bounds index.")
+
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __PYX_ERR(0, 58, __pyx_L1_error)
+/* … */
+  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_Out_of_bounds_index); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 58, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple_);
+  __Pyx_GIVEREF(__pyx_tuple_);
+
+059:         return self._find(i)
+
  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __Pyx_PyInt_From_int(((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_find(__pyx_v_self, __pyx_v_i)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
 060: 
+
 061:     @cython.boundscheck(False)  # turn off bounds-checking for entire function
+
 062:     @cython.wraparound(False)  # turn off negative index wrapping for entire function
+
 063:     @cython.nonecheck(False)
+
 064:     # def union(self, int i, int j):
+
+065:     cpdef bint union(self, int i, int j):
+
static PyObject *__pyx_pw_9unionfind_9UnionFind_7union(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_f_9unionfind_9UnionFind_union(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i, int __pyx_v_j, int __pyx_skip_dispatch) {
+  int __pyx_v_root_i;
+  int __pyx_v_root_j;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("union", 0);
+  /* Check if called by wrapper */
+  if (unlikely(__pyx_skip_dispatch)) ;
+  /* Check if overridden in Python */
+  else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {
+    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
+    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
+    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
+      PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
+      #endif
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_9unionfind_9UnionFind_7union)) {
+        __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_j); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 65, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_INCREF(__pyx_t_1);
+        __pyx_t_5 = __pyx_t_1; __pyx_t_6 = NULL;
+        __pyx_t_7 = 0;
+        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
+          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
+          if (likely(__pyx_t_6)) {
+            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+            __Pyx_INCREF(__pyx_t_6);
+            __Pyx_INCREF(function);
+            __Pyx_DECREF_SET(__pyx_t_5, function);
+            __pyx_t_7 = 1;
+          }
+        }
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_5)) {
+          PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};
+          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __Pyx_GOTREF(__pyx_t_2);
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+          PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};
+          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+          __Pyx_GOTREF(__pyx_t_2);
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        } else
+        #endif
+        {
+          __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 65, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_8);
+          if (__pyx_t_6) {
+            __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
+          }
+          __Pyx_GIVEREF(__pyx_t_3);
+          PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_3);
+          __Pyx_GIVEREF(__pyx_t_4);
+          PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_4);
+          __pyx_t_3 = 0;
+          __pyx_t_4 = 0;
+          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_2);
+          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+        }
+        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L1_error)
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __pyx_r = __pyx_t_9;
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+        goto __pyx_L0;
+      }
+      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
+      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
+      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
+      if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) {
+        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
+      }
+      #endif
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
+    }
+    #endif
+  }
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_WriteUnraisable("unionfind.UnionFind.union", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9unionfind_9UnionFind_7union(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9unionfind_9UnionFind_7union(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  int __pyx_v_j;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("union (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_j,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__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);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_j)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("union", 1, 2, 2, 1); __PYX_ERR(0, 65, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "union") < 0)) __PYX_ERR(0, 65, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error)
+    __pyx_v_j = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_j == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("union", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 65, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("unionfind.UnionFind.union", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_9unionfind_9UnionFind_6union(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self), __pyx_v_i, __pyx_v_j);
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9unionfind_9UnionFind_6union(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i, int __pyx_v_j) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("union", 0);
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_f_9unionfind_9UnionFind_union(__pyx_v_self, __pyx_v_i, __pyx_v_j, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __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);
+  __Pyx_AddTraceback("unionfind.UnionFind.union", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
 066:         # TODO probably best to split into internal cdef and external def with bounds checking
+
 067:         # if (i < 0) or (i > self.n) or (j < 0) or (j > self.n):
+
 068:         #     raise ValueError("Out of bounds index.")
+
 069: 
+
 070:         cdef int root_i, root_j
+
+071:         root_i = self._find(i)
+
  __pyx_v_root_i = ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_find(__pyx_v_self, __pyx_v_i);
+
+072:         root_j = self._find(j)
+
  __pyx_v_root_j = ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_find(__pyx_v_self, __pyx_v_j);
+
+073:         if root_i == root_j:
+
  __pyx_t_9 = ((__pyx_v_root_i == __pyx_v_root_j) != 0);
+  if (__pyx_t_9) {
+/* … */
+  }
+
+074:             return False
+
    __pyx_r = 0;
+    goto __pyx_L0;
+
 075:         else:
+
 076:             # self._n_sets -= 1
+
+077:             if self.rank[root_i] < self.rank[root_j]:
+
  /*else*/ {
+    __pyx_t_9 = (((__pyx_v_self->rank[__pyx_v_root_i]) < (__pyx_v_self->rank[__pyx_v_root_j])) != 0);
+    if (__pyx_t_9) {
+/* … */
+      goto __pyx_L4;
+    }
+
+078:                 self.parent[root_i] = root_j
+
      (__pyx_v_self->parent[__pyx_v_root_i]) = __pyx_v_root_j;
+
+079:                 self._build(root_j, root_i)
+
      ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_build(__pyx_v_self, __pyx_v_root_j, __pyx_v_root_i);
+
+080:             elif self.rank[root_i] > self.rank[root_j]:
+
    __pyx_t_9 = (((__pyx_v_self->rank[__pyx_v_root_i]) > (__pyx_v_self->rank[__pyx_v_root_j])) != 0);
+    if (__pyx_t_9) {
+/* … */
+      goto __pyx_L4;
+    }
+
+081:                 self.parent[root_j] = root_i
+
      (__pyx_v_self->parent[__pyx_v_root_j]) = __pyx_v_root_i;
+
+082:                 self._build(root_i, root_j)
+
      ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_build(__pyx_v_self, __pyx_v_root_i, __pyx_v_root_j);
+
 083:             else:
+
+084:                 self.parent[root_j] = root_i
+
    /*else*/ {
+      (__pyx_v_self->parent[__pyx_v_root_j]) = __pyx_v_root_i;
+
+085:                 self.rank[root_i] += 1
+
      __pyx_t_7 = __pyx_v_root_i;
+      (__pyx_v_self->rank[__pyx_t_7]) = ((__pyx_v_self->rank[__pyx_t_7]) + 1);
+
+086:                 self._build(root_i, root_j)
+
      ((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->_build(__pyx_v_self, __pyx_v_root_i, __pyx_v_root_j);
+    }
+    __pyx_L4:;
+
+087:             return True
+
    __pyx_r = 1;
+    goto __pyx_L0;
+  }
+
 088: 
+
 089:     @cython.boundscheck(False)  # turn off bounds-checking for entire function
+
 090:     @cython.wraparound(False)  # turn off negative index wrapping for entire function
+
 091:     @cython.nonecheck(False)
+
+092:     def merge(self, np.ndarray[DTYPE_t, ndim=2] ij):
+
/* Python wrapper */
+static PyObject *__pyx_pw_9unionfind_9UnionFind_9merge(PyObject *__pyx_v_self, PyObject *__pyx_v_ij); /*proto*/
+static char __pyx_doc_9unionfind_9UnionFind_8merge[] = " Merge a sequence of pairs ";
+static PyObject *__pyx_pw_9unionfind_9UnionFind_9merge(PyObject *__pyx_v_self, PyObject *__pyx_v_ij) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("merge (wrapper)", 0);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ij), __pyx_ptype_5numpy_ndarray, 1, "ij", 0))) __PYX_ERR(0, 92, __pyx_L1_error)
+  __pyx_r = __pyx_pf_9unionfind_9UnionFind_8merge(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self), ((PyArrayObject *)__pyx_v_ij));
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9unionfind_9UnionFind_8merge(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, PyArrayObject *__pyx_v_ij) {
+  int __pyx_v_k;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_ij;
+  __Pyx_Buffer __pyx_pybuffer_ij;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("merge", 0);
+  __pyx_pybuffer_ij.pybuffer.buf = NULL;
+  __pyx_pybuffer_ij.refcount = 0;
+  __pyx_pybuffernd_ij.data = NULL;
+  __pyx_pybuffernd_ij.rcbuffer = &__pyx_pybuffer_ij;
+  {
+    __Pyx_BufFmt_StackElem __pyx_stack[1];
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ij.rcbuffer->pybuffer, (PyObject*)__pyx_v_ij, &__Pyx_TypeInfo_nn___pyx_t_9unionfind_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 92, __pyx_L1_error)
+  }
+  __pyx_pybuffernd_ij.diminfo[0].strides = __pyx_pybuffernd_ij.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ij.diminfo[0].shape = __pyx_pybuffernd_ij.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ij.diminfo[1].strides = __pyx_pybuffernd_ij.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ij.diminfo[1].shape = __pyx_pybuffernd_ij.rcbuffer->pybuffer.shape[1];
+/* … */
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  { 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_ij.rcbuffer->pybuffer);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
+  __Pyx_AddTraceback("unionfind.UnionFind.merge", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  goto __pyx_L2;
+  __pyx_L0:;
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ij.rcbuffer->pybuffer);
+  __pyx_L2:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
 093:         """ Merge a sequence of pairs """
+
 094:         cdef int k
+
+095:         for k in range(ij.shape[0]):
+
  __pyx_t_1 = (__pyx_v_ij->dimensions[0]);
+  __pyx_t_2 = __pyx_t_1;
+  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+    __pyx_v_k = __pyx_t_3;
+
+096:             self.union(ij[k, 0], ij[k, 1])
+
    __pyx_t_4 = __pyx_v_k;
+    __pyx_t_5 = 0;
+    __pyx_t_6 = __pyx_v_k;
+    __pyx_t_7 = 1;
+    (void)(((struct __pyx_vtabstruct_9unionfind_UnionFind *)__pyx_v_self->__pyx_vtab)->__pyx_union(__pyx_v_self, (*__Pyx_BufPtrStrided2d(__pyx_t_9unionfind_DTYPE_t *, __pyx_pybuffernd_ij.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_ij.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_ij.diminfo[1].strides)), (*__Pyx_BufPtrStrided2d(__pyx_t_9unionfind_DTYPE_t *, __pyx_pybuffernd_ij.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_ij.diminfo[0].strides, __pyx_t_7, __pyx_pybuffernd_ij.diminfo[1].strides)), 0));
+  }
+
 097: 
+
 098:     @cython.boundscheck(False)
+
 099:     @cython.wraparound(False)
+
 100:     @cython.nonecheck(False)
+
+101:     cdef void _build(self, int i, int j):
+
static void __pyx_f_9unionfind_9UnionFind__build(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self, int __pyx_v_i, int __pyx_v_j) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_build", 0);
+/* … */
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+}
+
 102:         """ Track the tree changes when node j gets merged into node i """
+
+103:         self._tree[self._id[i]] = self._next_id
+
  __pyx_t_1 = __pyx_v_self->_next_id;
+  (__pyx_v_self->_tree[(__pyx_v_self->_id[__pyx_v_i])]) = __pyx_t_1;
+
+104:         self._tree[self._id[j]] = self._next_id
+
  __pyx_t_1 = __pyx_v_self->_next_id;
+  (__pyx_v_self->_tree[(__pyx_v_self->_id[__pyx_v_j])]) = __pyx_t_1;
+
+105:         self._id[i] = self._next_id
+
  __pyx_t_1 = __pyx_v_self->_next_id;
+  (__pyx_v_self->_id[__pyx_v_i]) = __pyx_t_1;
+
+106:         self._next_id += 1
+
  __pyx_v_self->_next_id = (__pyx_v_self->_next_id + 1);
+
 107: 
+
 108:     # property n_sets:
+
 109:     #     def __get__(self):
+
 110:     #         return self._n_sets
+
 111:     @property
+
+112:     def sets(self):
+
/* Python wrapper */
+static PyObject *__pyx_pw_9unionfind_9UnionFind_4sets_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9unionfind_9UnionFind_4sets_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9unionfind_9UnionFind_4sets___get__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9unionfind_9UnionFind_4sets___get__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("unionfind.UnionFind.sets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+113:         return 2 * self.n - self._next_id
+
  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_From_long(((2 * __pyx_v_self->n) - __pyx_v_self->_next_id)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
 114: 
+
 115:     @property
+
+116:     def parent(self):
+
/* Python wrapper */
+static PyObject *__pyx_pw_9unionfind_9UnionFind_6parent_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9unionfind_9UnionFind_6parent_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9unionfind_9UnionFind_6parent___get__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9unionfind_9UnionFind_6parent___get__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self) {
+  int __pyx_7genexpr__pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("unionfind.UnionFind.parent.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+117:         return [self.parent[i] for i in range(self.n)]
+
  __Pyx_XDECREF(__pyx_r);
+  { /* enter inner scope */
+    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 117, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __pyx_v_self->n;
+    __pyx_t_3 = __pyx_t_2;
+    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+      __pyx_7genexpr__pyx_v_i = __pyx_t_4;
+      __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_self->parent[__pyx_7genexpr__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 117, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 117, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
+  } /* exit inner scope */
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
 118: 
+
 119:     @property
+
+120:     def tree(self):
+
/* Python wrapper */
+static PyObject *__pyx_pw_9unionfind_9UnionFind_4tree_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_9unionfind_9UnionFind_4tree_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_9unionfind_9UnionFind_4tree___get__(((struct __pyx_obj_9unionfind_UnionFind *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9unionfind_9UnionFind_4tree___get__(struct __pyx_obj_9unionfind_UnionFind *__pyx_v_self) {
+  long __pyx_8genexpr1__pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__", 0);
+/* … */
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("unionfind.UnionFind.tree.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+121:         return [self._tree[i] for i in range(2 * self.n - 1)]
+
  __Pyx_XDECREF(__pyx_r);
+  { /* enter inner scope */
+    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 121, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = ((2 * __pyx_v_self->n) - 1);
+    __pyx_t_3 = __pyx_t_2;
+    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+      __pyx_8genexpr1__pyx_v_i = __pyx_t_4;
+      __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_self->_tree[__pyx_8genexpr1__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 121, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 121, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
+  } /* exit inner scope */
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
diff --git a/utils/training.py b/utils/training.py index 4b9f68a..6c153f6 100644 --- a/utils/training.py +++ b/utils/training.py @@ -31,8 +31,8 @@ def func(x): # Otherwise, default has non-None type; convert x to that type else: return type(default)(x) - return func + return func for param in config_dict: default = config_dict[param] @@ -63,4 +63,3 @@ def get_savedir(args): dir_hash = hash_dict(args.__dict__) save_dir = os.path.join(os.environ["SAVEPATH"], args.dataset, dir_hash) return save_dir - diff --git a/utils/visualization.py b/utils/visualization.py new file mode 100644 index 0000000..8a5a78d --- /dev/null +++ b/utils/visualization.py @@ -0,0 +1,111 @@ +"""Visualization utils.""" +import matplotlib.pyplot as plt +import numpy as np +import torch + +from utils.lca import hyp_lca + + +def mobius_add(x, y): + """Mobius addition in numpy.""" + xy = np.sum(x * y, 1, keepdims=True) + x2 = np.sum(x * x, 1, keepdims=True) + y2 = np.sum(y * y, 1, keepdims=True) + num = (1 + 2 * xy + y2) * x + (1 - x2) * y + den = 1 + 2 * xy + x2 * y2 + return num / den + + +def mobius_mul(x, t): + """Mobius multiplication in numpy.""" + normx = np.sqrt(np.sum(x * x, 1, keepdims=True)) + return np.tanh(t * np.arctanh(normx)) * x / normx + + +def geodesic_fn(x, y, nb_points=100): + """Get coordinates of points on the geodesic between x and y.""" + t = np.linspace(0, 1, nb_points) + x_rep = np.repeat(x.reshape((1, -1)), len(t), 0) + y_rep = np.repeat(y.reshape((1, -1)), len(t), 0) + t1 = mobius_add(-x_rep, y_rep) + t2 = mobius_mul(t1, t.reshape((-1, 1))) + return mobius_add(x_rep, t2) + + +def plot_geodesic(x, y, ax): + """Plots geodesic between x and y.""" + points = geodesic_fn(x, y) + ax.plot(points[:, 0], points[:, 1], color='black', linewidth=1.5, alpha=1) + + +def complete_tree(tree, leaves_embeddings): + """Get embeddings of internal nodes from leaves' embeddings using LCA construction.""" + + def _complete_tree(embeddings, node): + children = list(tree.neighbors(node)) + if len(children) == 2: + left_c, right_c = children + left_leaf = is_leaf(tree, left_c) + right_leaf = is_leaf(tree, right_c) + if left_leaf and right_leaf: + pass + elif left_leaf and not right_leaf: + embeddings = _complete_tree(embeddings, right_c) + elif right_leaf and not left_leaf: + embeddings = _complete_tree(embeddings, left_c) + else: + embeddings = _complete_tree(embeddings, right_c) + embeddings = _complete_tree(embeddings, left_c) + embeddings[node] = hyp_lca_numpy(embeddings[left_c], embeddings[right_c]) + return embeddings + + n = leaves_embeddings.shape[0] + tree_embeddings = np.zeros((2 * n - 1, 2)) + tree_embeddings[:n, :] = leaves_embeddings + root = max(list(tree.nodes())) + tree_embeddings = _complete_tree(tree_embeddings, root) + return tree_embeddings + + +def hyp_lca_numpy(x, y): + """Computes the hyperbolic LCA in numpy.""" + x = torch.from_numpy(x).view((1, 2)) + y = torch.from_numpy(y).view((1, 2)) + lca = hyp_lca(x, y, return_coord=True) + return lca.view((2,)).numpy() + + +def is_leaf(tree, node): + """check if node is a leaf in tree.""" + return len(list(tree.neighbors(node))) == 0 + + +def plot_tree_from_leaves(ax, tree, leaves_embeddings, labels, color_seed=1234): + """Plots a tree on leaves embeddings using the LCA construction.""" + circle = plt.Circle((0, 0), 1.0, color='r', alpha=0.1) + ax.add_artist(circle) + n = leaves_embeddings.shape[0] + embeddings = complete_tree(tree, leaves_embeddings) + colors = get_colors(labels, color_seed) + ax.scatter(embeddings[:n, 0], embeddings[:n, 1], c=colors, s=50, alpha=0.6) + + for n1, n2 in tree.edges(): + x1 = embeddings[n1] + x2 = embeddings[n2] + plot_geodesic(x1, x2, ax) + ax.set_xlim(-1.05, 1.05) + ax.set_ylim(-1.05, 1.05) + ax.axis("off") + return ax + + +def get_colors(y, color_seed=1234): + """random color assignment for label classes.""" + np.random.seed(color_seed) + colors = {} + for k in np.unique(y): + r = np.random.random() + b = np.random.random() + g = np.random.random() + colors[k] = (r, g, b) + return [colors[k] for k in y] diff --git a/visualize.py b/visualize.py new file mode 100644 index 0000000..0579e97 --- /dev/null +++ b/visualize.py @@ -0,0 +1,42 @@ +"""Script to visualize the HypHC clustering.""" + +import argparse +import json +import os + +import matplotlib.pyplot as plt +import torch + +from datasets.loading import load_data +from model.hyphc import HypHC +from utils.poincare import project +from utils.visualization import plot_tree_from_leaves + +if __name__ == "__main__": + parser = argparse.ArgumentParser("Hyperbolic Hierarchical Clustering.") + parser.add_argument("--model_dir", type=str, required=True, + help="path to a directory with a torch model_{seed}.pkl and a config.json files saved by train.py." + ) + parser.add_argument("--seed", type=str, default=0, help="model seed to use") + args = parser.parse_args() + + # load dataset + config = json.load(open(os.path.join(args.model_dir, "config.json"))) + config_args = argparse.Namespace(**config) + _, y_true, similarities = load_data(config_args.dataset) + + # build HypHC model + model = HypHC(similarities.shape[0], config_args.rank, config_args.temperature, config_args.init_size, + config_args.max_scale) + params = torch.load(os.path.join(args.model_dir, f"model_{args.seed}.pkl"), map_location=torch.device('cpu')) + model.load_state_dict(params, strict=False) + model.eval() + + # decode tree + tree = model.decode_tree(fast_decoding=True) + leaves_embeddings = model.normalize_embeddings(model.embeddings.weight.data) + leaves_embeddings = project(leaves_embeddings).detach().cpu().numpy() + fig = plt.figure(figsize=(5, 5)) + ax = fig.add_subplot(111) + ax = plot_tree_from_leaves(ax, tree, leaves_embeddings, labels=y_true) + fig.savefig(os.path.join(args.model_dir, f"embeddings_{args.seed}.png"))