Cython 3.2.0__cp39-abi3-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Cython/Build/BuildExecutable.py +169 -0
- Cython/Build/Cache.py +199 -0
- Cython/Build/Cythonize.py +350 -0
- Cython/Build/Dependencies.py +1314 -0
- Cython/Build/Distutils.py +1 -0
- Cython/Build/Inline.py +463 -0
- Cython/Build/IpythonMagic.py +560 -0
- Cython/Build/SharedModule.py +94 -0
- Cython/Build/Tests/TestCyCache.py +194 -0
- Cython/Build/Tests/TestCythonizeArgsParser.py +481 -0
- Cython/Build/Tests/TestDependencies.py +133 -0
- Cython/Build/Tests/TestInline.py +177 -0
- Cython/Build/Tests/TestIpythonMagic.py +287 -0
- Cython/Build/Tests/TestRecythonize.py +212 -0
- Cython/Build/Tests/TestStripLiterals.py +155 -0
- Cython/Build/Tests/__init__.py +1 -0
- Cython/Build/__init__.py +11 -0
- Cython/CodeWriter.py +815 -0
- Cython/Compiler/AnalysedTreeTransforms.py +97 -0
- Cython/Compiler/Annotate.py +328 -0
- Cython/Compiler/AutoDocTransforms.py +320 -0
- Cython/Compiler/Buffer.py +680 -0
- Cython/Compiler/Builtin.py +984 -0
- Cython/Compiler/CmdLine.py +263 -0
- Cython/Compiler/Code.pxd +149 -0
- Cython/Compiler/Code.py +3746 -0
- Cython/Compiler/Code.pyd +0 -0
- Cython/Compiler/CodeGeneration.py +33 -0
- Cython/Compiler/CythonScope.py +191 -0
- Cython/Compiler/Dataclass.py +864 -0
- Cython/Compiler/DebugFlags.py +24 -0
- Cython/Compiler/Errors.py +297 -0
- Cython/Compiler/ExprNodes.py +15562 -0
- Cython/Compiler/FlowControl.pxd +97 -0
- Cython/Compiler/FlowControl.py +1451 -0
- Cython/Compiler/FlowControl.pyd +0 -0
- Cython/Compiler/FusedNode.py +971 -0
- Cython/Compiler/FusedNode.pyd +0 -0
- Cython/Compiler/Future.py +16 -0
- Cython/Compiler/Interpreter.py +57 -0
- Cython/Compiler/Lexicon.py +421 -0
- Cython/Compiler/LineTable.py +114 -0
- Cython/Compiler/LineTable.pyd +0 -0
- Cython/Compiler/Main.py +857 -0
- Cython/Compiler/MatchCaseNodes.py +259 -0
- Cython/Compiler/MemoryView.py +905 -0
- Cython/Compiler/ModuleNode.py +4235 -0
- Cython/Compiler/Naming.py +363 -0
- Cython/Compiler/Nodes.py +10831 -0
- Cython/Compiler/Optimize.py +5288 -0
- Cython/Compiler/Options.py +843 -0
- Cython/Compiler/ParseTreeTransforms.pxd +78 -0
- Cython/Compiler/ParseTreeTransforms.py +4638 -0
- Cython/Compiler/Parsing.pxd +9 -0
- Cython/Compiler/Parsing.py +4775 -0
- Cython/Compiler/Parsing.pyd +0 -0
- Cython/Compiler/Pipeline.py +439 -0
- Cython/Compiler/PyrexTypes.py +5870 -0
- Cython/Compiler/Pythran.py +232 -0
- Cython/Compiler/Scanning.pxd +48 -0
- Cython/Compiler/Scanning.py +701 -0
- Cython/Compiler/Scanning.pyd +0 -0
- Cython/Compiler/StringEncoding.py +298 -0
- Cython/Compiler/Symtab.py +3073 -0
- Cython/Compiler/Tests/TestBuffer.py +105 -0
- Cython/Compiler/Tests/TestBuiltin.py +72 -0
- Cython/Compiler/Tests/TestCmdLine.py +586 -0
- Cython/Compiler/Tests/TestCode.py +144 -0
- Cython/Compiler/Tests/TestFlowControl.py +65 -0
- Cython/Compiler/Tests/TestGrammar.py +202 -0
- Cython/Compiler/Tests/TestMemView.py +71 -0
- Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
- Cython/Compiler/Tests/TestScanning.py +134 -0
- Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
- Cython/Compiler/Tests/TestStringEncoding.py +21 -0
- Cython/Compiler/Tests/TestTreeFragment.py +63 -0
- Cython/Compiler/Tests/TestTreePath.py +103 -0
- Cython/Compiler/Tests/TestTypes.py +75 -0
- Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
- Cython/Compiler/Tests/TestVisitor.py +61 -0
- Cython/Compiler/Tests/Utils.py +36 -0
- Cython/Compiler/Tests/__init__.py +1 -0
- Cython/Compiler/TreeFragment.py +278 -0
- Cython/Compiler/TreePath.py +303 -0
- Cython/Compiler/TypeInference.py +591 -0
- Cython/Compiler/TypeSlots.py +1174 -0
- Cython/Compiler/UFuncs.py +311 -0
- Cython/Compiler/UtilNodes.py +389 -0
- Cython/Compiler/UtilityCode.py +344 -0
- Cython/Compiler/Version.py +8 -0
- Cython/Compiler/Visitor.pxd +53 -0
- Cython/Compiler/Visitor.py +861 -0
- Cython/Compiler/Visitor.pyd +0 -0
- Cython/Compiler/__init__.py +1 -0
- Cython/Coverage.py +448 -0
- Cython/Debugger/Cygdb.py +177 -0
- Cython/Debugger/DebugWriter.py +82 -0
- Cython/Debugger/Tests/TestLibCython.py +275 -0
- Cython/Debugger/Tests/__init__.py +1 -0
- Cython/Debugger/Tests/cfuncs.c +8 -0
- Cython/Debugger/Tests/codefile +49 -0
- Cython/Debugger/Tests/test_libcython_in_gdb.py +578 -0
- Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
- Cython/Debugger/__init__.py +1 -0
- Cython/Debugger/libcython.py +1548 -0
- Cython/Debugger/libpython.py +2821 -0
- Cython/Debugging.py +20 -0
- Cython/Distutils/__init__.py +2 -0
- Cython/Distutils/build_ext.py +139 -0
- Cython/Distutils/extension.py +96 -0
- Cython/Distutils/old_build_ext.py +351 -0
- Cython/Includes/cpython/__init__.pxd +173 -0
- Cython/Includes/cpython/array.pxd +178 -0
- Cython/Includes/cpython/bool.pxd +37 -0
- Cython/Includes/cpython/buffer.pxd +112 -0
- Cython/Includes/cpython/bytearray.pxd +33 -0
- Cython/Includes/cpython/bytes.pxd +200 -0
- Cython/Includes/cpython/cellobject.pxd +35 -0
- Cython/Includes/cpython/ceval.pxd +8 -0
- Cython/Includes/cpython/codecs.pxd +121 -0
- Cython/Includes/cpython/complex.pxd +60 -0
- Cython/Includes/cpython/contextvars.pxd +145 -0
- Cython/Includes/cpython/conversion.pxd +36 -0
- Cython/Includes/cpython/datetime.pxd +395 -0
- Cython/Includes/cpython/descr.pxd +26 -0
- Cython/Includes/cpython/dict.pxd +187 -0
- Cython/Includes/cpython/exc.pxd +263 -0
- Cython/Includes/cpython/fileobject.pxd +57 -0
- Cython/Includes/cpython/float.pxd +47 -0
- Cython/Includes/cpython/function.pxd +65 -0
- Cython/Includes/cpython/genobject.pxd +25 -0
- Cython/Includes/cpython/getargs.pxd +12 -0
- Cython/Includes/cpython/instance.pxd +25 -0
- Cython/Includes/cpython/iterator.pxd +36 -0
- Cython/Includes/cpython/iterobject.pxd +24 -0
- Cython/Includes/cpython/list.pxd +92 -0
- Cython/Includes/cpython/long.pxd +149 -0
- Cython/Includes/cpython/longintrepr.pxd +14 -0
- Cython/Includes/cpython/mapping.pxd +63 -0
- Cython/Includes/cpython/marshal.pxd +66 -0
- Cython/Includes/cpython/mem.pxd +120 -0
- Cython/Includes/cpython/memoryview.pxd +50 -0
- Cython/Includes/cpython/method.pxd +49 -0
- Cython/Includes/cpython/module.pxd +208 -0
- Cython/Includes/cpython/number.pxd +258 -0
- Cython/Includes/cpython/object.pxd +433 -0
- Cython/Includes/cpython/pycapsule.pxd +143 -0
- Cython/Includes/cpython/pylifecycle.pxd +68 -0
- Cython/Includes/cpython/pyport.pxd +8 -0
- Cython/Includes/cpython/pystate.pxd +95 -0
- Cython/Includes/cpython/pythread.pxd +53 -0
- Cython/Includes/cpython/ref.pxd +141 -0
- Cython/Includes/cpython/sequence.pxd +134 -0
- Cython/Includes/cpython/set.pxd +119 -0
- Cython/Includes/cpython/slice.pxd +70 -0
- Cython/Includes/cpython/time.pxd +129 -0
- Cython/Includes/cpython/tuple.pxd +72 -0
- Cython/Includes/cpython/type.pxd +53 -0
- Cython/Includes/cpython/unicode.pxd +639 -0
- Cython/Includes/cpython/version.pxd +32 -0
- Cython/Includes/cpython/weakref.pxd +78 -0
- Cython/Includes/libc/__init__.pxd +1 -0
- Cython/Includes/libc/complex.pxd +35 -0
- Cython/Includes/libc/errno.pxd +127 -0
- Cython/Includes/libc/float.pxd +43 -0
- Cython/Includes/libc/limits.pxd +28 -0
- Cython/Includes/libc/locale.pxd +46 -0
- Cython/Includes/libc/math.pxd +209 -0
- Cython/Includes/libc/setjmp.pxd +10 -0
- Cython/Includes/libc/signal.pxd +64 -0
- Cython/Includes/libc/stddef.pxd +9 -0
- Cython/Includes/libc/stdint.pxd +105 -0
- Cython/Includes/libc/stdio.pxd +80 -0
- Cython/Includes/libc/stdlib.pxd +72 -0
- Cython/Includes/libc/string.pxd +50 -0
- Cython/Includes/libc/threads.pxd +234 -0
- Cython/Includes/libc/time.pxd +52 -0
- Cython/Includes/libcpp/__init__.pxd +4 -0
- Cython/Includes/libcpp/algorithm.pxd +320 -0
- Cython/Includes/libcpp/any.pxd +16 -0
- Cython/Includes/libcpp/atomic.pxd +59 -0
- Cython/Includes/libcpp/barrier.pxd +22 -0
- Cython/Includes/libcpp/bit.pxd +29 -0
- Cython/Includes/libcpp/cast.pxd +12 -0
- Cython/Includes/libcpp/cmath.pxd +518 -0
- Cython/Includes/libcpp/complex.pxd +106 -0
- Cython/Includes/libcpp/condition_variable.pxd +322 -0
- Cython/Includes/libcpp/deque.pxd +165 -0
- Cython/Includes/libcpp/exception.pxd +86 -0
- Cython/Includes/libcpp/execution.pxd +15 -0
- Cython/Includes/libcpp/forward_list.pxd +63 -0
- Cython/Includes/libcpp/functional.pxd +26 -0
- Cython/Includes/libcpp/future.pxd +103 -0
- Cython/Includes/libcpp/iterator.pxd +34 -0
- Cython/Includes/libcpp/latch.pxd +17 -0
- Cython/Includes/libcpp/limits.pxd +61 -0
- Cython/Includes/libcpp/list.pxd +117 -0
- Cython/Includes/libcpp/map.pxd +252 -0
- Cython/Includes/libcpp/memory.pxd +115 -0
- Cython/Includes/libcpp/mutex.pxd +387 -0
- Cython/Includes/libcpp/numbers.pxd +15 -0
- Cython/Includes/libcpp/numeric.pxd +131 -0
- Cython/Includes/libcpp/optional.pxd +34 -0
- Cython/Includes/libcpp/pair.pxd +1 -0
- Cython/Includes/libcpp/queue.pxd +25 -0
- Cython/Includes/libcpp/random.pxd +166 -0
- Cython/Includes/libcpp/semaphore.pxd +43 -0
- Cython/Includes/libcpp/set.pxd +228 -0
- Cython/Includes/libcpp/shared_mutex.pxd +96 -0
- Cython/Includes/libcpp/span.pxd +87 -0
- Cython/Includes/libcpp/stack.pxd +11 -0
- Cython/Includes/libcpp/stop_token.pxd +117 -0
- Cython/Includes/libcpp/string.pxd +355 -0
- Cython/Includes/libcpp/string_view.pxd +183 -0
- Cython/Includes/libcpp/typeindex.pxd +15 -0
- Cython/Includes/libcpp/typeinfo.pxd +10 -0
- Cython/Includes/libcpp/unordered_map.pxd +193 -0
- Cython/Includes/libcpp/unordered_set.pxd +152 -0
- Cython/Includes/libcpp/utility.pxd +30 -0
- Cython/Includes/libcpp/vector.pxd +186 -0
- Cython/Includes/numpy/math.pxd +150 -0
- Cython/Includes/openmp.pxd +50 -0
- Cython/Includes/posix/__init__.pxd +1 -0
- Cython/Includes/posix/dlfcn.pxd +14 -0
- Cython/Includes/posix/fcntl.pxd +86 -0
- Cython/Includes/posix/ioctl.pxd +4 -0
- Cython/Includes/posix/mman.pxd +101 -0
- Cython/Includes/posix/resource.pxd +57 -0
- Cython/Includes/posix/select.pxd +21 -0
- Cython/Includes/posix/signal.pxd +73 -0
- Cython/Includes/posix/stat.pxd +98 -0
- Cython/Includes/posix/stdio.pxd +37 -0
- Cython/Includes/posix/stdlib.pxd +29 -0
- Cython/Includes/posix/strings.pxd +9 -0
- Cython/Includes/posix/time.pxd +71 -0
- Cython/Includes/posix/types.pxd +30 -0
- Cython/Includes/posix/uio.pxd +26 -0
- Cython/Includes/posix/unistd.pxd +271 -0
- Cython/Includes/posix/wait.pxd +38 -0
- Cython/Plex/Actions.pxd +24 -0
- Cython/Plex/Actions.py +119 -0
- Cython/Plex/Actions.pyd +0 -0
- Cython/Plex/DFA.pxd +14 -0
- Cython/Plex/DFA.py +164 -0
- Cython/Plex/DFA.pyd +0 -0
- Cython/Plex/Errors.py +48 -0
- Cython/Plex/Lexicons.py +178 -0
- Cython/Plex/Machines.pxd +36 -0
- Cython/Plex/Machines.py +238 -0
- Cython/Plex/Machines.pyd +0 -0
- Cython/Plex/Regexps.py +535 -0
- Cython/Plex/Scanners.pxd +45 -0
- Cython/Plex/Scanners.py +328 -0
- Cython/Plex/Scanners.pyd +0 -0
- Cython/Plex/Transitions.pxd +14 -0
- Cython/Plex/Transitions.py +239 -0
- Cython/Plex/Transitions.pyd +0 -0
- Cython/Plex/__init__.py +34 -0
- Cython/Runtime/__init__.py +1 -0
- Cython/Runtime/refnanny.pyd +0 -0
- Cython/Runtime/refnanny.pyx +237 -0
- Cython/Shadow.py +690 -0
- Cython/Shadow.pyi +521 -0
- Cython/StringIOTree.py +170 -0
- Cython/StringIOTree.pyd +0 -0
- Cython/Tempita/__init__.py +4 -0
- Cython/Tempita/_looper.py +154 -0
- Cython/Tempita/_tempita.py +1091 -0
- Cython/Tempita/_tempita.pyd +0 -0
- Cython/TestUtils.py +422 -0
- Cython/Tests/TestCodeWriter.py +128 -0
- Cython/Tests/TestCythonUtils.py +202 -0
- Cython/Tests/TestJediTyper.py +223 -0
- Cython/Tests/TestShadow.py +114 -0
- Cython/Tests/TestStringIOTree.py +67 -0
- Cython/Tests/TestTestUtils.py +90 -0
- Cython/Tests/__init__.py +1 -0
- Cython/Tests/xmlrunner.py +390 -0
- Cython/Utility/AsyncGen.c +1031 -0
- Cython/Utility/Buffer.c +865 -0
- Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
- Cython/Utility/Builtins.c +810 -0
- Cython/Utility/CConvert.pyx +134 -0
- Cython/Utility/CMath.c +104 -0
- Cython/Utility/CommonStructures.c +226 -0
- Cython/Utility/Complex.c +378 -0
- Cython/Utility/Coroutine.c +2300 -0
- Cython/Utility/CpdefEnums.pyx +103 -0
- Cython/Utility/CppConvert.pyx +282 -0
- Cython/Utility/CppSupport.cpp +151 -0
- Cython/Utility/CythonFunction.c +1832 -0
- Cython/Utility/Dataclasses.c +101 -0
- Cython/Utility/Embed.c +121 -0
- Cython/Utility/Exceptions.c +1016 -0
- Cython/Utility/ExtensionTypes.c +996 -0
- Cython/Utility/FunctionArguments.c +1043 -0
- Cython/Utility/FusedFunction.pyx +44 -0
- Cython/Utility/ImportExport.c +907 -0
- Cython/Utility/MemoryView.pxd +188 -0
- Cython/Utility/MemoryView.pyx +1482 -0
- Cython/Utility/MemoryView_C.c +927 -0
- Cython/Utility/ModuleSetupCode.c +3203 -0
- Cython/Utility/NumpyImportArray.c +46 -0
- Cython/Utility/ObjectHandling.c +3273 -0
- Cython/Utility/Optimize.c +1603 -0
- Cython/Utility/Overflow.c +384 -0
- Cython/Utility/Printing.c +86 -0
- Cython/Utility/Profile.c +732 -0
- Cython/Utility/StringTools.c +1379 -0
- Cython/Utility/Synchronization.c +399 -0
- Cython/Utility/TString.c +356 -0
- Cython/Utility/TestCyUtilityLoader.pyx +8 -0
- Cython/Utility/TestCythonScope.pyx +75 -0
- Cython/Utility/TestUtilityLoader.c +12 -0
- Cython/Utility/TypeConversion.c +1385 -0
- Cython/Utility/UFuncs.pyx +50 -0
- Cython/Utility/UFuncs_C.c +89 -0
- Cython/Utility/__init__.py +28 -0
- Cython/Utility/arrayarray.h +167 -0
- Cython/Utils.py +687 -0
- Cython/Utils.pyd +0 -0
- Cython/__init__.py +10 -0
- Cython/__init__.pyi +7 -0
- Cython/py.typed +0 -0
- cython-3.2.0.dist-info/METADATA +85 -0
- cython-3.2.0.dist-info/RECORD +333 -0
- cython-3.2.0.dist-info/WHEEL +5 -0
- cython-3.2.0.dist-info/entry_points.txt +4 -0
- cython-3.2.0.dist-info/top_level.txt +3 -0
- cython.py +29 -0
- pyximport/__init__.py +4 -0
- pyximport/pyxbuild.py +160 -0
- pyximport/pyximport.py +482 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
##################### UFuncDefinition ######################
|
|
2
|
+
|
|
3
|
+
cdef extern from *:
|
|
4
|
+
ctypedef int npy_intp
|
|
5
|
+
struct PyObject
|
|
6
|
+
PyObject* __Pyx_NewRef(object)
|
|
7
|
+
|
|
8
|
+
# variable names have to come from tempita to avoid duplication
|
|
9
|
+
@cname("{{func_cname}}")
|
|
10
|
+
cdef void {{func_cname}}(char **args, const npy_intp *dimensions, const npy_intp* steps, void* data) except * {{"nogil" if will_be_called_without_gil else ""}}:
|
|
11
|
+
cdef npy_intp i
|
|
12
|
+
cdef npy_intp n = dimensions[0]
|
|
13
|
+
{{for idx, tn_tp in enumerate(in_types)}}
|
|
14
|
+
cdef char* in_{{idx}} = args[{{idx}}]
|
|
15
|
+
cdef {{tn_tp[0]}} cast_in_{{idx}}
|
|
16
|
+
{{endfor}}
|
|
17
|
+
{{for idx, tn_tp in enumerate(out_types)}}
|
|
18
|
+
cdef char* out_{{idx}} = args[{{idx+len(in_types)}}]
|
|
19
|
+
cdef {{tn_tp[0]}} cast_out_{{idx}}
|
|
20
|
+
{{endfor}}
|
|
21
|
+
{{for idx in range(len(out_types)+len(in_types))}}
|
|
22
|
+
cdef npy_intp step_{{idx}} = steps[{{idx}}]
|
|
23
|
+
{{endfor}}
|
|
24
|
+
|
|
25
|
+
{{"with gil" if (not nogil and will_be_called_without_gil) else "if True"}}:
|
|
26
|
+
for i in range(n):
|
|
27
|
+
{{for idx, tn_tp in enumerate(in_types)}}
|
|
28
|
+
{{if tn_tp[1].is_pyobject}}
|
|
29
|
+
cast_in_{{idx}} = (<{{tn_tp[0]}}>(<void**>in_{{idx}})[0])
|
|
30
|
+
{{else}}
|
|
31
|
+
cast_in_{{idx}} = (<{{tn_tp[0]}}*>in_{{idx}})[0]
|
|
32
|
+
{{endif}}
|
|
33
|
+
{{endfor}}
|
|
34
|
+
|
|
35
|
+
{{", ".join("cast_out_{}".format(idx) for idx in range(len(out_types)))}} = \
|
|
36
|
+
{{inline_func_call}}({{", ".join("cast_in_{}".format(idx) for idx in range(len(in_types)))}})
|
|
37
|
+
|
|
38
|
+
{{for idx, tn_tp in enumerate(out_types)}}
|
|
39
|
+
{{if tn_tp[1].is_pyobject}}
|
|
40
|
+
(<void**>out_{{idx}})[0] = <void*>__Pyx_NewRef(cast_out_{{idx}})
|
|
41
|
+
{{else}}
|
|
42
|
+
(<{{tn_tp[0]}}*>out_{{idx}})[0] = cast_out_{{idx}}
|
|
43
|
+
{{endif}}
|
|
44
|
+
{{endfor}}
|
|
45
|
+
{{for idx in range(len(in_types))}}
|
|
46
|
+
in_{{idx}} += step_{{idx}}
|
|
47
|
+
{{endfor}}
|
|
48
|
+
{{for idx in range(len(out_types))}}
|
|
49
|
+
out_{{idx}} += step_{{idx+len(in_types)}}
|
|
50
|
+
{{endfor}}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
///////////////////////// UFuncsInit.proto /////////////////////////
|
|
2
|
+
//@proto_block: utility_code_proto_before_types
|
|
3
|
+
|
|
4
|
+
#include <numpy/arrayobject.h>
|
|
5
|
+
#include <numpy/ufuncobject.h>
|
|
6
|
+
|
|
7
|
+
// account for change in type of arguments to PyUFuncGenericFunction in Numpy 1.19.x
|
|
8
|
+
// Unfortunately we can only test against Numpy version 1.20.x since it wasn't marked
|
|
9
|
+
// as an API break. Therefore, I'm "solving" the issue by casting function pointer types
|
|
10
|
+
// on lower Numpy versions.
|
|
11
|
+
#if NPY_API_VERSION >= 0x0000000e // Numpy 1.20.x
|
|
12
|
+
#define __PYX_PYUFUNCGENERICFUNCTION_CAST(x) x
|
|
13
|
+
#else
|
|
14
|
+
#define __PYX_PYUFUNCGENERICFUNCTION_CAST(x) (PyUFuncGenericFunction)x
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
/////////////////////// UFuncTypeHandling.proto //////////////
|
|
18
|
+
|
|
19
|
+
#define __PYX_GET_NPY_COMPLEX_TYPE(tp) \
|
|
20
|
+
sizeof(tp) == sizeof(npy_cfloat) ? NPY_CFLOAT : \
|
|
21
|
+
sizeof(tp) == sizeof(npy_cdouble) ? NPY_CDOUBLE : \
|
|
22
|
+
sizeof(tp) == sizeof(npy_clongdouble) ? NPY_CLONGDOUBLE : NPY_NOTYPE
|
|
23
|
+
|
|
24
|
+
#define __PYX_GET_NPY_FLOAT_TYPE(tp) \
|
|
25
|
+
sizeof(tp) == sizeof(npy_float) ? NPY_FLOAT : \
|
|
26
|
+
sizeof(tp) == sizeof(npy_double) ? NPY_DOUBLE : \
|
|
27
|
+
sizeof(tp) == sizeof(npy_longdouble) ? NPY_LONGDOUBLE : NPY_NOTYPE
|
|
28
|
+
|
|
29
|
+
#define __PYX_GET_NPY_UINT_TYPE(tp) \
|
|
30
|
+
sizeof(tp) == 1 ? NPY_UINT8 : \
|
|
31
|
+
sizeof(tp) == 2 ? NPY_UINT16 : \
|
|
32
|
+
sizeof(tp) == 4 ? NPY_UINT32 : \
|
|
33
|
+
sizeof(tp) == 8 ? NPY_UINT64 : NPY_NOTYPE
|
|
34
|
+
|
|
35
|
+
#define __PYX_GET_NPY_SINT_TYPE(tp) \
|
|
36
|
+
sizeof(tp) == 1 ? NPY_INT8 : \
|
|
37
|
+
sizeof(tp) == 2 ? NPY_INT16 : \
|
|
38
|
+
sizeof(tp) == 4 ? NPY_INT32 : \
|
|
39
|
+
sizeof(tp) == 8 ? NPY_INT64 : NPY_NOTYPE
|
|
40
|
+
|
|
41
|
+
#define __PYX_GET_NPY_INT_TYPE(tp) ( \
|
|
42
|
+
(((tp)-1) > (tp)0) ? \
|
|
43
|
+
(__PYX_GET_NPY_UINT_TYPE(tp)) : \
|
|
44
|
+
(__PYX_GET_NPY_SINT_TYPE(tp)) )
|
|
45
|
+
|
|
46
|
+
/////////////////////// UFuncTypedef.proto ///////////////////
|
|
47
|
+
//@requires: UFuncTypeHandling
|
|
48
|
+
|
|
49
|
+
enum {
|
|
50
|
+
/*
|
|
51
|
+
Deduce what to tell Numpy about the extern typedef '{{type_cname}}'
|
|
52
|
+
*/
|
|
53
|
+
__Pyx_typedef_ufunc_{{type_substituted_cname}} = {{macro_name}}({{type_cname}}),
|
|
54
|
+
|
|
55
|
+
/* Validation:
|
|
56
|
+
If the line below is failing then you are using the extern typedef
|
|
57
|
+
'{{type_cname}}' as a parameter in a ufunc and Cython can't work out
|
|
58
|
+
how to map the type to a Numpy type.
|
|
59
|
+
*/
|
|
60
|
+
__Pyx_typedef_ufunc_validation_{{type_substituted_cname}} =
|
|
61
|
+
1 / (int)(__Pyx_typedef_ufunc_{{type_substituted_cname}} - NPY_NOTYPE)
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/////////////////////// UFuncConsts.proto ////////////////////
|
|
65
|
+
|
|
66
|
+
// getter functions because we can't forward-declare arrays
|
|
67
|
+
static PyUFuncGenericFunction* {{ufunc_funcs_name}}(void); /* proto */
|
|
68
|
+
static char* {{ufunc_types_name}}(void); /* proto */
|
|
69
|
+
static void* {{ufunc_data_name}}[] = {NULL}; /* always null */
|
|
70
|
+
|
|
71
|
+
/////////////////////// UFuncConsts /////////////////////////
|
|
72
|
+
|
|
73
|
+
static PyUFuncGenericFunction* {{ufunc_funcs_name}}(void) {
|
|
74
|
+
static PyUFuncGenericFunction arr[] = {
|
|
75
|
+
{{for loop, cname in looper(func_cnames)}}
|
|
76
|
+
__PYX_PYUFUNCGENERICFUNCTION_CAST(&{{cname}}){{if not loop.last}},{{endif}}
|
|
77
|
+
{{endfor}}
|
|
78
|
+
};
|
|
79
|
+
return arr;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
static char* {{ufunc_types_name}}(void) {
|
|
83
|
+
static char arr[] = {
|
|
84
|
+
{{for loop, tp in looper(type_constants)}}
|
|
85
|
+
{{tp}}{{if not loop.last}},{{endif}}
|
|
86
|
+
{{endfor}}
|
|
87
|
+
};
|
|
88
|
+
return arr;
|
|
89
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
def pylong_join(count, digits_ptr='digits', join_type='unsigned long'):
|
|
2
|
+
"""
|
|
3
|
+
Generate an unrolled shift-then-or loop over the first 'count' digits.
|
|
4
|
+
Assumes that they fit into 'join_type'.
|
|
5
|
+
|
|
6
|
+
(((d[2] << n) | d[1]) << n) | d[0]
|
|
7
|
+
"""
|
|
8
|
+
return ('(' * (count * 2) + ' | '.join(
|
|
9
|
+
"(%s)%s[%d])%s)" % (join_type, digits_ptr, _i, " << PyLong_SHIFT" if _i else '')
|
|
10
|
+
for _i in range(count-1, -1, -1)))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# although it could potentially make use of data independence,
|
|
14
|
+
# this implementation is a bit slower than the simpler one above
|
|
15
|
+
def _pylong_join(count, digits_ptr='digits', join_type='unsigned long'):
|
|
16
|
+
"""
|
|
17
|
+
Generate an or-ed series of shifts for the first 'count' digits.
|
|
18
|
+
Assumes that they fit into 'join_type'.
|
|
19
|
+
|
|
20
|
+
(d[2] << 2*n) | (d[1] << 1*n) | d[0]
|
|
21
|
+
"""
|
|
22
|
+
def shift(n):
|
|
23
|
+
# avoid compiler warnings for overly large shifts that will be discarded anyway
|
|
24
|
+
return " << (%d * PyLong_SHIFT < 8 * sizeof(%s) ? %d * PyLong_SHIFT : 0)" % (n, join_type, n) if n else ''
|
|
25
|
+
|
|
26
|
+
return '(%s)' % ' | '.join(
|
|
27
|
+
"(((%s)%s[%d])%s)" % (join_type, digits_ptr, i, shift(i))
|
|
28
|
+
for i in range(count-1, -1, -1))
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/////////////// ArrayAPI.proto ///////////////
|
|
2
|
+
|
|
3
|
+
// arrayarray.h
|
|
4
|
+
//
|
|
5
|
+
// Artificial C-API for Python's <array.array> type,
|
|
6
|
+
// used by array.pxd
|
|
7
|
+
//
|
|
8
|
+
// last changes: 2009-05-15 rk
|
|
9
|
+
// 2012-05-02 andreasvc
|
|
10
|
+
// (see revision control)
|
|
11
|
+
//
|
|
12
|
+
|
|
13
|
+
#ifndef _ARRAYARRAY_H
|
|
14
|
+
#define _ARRAYARRAY_H
|
|
15
|
+
|
|
16
|
+
// These two forward declarations are explicitly handled in the type
|
|
17
|
+
// declaration code, as including them here is too late for cython-defined
|
|
18
|
+
// types to use them.
|
|
19
|
+
// struct arrayobject;
|
|
20
|
+
// typedef struct arrayobject arrayobject;
|
|
21
|
+
|
|
22
|
+
// All possible arraydescr values are defined in the vector "descriptors"
|
|
23
|
+
// below. That's defined later because the appropriate get and set
|
|
24
|
+
// functions aren't visible yet.
|
|
25
|
+
typedef struct arraydescr {
|
|
26
|
+
int typecode;
|
|
27
|
+
int itemsize;
|
|
28
|
+
PyObject * (*getitem)(struct arrayobject *, Py_ssize_t);
|
|
29
|
+
int (*setitem)(struct arrayobject *, Py_ssize_t, PyObject *);
|
|
30
|
+
char *formats;
|
|
31
|
+
} arraydescr;
|
|
32
|
+
|
|
33
|
+
typedef union {
|
|
34
|
+
char *ob_item;
|
|
35
|
+
float *as_floats;
|
|
36
|
+
double *as_doubles;
|
|
37
|
+
int *as_ints;
|
|
38
|
+
unsigned int *as_uints;
|
|
39
|
+
unsigned char *as_uchars;
|
|
40
|
+
signed char *as_schars;
|
|
41
|
+
char *as_chars;
|
|
42
|
+
unsigned long *as_ulongs;
|
|
43
|
+
long *as_longs;
|
|
44
|
+
unsigned long long *as_ulonglongs;
|
|
45
|
+
long long *as_longlongs;
|
|
46
|
+
short *as_shorts;
|
|
47
|
+
unsigned short *as_ushorts;
|
|
48
|
+
// Don't use Py_UNICODE ourselves in the union. This avoids deprecation warnings
|
|
49
|
+
// for anyone who uses array.array but doesn't use this field.
|
|
50
|
+
#if PY_VERSION_HEX >= 0x030d0000
|
|
51
|
+
Py_DEPRECATED(3.13)
|
|
52
|
+
#endif
|
|
53
|
+
wchar_t *as_pyunicodes;
|
|
54
|
+
void *as_voidptr;
|
|
55
|
+
} __Pyx_data_union;
|
|
56
|
+
|
|
57
|
+
struct arrayobject {
|
|
58
|
+
PyObject_HEAD
|
|
59
|
+
Py_ssize_t ob_size;
|
|
60
|
+
__Pyx_data_union data;
|
|
61
|
+
Py_ssize_t allocated;
|
|
62
|
+
struct arraydescr *ob_descr;
|
|
63
|
+
PyObject *weakreflist; /* List of weak references */
|
|
64
|
+
int ob_exports; /* Number of exported buffers */
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
#ifndef NO_NEWARRAY_INLINE
|
|
68
|
+
// fast creation of a new array
|
|
69
|
+
static CYTHON_INLINE PyObject * newarrayobject(PyTypeObject *type, Py_ssize_t size,
|
|
70
|
+
struct arraydescr *descr) {
|
|
71
|
+
arrayobject *op;
|
|
72
|
+
size_t nbytes;
|
|
73
|
+
|
|
74
|
+
if (size < 0) {
|
|
75
|
+
PyErr_BadInternalCall();
|
|
76
|
+
return NULL;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
nbytes = size * descr->itemsize;
|
|
80
|
+
// Check for overflow
|
|
81
|
+
if (nbytes / descr->itemsize != (size_t)size) {
|
|
82
|
+
return PyErr_NoMemory();
|
|
83
|
+
}
|
|
84
|
+
op = (arrayobject *) type->tp_alloc(type, 0);
|
|
85
|
+
if (op == NULL) {
|
|
86
|
+
return NULL;
|
|
87
|
+
}
|
|
88
|
+
op->ob_descr = descr;
|
|
89
|
+
op->allocated = size;
|
|
90
|
+
op->weakreflist = NULL;
|
|
91
|
+
__Pyx_SET_SIZE(op, size);
|
|
92
|
+
if (size <= 0) {
|
|
93
|
+
op->data.ob_item = NULL;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
op->data.ob_item = PyMem_NEW(char, nbytes);
|
|
97
|
+
if (op->data.ob_item == NULL) {
|
|
98
|
+
Py_DECREF(op);
|
|
99
|
+
return PyErr_NoMemory();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return (PyObject *) op;
|
|
103
|
+
}
|
|
104
|
+
#else
|
|
105
|
+
PyObject* newarrayobject(PyTypeObject *type, Py_ssize_t size,
|
|
106
|
+
struct arraydescr *descr);
|
|
107
|
+
#endif /* ifndef NO_NEWARRAY_INLINE */
|
|
108
|
+
|
|
109
|
+
static CYTHON_INLINE __Pyx_data_union __Pyx_PyArray_Data(arrayobject *self) {
|
|
110
|
+
#if CYTHON_COMPILING_IN_GRAAL
|
|
111
|
+
__Pyx_data_union data;
|
|
112
|
+
data.ob_item = GraalPyArray_Data((PyObject*)self);
|
|
113
|
+
return data;
|
|
114
|
+
#else
|
|
115
|
+
return self->data;
|
|
116
|
+
#endif
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// fast resize (reallocation to the point)
|
|
120
|
+
// not designed for filing small increments (but for fast opaque array apps)
|
|
121
|
+
static CYTHON_INLINE int resize(arrayobject *self, Py_ssize_t n) {
|
|
122
|
+
#if CYTHON_COMPILING_IN_GRAAL
|
|
123
|
+
return GraalPyArray_Resize((PyObject*)self, n);
|
|
124
|
+
#else
|
|
125
|
+
void *items = (void*) self->data.ob_item;
|
|
126
|
+
PyMem_Resize(items, char, (size_t)(n * self->ob_descr->itemsize));
|
|
127
|
+
if (items == NULL) {
|
|
128
|
+
PyErr_NoMemory();
|
|
129
|
+
return -1;
|
|
130
|
+
}
|
|
131
|
+
self->data.ob_item = (char*) items;
|
|
132
|
+
__Pyx_SET_SIZE(self, n);
|
|
133
|
+
self->allocated = n;
|
|
134
|
+
return 0;
|
|
135
|
+
#endif
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// suitable for small increments; over allocation 50% ;
|
|
139
|
+
static CYTHON_INLINE int resize_smart(arrayobject *self, Py_ssize_t n) {
|
|
140
|
+
#if CYTHON_COMPILING_IN_GRAAL
|
|
141
|
+
return GraalPyArray_Resize((PyObject*)self, n);
|
|
142
|
+
#else
|
|
143
|
+
void *items = (void*) self->data.ob_item;
|
|
144
|
+
Py_ssize_t newsize;
|
|
145
|
+
if (n < self->allocated && n*4 > self->allocated) {
|
|
146
|
+
__Pyx_SET_SIZE(self, n);
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
newsize = n + (n / 2) + 1;
|
|
150
|
+
if (newsize <= n) { /* overflow */
|
|
151
|
+
PyErr_NoMemory();
|
|
152
|
+
return -1;
|
|
153
|
+
}
|
|
154
|
+
PyMem_Resize(items, char, (size_t)(newsize * self->ob_descr->itemsize));
|
|
155
|
+
if (items == NULL) {
|
|
156
|
+
PyErr_NoMemory();
|
|
157
|
+
return -1;
|
|
158
|
+
}
|
|
159
|
+
self->data.ob_item = (char*) items;
|
|
160
|
+
__Pyx_SET_SIZE(self, n);
|
|
161
|
+
self->allocated = newsize;
|
|
162
|
+
return 0;
|
|
163
|
+
#endif
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
#endif
|
|
167
|
+
/* _ARRAYARRAY_H */
|