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.
Files changed (333) hide show
  1. Cython/Build/BuildExecutable.py +169 -0
  2. Cython/Build/Cache.py +199 -0
  3. Cython/Build/Cythonize.py +350 -0
  4. Cython/Build/Dependencies.py +1314 -0
  5. Cython/Build/Distutils.py +1 -0
  6. Cython/Build/Inline.py +463 -0
  7. Cython/Build/IpythonMagic.py +560 -0
  8. Cython/Build/SharedModule.py +94 -0
  9. Cython/Build/Tests/TestCyCache.py +194 -0
  10. Cython/Build/Tests/TestCythonizeArgsParser.py +481 -0
  11. Cython/Build/Tests/TestDependencies.py +133 -0
  12. Cython/Build/Tests/TestInline.py +177 -0
  13. Cython/Build/Tests/TestIpythonMagic.py +287 -0
  14. Cython/Build/Tests/TestRecythonize.py +212 -0
  15. Cython/Build/Tests/TestStripLiterals.py +155 -0
  16. Cython/Build/Tests/__init__.py +1 -0
  17. Cython/Build/__init__.py +11 -0
  18. Cython/CodeWriter.py +815 -0
  19. Cython/Compiler/AnalysedTreeTransforms.py +97 -0
  20. Cython/Compiler/Annotate.py +328 -0
  21. Cython/Compiler/AutoDocTransforms.py +320 -0
  22. Cython/Compiler/Buffer.py +680 -0
  23. Cython/Compiler/Builtin.py +984 -0
  24. Cython/Compiler/CmdLine.py +263 -0
  25. Cython/Compiler/Code.pxd +149 -0
  26. Cython/Compiler/Code.py +3746 -0
  27. Cython/Compiler/Code.pyd +0 -0
  28. Cython/Compiler/CodeGeneration.py +33 -0
  29. Cython/Compiler/CythonScope.py +191 -0
  30. Cython/Compiler/Dataclass.py +864 -0
  31. Cython/Compiler/DebugFlags.py +24 -0
  32. Cython/Compiler/Errors.py +297 -0
  33. Cython/Compiler/ExprNodes.py +15562 -0
  34. Cython/Compiler/FlowControl.pxd +97 -0
  35. Cython/Compiler/FlowControl.py +1451 -0
  36. Cython/Compiler/FlowControl.pyd +0 -0
  37. Cython/Compiler/FusedNode.py +971 -0
  38. Cython/Compiler/FusedNode.pyd +0 -0
  39. Cython/Compiler/Future.py +16 -0
  40. Cython/Compiler/Interpreter.py +57 -0
  41. Cython/Compiler/Lexicon.py +421 -0
  42. Cython/Compiler/LineTable.py +114 -0
  43. Cython/Compiler/LineTable.pyd +0 -0
  44. Cython/Compiler/Main.py +857 -0
  45. Cython/Compiler/MatchCaseNodes.py +259 -0
  46. Cython/Compiler/MemoryView.py +905 -0
  47. Cython/Compiler/ModuleNode.py +4235 -0
  48. Cython/Compiler/Naming.py +363 -0
  49. Cython/Compiler/Nodes.py +10831 -0
  50. Cython/Compiler/Optimize.py +5288 -0
  51. Cython/Compiler/Options.py +843 -0
  52. Cython/Compiler/ParseTreeTransforms.pxd +78 -0
  53. Cython/Compiler/ParseTreeTransforms.py +4638 -0
  54. Cython/Compiler/Parsing.pxd +9 -0
  55. Cython/Compiler/Parsing.py +4775 -0
  56. Cython/Compiler/Parsing.pyd +0 -0
  57. Cython/Compiler/Pipeline.py +439 -0
  58. Cython/Compiler/PyrexTypes.py +5870 -0
  59. Cython/Compiler/Pythran.py +232 -0
  60. Cython/Compiler/Scanning.pxd +48 -0
  61. Cython/Compiler/Scanning.py +701 -0
  62. Cython/Compiler/Scanning.pyd +0 -0
  63. Cython/Compiler/StringEncoding.py +298 -0
  64. Cython/Compiler/Symtab.py +3073 -0
  65. Cython/Compiler/Tests/TestBuffer.py +105 -0
  66. Cython/Compiler/Tests/TestBuiltin.py +72 -0
  67. Cython/Compiler/Tests/TestCmdLine.py +586 -0
  68. Cython/Compiler/Tests/TestCode.py +144 -0
  69. Cython/Compiler/Tests/TestFlowControl.py +65 -0
  70. Cython/Compiler/Tests/TestGrammar.py +202 -0
  71. Cython/Compiler/Tests/TestMemView.py +71 -0
  72. Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
  73. Cython/Compiler/Tests/TestScanning.py +134 -0
  74. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  75. Cython/Compiler/Tests/TestStringEncoding.py +21 -0
  76. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  77. Cython/Compiler/Tests/TestTreePath.py +103 -0
  78. Cython/Compiler/Tests/TestTypes.py +75 -0
  79. Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
  80. Cython/Compiler/Tests/TestVisitor.py +61 -0
  81. Cython/Compiler/Tests/Utils.py +36 -0
  82. Cython/Compiler/Tests/__init__.py +1 -0
  83. Cython/Compiler/TreeFragment.py +278 -0
  84. Cython/Compiler/TreePath.py +303 -0
  85. Cython/Compiler/TypeInference.py +591 -0
  86. Cython/Compiler/TypeSlots.py +1174 -0
  87. Cython/Compiler/UFuncs.py +311 -0
  88. Cython/Compiler/UtilNodes.py +389 -0
  89. Cython/Compiler/UtilityCode.py +344 -0
  90. Cython/Compiler/Version.py +8 -0
  91. Cython/Compiler/Visitor.pxd +53 -0
  92. Cython/Compiler/Visitor.py +861 -0
  93. Cython/Compiler/Visitor.pyd +0 -0
  94. Cython/Compiler/__init__.py +1 -0
  95. Cython/Coverage.py +448 -0
  96. Cython/Debugger/Cygdb.py +177 -0
  97. Cython/Debugger/DebugWriter.py +82 -0
  98. Cython/Debugger/Tests/TestLibCython.py +275 -0
  99. Cython/Debugger/Tests/__init__.py +1 -0
  100. Cython/Debugger/Tests/cfuncs.c +8 -0
  101. Cython/Debugger/Tests/codefile +49 -0
  102. Cython/Debugger/Tests/test_libcython_in_gdb.py +578 -0
  103. Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
  104. Cython/Debugger/__init__.py +1 -0
  105. Cython/Debugger/libcython.py +1548 -0
  106. Cython/Debugger/libpython.py +2821 -0
  107. Cython/Debugging.py +20 -0
  108. Cython/Distutils/__init__.py +2 -0
  109. Cython/Distutils/build_ext.py +139 -0
  110. Cython/Distutils/extension.py +96 -0
  111. Cython/Distutils/old_build_ext.py +351 -0
  112. Cython/Includes/cpython/__init__.pxd +173 -0
  113. Cython/Includes/cpython/array.pxd +178 -0
  114. Cython/Includes/cpython/bool.pxd +37 -0
  115. Cython/Includes/cpython/buffer.pxd +112 -0
  116. Cython/Includes/cpython/bytearray.pxd +33 -0
  117. Cython/Includes/cpython/bytes.pxd +200 -0
  118. Cython/Includes/cpython/cellobject.pxd +35 -0
  119. Cython/Includes/cpython/ceval.pxd +8 -0
  120. Cython/Includes/cpython/codecs.pxd +121 -0
  121. Cython/Includes/cpython/complex.pxd +60 -0
  122. Cython/Includes/cpython/contextvars.pxd +145 -0
  123. Cython/Includes/cpython/conversion.pxd +36 -0
  124. Cython/Includes/cpython/datetime.pxd +395 -0
  125. Cython/Includes/cpython/descr.pxd +26 -0
  126. Cython/Includes/cpython/dict.pxd +187 -0
  127. Cython/Includes/cpython/exc.pxd +263 -0
  128. Cython/Includes/cpython/fileobject.pxd +57 -0
  129. Cython/Includes/cpython/float.pxd +47 -0
  130. Cython/Includes/cpython/function.pxd +65 -0
  131. Cython/Includes/cpython/genobject.pxd +25 -0
  132. Cython/Includes/cpython/getargs.pxd +12 -0
  133. Cython/Includes/cpython/instance.pxd +25 -0
  134. Cython/Includes/cpython/iterator.pxd +36 -0
  135. Cython/Includes/cpython/iterobject.pxd +24 -0
  136. Cython/Includes/cpython/list.pxd +92 -0
  137. Cython/Includes/cpython/long.pxd +149 -0
  138. Cython/Includes/cpython/longintrepr.pxd +14 -0
  139. Cython/Includes/cpython/mapping.pxd +63 -0
  140. Cython/Includes/cpython/marshal.pxd +66 -0
  141. Cython/Includes/cpython/mem.pxd +120 -0
  142. Cython/Includes/cpython/memoryview.pxd +50 -0
  143. Cython/Includes/cpython/method.pxd +49 -0
  144. Cython/Includes/cpython/module.pxd +208 -0
  145. Cython/Includes/cpython/number.pxd +258 -0
  146. Cython/Includes/cpython/object.pxd +433 -0
  147. Cython/Includes/cpython/pycapsule.pxd +143 -0
  148. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  149. Cython/Includes/cpython/pyport.pxd +8 -0
  150. Cython/Includes/cpython/pystate.pxd +95 -0
  151. Cython/Includes/cpython/pythread.pxd +53 -0
  152. Cython/Includes/cpython/ref.pxd +141 -0
  153. Cython/Includes/cpython/sequence.pxd +134 -0
  154. Cython/Includes/cpython/set.pxd +119 -0
  155. Cython/Includes/cpython/slice.pxd +70 -0
  156. Cython/Includes/cpython/time.pxd +129 -0
  157. Cython/Includes/cpython/tuple.pxd +72 -0
  158. Cython/Includes/cpython/type.pxd +53 -0
  159. Cython/Includes/cpython/unicode.pxd +639 -0
  160. Cython/Includes/cpython/version.pxd +32 -0
  161. Cython/Includes/cpython/weakref.pxd +78 -0
  162. Cython/Includes/libc/__init__.pxd +1 -0
  163. Cython/Includes/libc/complex.pxd +35 -0
  164. Cython/Includes/libc/errno.pxd +127 -0
  165. Cython/Includes/libc/float.pxd +43 -0
  166. Cython/Includes/libc/limits.pxd +28 -0
  167. Cython/Includes/libc/locale.pxd +46 -0
  168. Cython/Includes/libc/math.pxd +209 -0
  169. Cython/Includes/libc/setjmp.pxd +10 -0
  170. Cython/Includes/libc/signal.pxd +64 -0
  171. Cython/Includes/libc/stddef.pxd +9 -0
  172. Cython/Includes/libc/stdint.pxd +105 -0
  173. Cython/Includes/libc/stdio.pxd +80 -0
  174. Cython/Includes/libc/stdlib.pxd +72 -0
  175. Cython/Includes/libc/string.pxd +50 -0
  176. Cython/Includes/libc/threads.pxd +234 -0
  177. Cython/Includes/libc/time.pxd +52 -0
  178. Cython/Includes/libcpp/__init__.pxd +4 -0
  179. Cython/Includes/libcpp/algorithm.pxd +320 -0
  180. Cython/Includes/libcpp/any.pxd +16 -0
  181. Cython/Includes/libcpp/atomic.pxd +59 -0
  182. Cython/Includes/libcpp/barrier.pxd +22 -0
  183. Cython/Includes/libcpp/bit.pxd +29 -0
  184. Cython/Includes/libcpp/cast.pxd +12 -0
  185. Cython/Includes/libcpp/cmath.pxd +518 -0
  186. Cython/Includes/libcpp/complex.pxd +106 -0
  187. Cython/Includes/libcpp/condition_variable.pxd +322 -0
  188. Cython/Includes/libcpp/deque.pxd +165 -0
  189. Cython/Includes/libcpp/exception.pxd +86 -0
  190. Cython/Includes/libcpp/execution.pxd +15 -0
  191. Cython/Includes/libcpp/forward_list.pxd +63 -0
  192. Cython/Includes/libcpp/functional.pxd +26 -0
  193. Cython/Includes/libcpp/future.pxd +103 -0
  194. Cython/Includes/libcpp/iterator.pxd +34 -0
  195. Cython/Includes/libcpp/latch.pxd +17 -0
  196. Cython/Includes/libcpp/limits.pxd +61 -0
  197. Cython/Includes/libcpp/list.pxd +117 -0
  198. Cython/Includes/libcpp/map.pxd +252 -0
  199. Cython/Includes/libcpp/memory.pxd +115 -0
  200. Cython/Includes/libcpp/mutex.pxd +387 -0
  201. Cython/Includes/libcpp/numbers.pxd +15 -0
  202. Cython/Includes/libcpp/numeric.pxd +131 -0
  203. Cython/Includes/libcpp/optional.pxd +34 -0
  204. Cython/Includes/libcpp/pair.pxd +1 -0
  205. Cython/Includes/libcpp/queue.pxd +25 -0
  206. Cython/Includes/libcpp/random.pxd +166 -0
  207. Cython/Includes/libcpp/semaphore.pxd +43 -0
  208. Cython/Includes/libcpp/set.pxd +228 -0
  209. Cython/Includes/libcpp/shared_mutex.pxd +96 -0
  210. Cython/Includes/libcpp/span.pxd +87 -0
  211. Cython/Includes/libcpp/stack.pxd +11 -0
  212. Cython/Includes/libcpp/stop_token.pxd +117 -0
  213. Cython/Includes/libcpp/string.pxd +355 -0
  214. Cython/Includes/libcpp/string_view.pxd +183 -0
  215. Cython/Includes/libcpp/typeindex.pxd +15 -0
  216. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  217. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  218. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  219. Cython/Includes/libcpp/utility.pxd +30 -0
  220. Cython/Includes/libcpp/vector.pxd +186 -0
  221. Cython/Includes/numpy/math.pxd +150 -0
  222. Cython/Includes/openmp.pxd +50 -0
  223. Cython/Includes/posix/__init__.pxd +1 -0
  224. Cython/Includes/posix/dlfcn.pxd +14 -0
  225. Cython/Includes/posix/fcntl.pxd +86 -0
  226. Cython/Includes/posix/ioctl.pxd +4 -0
  227. Cython/Includes/posix/mman.pxd +101 -0
  228. Cython/Includes/posix/resource.pxd +57 -0
  229. Cython/Includes/posix/select.pxd +21 -0
  230. Cython/Includes/posix/signal.pxd +73 -0
  231. Cython/Includes/posix/stat.pxd +98 -0
  232. Cython/Includes/posix/stdio.pxd +37 -0
  233. Cython/Includes/posix/stdlib.pxd +29 -0
  234. Cython/Includes/posix/strings.pxd +9 -0
  235. Cython/Includes/posix/time.pxd +71 -0
  236. Cython/Includes/posix/types.pxd +30 -0
  237. Cython/Includes/posix/uio.pxd +26 -0
  238. Cython/Includes/posix/unistd.pxd +271 -0
  239. Cython/Includes/posix/wait.pxd +38 -0
  240. Cython/Plex/Actions.pxd +24 -0
  241. Cython/Plex/Actions.py +119 -0
  242. Cython/Plex/Actions.pyd +0 -0
  243. Cython/Plex/DFA.pxd +14 -0
  244. Cython/Plex/DFA.py +164 -0
  245. Cython/Plex/DFA.pyd +0 -0
  246. Cython/Plex/Errors.py +48 -0
  247. Cython/Plex/Lexicons.py +178 -0
  248. Cython/Plex/Machines.pxd +36 -0
  249. Cython/Plex/Machines.py +238 -0
  250. Cython/Plex/Machines.pyd +0 -0
  251. Cython/Plex/Regexps.py +535 -0
  252. Cython/Plex/Scanners.pxd +45 -0
  253. Cython/Plex/Scanners.py +328 -0
  254. Cython/Plex/Scanners.pyd +0 -0
  255. Cython/Plex/Transitions.pxd +14 -0
  256. Cython/Plex/Transitions.py +239 -0
  257. Cython/Plex/Transitions.pyd +0 -0
  258. Cython/Plex/__init__.py +34 -0
  259. Cython/Runtime/__init__.py +1 -0
  260. Cython/Runtime/refnanny.pyd +0 -0
  261. Cython/Runtime/refnanny.pyx +237 -0
  262. Cython/Shadow.py +690 -0
  263. Cython/Shadow.pyi +521 -0
  264. Cython/StringIOTree.py +170 -0
  265. Cython/StringIOTree.pyd +0 -0
  266. Cython/Tempita/__init__.py +4 -0
  267. Cython/Tempita/_looper.py +154 -0
  268. Cython/Tempita/_tempita.py +1091 -0
  269. Cython/Tempita/_tempita.pyd +0 -0
  270. Cython/TestUtils.py +422 -0
  271. Cython/Tests/TestCodeWriter.py +128 -0
  272. Cython/Tests/TestCythonUtils.py +202 -0
  273. Cython/Tests/TestJediTyper.py +223 -0
  274. Cython/Tests/TestShadow.py +114 -0
  275. Cython/Tests/TestStringIOTree.py +67 -0
  276. Cython/Tests/TestTestUtils.py +90 -0
  277. Cython/Tests/__init__.py +1 -0
  278. Cython/Tests/xmlrunner.py +390 -0
  279. Cython/Utility/AsyncGen.c +1031 -0
  280. Cython/Utility/Buffer.c +865 -0
  281. Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
  282. Cython/Utility/Builtins.c +810 -0
  283. Cython/Utility/CConvert.pyx +134 -0
  284. Cython/Utility/CMath.c +104 -0
  285. Cython/Utility/CommonStructures.c +226 -0
  286. Cython/Utility/Complex.c +378 -0
  287. Cython/Utility/Coroutine.c +2300 -0
  288. Cython/Utility/CpdefEnums.pyx +103 -0
  289. Cython/Utility/CppConvert.pyx +282 -0
  290. Cython/Utility/CppSupport.cpp +151 -0
  291. Cython/Utility/CythonFunction.c +1832 -0
  292. Cython/Utility/Dataclasses.c +101 -0
  293. Cython/Utility/Embed.c +121 -0
  294. Cython/Utility/Exceptions.c +1016 -0
  295. Cython/Utility/ExtensionTypes.c +996 -0
  296. Cython/Utility/FunctionArguments.c +1043 -0
  297. Cython/Utility/FusedFunction.pyx +44 -0
  298. Cython/Utility/ImportExport.c +907 -0
  299. Cython/Utility/MemoryView.pxd +188 -0
  300. Cython/Utility/MemoryView.pyx +1482 -0
  301. Cython/Utility/MemoryView_C.c +927 -0
  302. Cython/Utility/ModuleSetupCode.c +3203 -0
  303. Cython/Utility/NumpyImportArray.c +46 -0
  304. Cython/Utility/ObjectHandling.c +3273 -0
  305. Cython/Utility/Optimize.c +1603 -0
  306. Cython/Utility/Overflow.c +384 -0
  307. Cython/Utility/Printing.c +86 -0
  308. Cython/Utility/Profile.c +732 -0
  309. Cython/Utility/StringTools.c +1379 -0
  310. Cython/Utility/Synchronization.c +399 -0
  311. Cython/Utility/TString.c +356 -0
  312. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  313. Cython/Utility/TestCythonScope.pyx +75 -0
  314. Cython/Utility/TestUtilityLoader.c +12 -0
  315. Cython/Utility/TypeConversion.c +1385 -0
  316. Cython/Utility/UFuncs.pyx +50 -0
  317. Cython/Utility/UFuncs_C.c +89 -0
  318. Cython/Utility/__init__.py +28 -0
  319. Cython/Utility/arrayarray.h +167 -0
  320. Cython/Utils.py +687 -0
  321. Cython/Utils.pyd +0 -0
  322. Cython/__init__.py +10 -0
  323. Cython/__init__.pyi +7 -0
  324. Cython/py.typed +0 -0
  325. cython-3.2.0.dist-info/METADATA +85 -0
  326. cython-3.2.0.dist-info/RECORD +333 -0
  327. cython-3.2.0.dist-info/WHEEL +5 -0
  328. cython-3.2.0.dist-info/entry_points.txt +4 -0
  329. cython-3.2.0.dist-info/top_level.txt +3 -0
  330. cython.py +29 -0
  331. pyximport/__init__.py +4 -0
  332. pyximport/pyxbuild.py +160 -0
  333. 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 */