Cython 3.1.0__py3-none-any.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 (316) hide show
  1. Cython/Build/BuildExecutable.py +169 -0
  2. Cython/Build/Cache.py +199 -0
  3. Cython/Build/Cythonize.py +323 -0
  4. Cython/Build/Dependencies.py +1306 -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 +76 -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 +8 -0
  18. Cython/CodeWriter.py +811 -0
  19. Cython/Compiler/AnalysedTreeTransforms.py +97 -0
  20. Cython/Compiler/Annotate.py +326 -0
  21. Cython/Compiler/AutoDocTransforms.py +320 -0
  22. Cython/Compiler/Buffer.py +680 -0
  23. Cython/Compiler/Builtin.py +934 -0
  24. Cython/Compiler/CmdLine.py +259 -0
  25. Cython/Compiler/Code.pxd +148 -0
  26. Cython/Compiler/Code.py +3375 -0
  27. Cython/Compiler/CodeGeneration.py +33 -0
  28. Cython/Compiler/CythonScope.py +187 -0
  29. Cython/Compiler/Dataclass.py +868 -0
  30. Cython/Compiler/DebugFlags.py +24 -0
  31. Cython/Compiler/Errors.py +295 -0
  32. Cython/Compiler/ExprNodes.py +15267 -0
  33. Cython/Compiler/FlowControl.pxd +97 -0
  34. Cython/Compiler/FlowControl.py +1455 -0
  35. Cython/Compiler/FusedNode.py +1002 -0
  36. Cython/Compiler/Future.py +16 -0
  37. Cython/Compiler/Interpreter.py +57 -0
  38. Cython/Compiler/Lexicon.py +340 -0
  39. Cython/Compiler/LineTable.py +114 -0
  40. Cython/Compiler/Main.py +853 -0
  41. Cython/Compiler/MatchCaseNodes.py +259 -0
  42. Cython/Compiler/MemoryView.py +922 -0
  43. Cython/Compiler/ModuleNode.py +4024 -0
  44. Cython/Compiler/Naming.py +374 -0
  45. Cython/Compiler/Nodes.py +10826 -0
  46. Cython/Compiler/Optimize.py +5256 -0
  47. Cython/Compiler/Options.py +835 -0
  48. Cython/Compiler/ParseTreeTransforms.pxd +77 -0
  49. Cython/Compiler/ParseTreeTransforms.py +4509 -0
  50. Cython/Compiler/Parsing.pxd +9 -0
  51. Cython/Compiler/Parsing.py +4789 -0
  52. Cython/Compiler/Pipeline.py +439 -0
  53. Cython/Compiler/PyrexTypes.py +5762 -0
  54. Cython/Compiler/Pythran.py +232 -0
  55. Cython/Compiler/Scanning.pxd +40 -0
  56. Cython/Compiler/Scanning.py +577 -0
  57. Cython/Compiler/StringEncoding.py +347 -0
  58. Cython/Compiler/Symtab.py +3080 -0
  59. Cython/Compiler/Tests/TestBuffer.py +105 -0
  60. Cython/Compiler/Tests/TestBuiltin.py +72 -0
  61. Cython/Compiler/Tests/TestCmdLine.py +586 -0
  62. Cython/Compiler/Tests/TestCode.py +86 -0
  63. Cython/Compiler/Tests/TestFlowControl.py +65 -0
  64. Cython/Compiler/Tests/TestGrammar.py +202 -0
  65. Cython/Compiler/Tests/TestMemView.py +71 -0
  66. Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
  67. Cython/Compiler/Tests/TestScanning.py +134 -0
  68. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  69. Cython/Compiler/Tests/TestStringEncoding.py +33 -0
  70. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  71. Cython/Compiler/Tests/TestTreePath.py +103 -0
  72. Cython/Compiler/Tests/TestTypes.py +75 -0
  73. Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
  74. Cython/Compiler/Tests/TestVisitor.py +61 -0
  75. Cython/Compiler/Tests/Utils.py +36 -0
  76. Cython/Compiler/Tests/__init__.py +1 -0
  77. Cython/Compiler/TreeFragment.py +278 -0
  78. Cython/Compiler/TreePath.py +303 -0
  79. Cython/Compiler/TypeInference.py +584 -0
  80. Cython/Compiler/TypeSlots.py +1181 -0
  81. Cython/Compiler/UFuncs.py +311 -0
  82. Cython/Compiler/UtilNodes.py +389 -0
  83. Cython/Compiler/UtilityCode.py +344 -0
  84. Cython/Compiler/Version.py +8 -0
  85. Cython/Compiler/Visitor.pxd +53 -0
  86. Cython/Compiler/Visitor.py +861 -0
  87. Cython/Compiler/__init__.py +1 -0
  88. Cython/Coverage.py +448 -0
  89. Cython/Debugger/Cygdb.py +175 -0
  90. Cython/Debugger/DebugWriter.py +82 -0
  91. Cython/Debugger/Tests/TestLibCython.py +275 -0
  92. Cython/Debugger/Tests/__init__.py +1 -0
  93. Cython/Debugger/Tests/cfuncs.c +8 -0
  94. Cython/Debugger/Tests/codefile +49 -0
  95. Cython/Debugger/Tests/test_libcython_in_gdb.py +578 -0
  96. Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
  97. Cython/Debugger/__init__.py +1 -0
  98. Cython/Debugger/libcython.py +1548 -0
  99. Cython/Debugger/libpython.py +2821 -0
  100. Cython/Debugging.py +20 -0
  101. Cython/Distutils/__init__.py +2 -0
  102. Cython/Distutils/build_ext.py +139 -0
  103. Cython/Distutils/extension.py +96 -0
  104. Cython/Distutils/old_build_ext.py +351 -0
  105. Cython/Includes/cpython/__init__.pxd +173 -0
  106. Cython/Includes/cpython/array.pxd +174 -0
  107. Cython/Includes/cpython/bool.pxd +37 -0
  108. Cython/Includes/cpython/buffer.pxd +112 -0
  109. Cython/Includes/cpython/bytearray.pxd +33 -0
  110. Cython/Includes/cpython/bytes.pxd +200 -0
  111. Cython/Includes/cpython/cellobject.pxd +35 -0
  112. Cython/Includes/cpython/ceval.pxd +8 -0
  113. Cython/Includes/cpython/codecs.pxd +121 -0
  114. Cython/Includes/cpython/complex.pxd +60 -0
  115. Cython/Includes/cpython/contextvars.pxd +145 -0
  116. Cython/Includes/cpython/conversion.pxd +36 -0
  117. Cython/Includes/cpython/datetime.pxd +395 -0
  118. Cython/Includes/cpython/descr.pxd +26 -0
  119. Cython/Includes/cpython/dict.pxd +187 -0
  120. Cython/Includes/cpython/exc.pxd +263 -0
  121. Cython/Includes/cpython/fileobject.pxd +57 -0
  122. Cython/Includes/cpython/float.pxd +47 -0
  123. Cython/Includes/cpython/function.pxd +65 -0
  124. Cython/Includes/cpython/genobject.pxd +25 -0
  125. Cython/Includes/cpython/getargs.pxd +12 -0
  126. Cython/Includes/cpython/instance.pxd +25 -0
  127. Cython/Includes/cpython/iterator.pxd +36 -0
  128. Cython/Includes/cpython/iterobject.pxd +24 -0
  129. Cython/Includes/cpython/list.pxd +92 -0
  130. Cython/Includes/cpython/long.pxd +149 -0
  131. Cython/Includes/cpython/longintrepr.pxd +14 -0
  132. Cython/Includes/cpython/mapping.pxd +63 -0
  133. Cython/Includes/cpython/marshal.pxd +66 -0
  134. Cython/Includes/cpython/mem.pxd +120 -0
  135. Cython/Includes/cpython/memoryview.pxd +50 -0
  136. Cython/Includes/cpython/method.pxd +49 -0
  137. Cython/Includes/cpython/module.pxd +208 -0
  138. Cython/Includes/cpython/number.pxd +258 -0
  139. Cython/Includes/cpython/object.pxd +433 -0
  140. Cython/Includes/cpython/pycapsule.pxd +143 -0
  141. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  142. Cython/Includes/cpython/pyport.pxd +8 -0
  143. Cython/Includes/cpython/pystate.pxd +95 -0
  144. Cython/Includes/cpython/pythread.pxd +53 -0
  145. Cython/Includes/cpython/ref.pxd +67 -0
  146. Cython/Includes/cpython/sequence.pxd +134 -0
  147. Cython/Includes/cpython/set.pxd +119 -0
  148. Cython/Includes/cpython/slice.pxd +70 -0
  149. Cython/Includes/cpython/time.pxd +129 -0
  150. Cython/Includes/cpython/tuple.pxd +72 -0
  151. Cython/Includes/cpython/type.pxd +53 -0
  152. Cython/Includes/cpython/unicode.pxd +639 -0
  153. Cython/Includes/cpython/version.pxd +32 -0
  154. Cython/Includes/cpython/weakref.pxd +78 -0
  155. Cython/Includes/libc/__init__.pxd +1 -0
  156. Cython/Includes/libc/complex.pxd +35 -0
  157. Cython/Includes/libc/errno.pxd +127 -0
  158. Cython/Includes/libc/float.pxd +43 -0
  159. Cython/Includes/libc/limits.pxd +28 -0
  160. Cython/Includes/libc/locale.pxd +46 -0
  161. Cython/Includes/libc/math.pxd +209 -0
  162. Cython/Includes/libc/setjmp.pxd +10 -0
  163. Cython/Includes/libc/signal.pxd +64 -0
  164. Cython/Includes/libc/stddef.pxd +9 -0
  165. Cython/Includes/libc/stdint.pxd +105 -0
  166. Cython/Includes/libc/stdio.pxd +80 -0
  167. Cython/Includes/libc/stdlib.pxd +72 -0
  168. Cython/Includes/libc/string.pxd +50 -0
  169. Cython/Includes/libc/threads.pxd +84 -0
  170. Cython/Includes/libc/time.pxd +51 -0
  171. Cython/Includes/libcpp/__init__.pxd +4 -0
  172. Cython/Includes/libcpp/algorithm.pxd +320 -0
  173. Cython/Includes/libcpp/any.pxd +16 -0
  174. Cython/Includes/libcpp/atomic.pxd +59 -0
  175. Cython/Includes/libcpp/barrier.pxd +22 -0
  176. Cython/Includes/libcpp/bit.pxd +29 -0
  177. Cython/Includes/libcpp/cast.pxd +12 -0
  178. Cython/Includes/libcpp/cmath.pxd +518 -0
  179. Cython/Includes/libcpp/complex.pxd +106 -0
  180. Cython/Includes/libcpp/deque.pxd +165 -0
  181. Cython/Includes/libcpp/exception.pxd +86 -0
  182. Cython/Includes/libcpp/execution.pxd +15 -0
  183. Cython/Includes/libcpp/forward_list.pxd +63 -0
  184. Cython/Includes/libcpp/functional.pxd +26 -0
  185. Cython/Includes/libcpp/future.pxd +103 -0
  186. Cython/Includes/libcpp/iterator.pxd +34 -0
  187. Cython/Includes/libcpp/latch.pxd +17 -0
  188. Cython/Includes/libcpp/limits.pxd +61 -0
  189. Cython/Includes/libcpp/list.pxd +117 -0
  190. Cython/Includes/libcpp/map.pxd +252 -0
  191. Cython/Includes/libcpp/memory.pxd +115 -0
  192. Cython/Includes/libcpp/mutex.pxd +130 -0
  193. Cython/Includes/libcpp/numbers.pxd +15 -0
  194. Cython/Includes/libcpp/numeric.pxd +131 -0
  195. Cython/Includes/libcpp/optional.pxd +34 -0
  196. Cython/Includes/libcpp/pair.pxd +1 -0
  197. Cython/Includes/libcpp/queue.pxd +25 -0
  198. Cython/Includes/libcpp/random.pxd +166 -0
  199. Cython/Includes/libcpp/semaphore.pxd +44 -0
  200. Cython/Includes/libcpp/set.pxd +228 -0
  201. Cython/Includes/libcpp/shared_mutex.pxd +72 -0
  202. Cython/Includes/libcpp/span.pxd +87 -0
  203. Cython/Includes/libcpp/stack.pxd +11 -0
  204. Cython/Includes/libcpp/stop_token.pxd +105 -0
  205. Cython/Includes/libcpp/string.pxd +355 -0
  206. Cython/Includes/libcpp/string_view.pxd +181 -0
  207. Cython/Includes/libcpp/typeindex.pxd +15 -0
  208. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  209. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  210. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  211. Cython/Includes/libcpp/utility.pxd +30 -0
  212. Cython/Includes/libcpp/vector.pxd +186 -0
  213. Cython/Includes/openmp.pxd +50 -0
  214. Cython/Includes/posix/__init__.pxd +1 -0
  215. Cython/Includes/posix/dlfcn.pxd +14 -0
  216. Cython/Includes/posix/fcntl.pxd +86 -0
  217. Cython/Includes/posix/ioctl.pxd +4 -0
  218. Cython/Includes/posix/mman.pxd +101 -0
  219. Cython/Includes/posix/resource.pxd +57 -0
  220. Cython/Includes/posix/select.pxd +21 -0
  221. Cython/Includes/posix/signal.pxd +73 -0
  222. Cython/Includes/posix/stat.pxd +98 -0
  223. Cython/Includes/posix/stdio.pxd +37 -0
  224. Cython/Includes/posix/stdlib.pxd +29 -0
  225. Cython/Includes/posix/strings.pxd +9 -0
  226. Cython/Includes/posix/time.pxd +71 -0
  227. Cython/Includes/posix/types.pxd +30 -0
  228. Cython/Includes/posix/uio.pxd +26 -0
  229. Cython/Includes/posix/unistd.pxd +271 -0
  230. Cython/Includes/posix/wait.pxd +38 -0
  231. Cython/Plex/Actions.pxd +24 -0
  232. Cython/Plex/Actions.py +119 -0
  233. Cython/Plex/DFA.pxd +14 -0
  234. Cython/Plex/DFA.py +164 -0
  235. Cython/Plex/Errors.py +48 -0
  236. Cython/Plex/Lexicons.py +178 -0
  237. Cython/Plex/Machines.pxd +36 -0
  238. Cython/Plex/Machines.py +238 -0
  239. Cython/Plex/Regexps.py +539 -0
  240. Cython/Plex/Scanners.pxd +47 -0
  241. Cython/Plex/Scanners.py +360 -0
  242. Cython/Plex/Transitions.pxd +14 -0
  243. Cython/Plex/Transitions.py +239 -0
  244. Cython/Plex/__init__.py +34 -0
  245. Cython/Runtime/__init__.py +1 -0
  246. Cython/Runtime/refnanny.pyx +237 -0
  247. Cython/Shadow.py +690 -0
  248. Cython/Shadow.pyi +521 -0
  249. Cython/StringIOTree.py +170 -0
  250. Cython/Tempita/__init__.py +4 -0
  251. Cython/Tempita/_looper.py +154 -0
  252. Cython/Tempita/_tempita.py +1091 -0
  253. Cython/TestUtils.py +410 -0
  254. Cython/Tests/TestCodeWriter.py +128 -0
  255. Cython/Tests/TestCythonUtils.py +202 -0
  256. Cython/Tests/TestJediTyper.py +223 -0
  257. Cython/Tests/TestShadow.py +114 -0
  258. Cython/Tests/TestStringIOTree.py +67 -0
  259. Cython/Tests/TestTestUtils.py +90 -0
  260. Cython/Tests/__init__.py +1 -0
  261. Cython/Tests/xmlrunner.py +390 -0
  262. Cython/Utility/AsyncGen.c +1002 -0
  263. Cython/Utility/Buffer.c +875 -0
  264. Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
  265. Cython/Utility/Builtins.c +776 -0
  266. Cython/Utility/CConvert.pyx +134 -0
  267. Cython/Utility/CMath.c +104 -0
  268. Cython/Utility/CommonStructures.c +118 -0
  269. Cython/Utility/Complex.c +378 -0
  270. Cython/Utility/Coroutine.c +2206 -0
  271. Cython/Utility/CpdefEnums.pyx +103 -0
  272. Cython/Utility/CppConvert.pyx +279 -0
  273. Cython/Utility/CppSupport.cpp +143 -0
  274. Cython/Utility/CythonFunction.c +1794 -0
  275. Cython/Utility/Dataclasses.c +185 -0
  276. Cython/Utility/Dataclasses.py +112 -0
  277. Cython/Utility/Embed.c +125 -0
  278. Cython/Utility/Exceptions.c +1012 -0
  279. Cython/Utility/ExtensionTypes.c +809 -0
  280. Cython/Utility/FunctionArguments.c +965 -0
  281. Cython/Utility/ImportExport.c +987 -0
  282. Cython/Utility/Lock.c +136 -0
  283. Cython/Utility/MemoryView.pxd +187 -0
  284. Cython/Utility/MemoryView.pyx +1481 -0
  285. Cython/Utility/MemoryView_C.c +1046 -0
  286. Cython/Utility/ModuleSetupCode.c +3059 -0
  287. Cython/Utility/NumpyImportArray.c +46 -0
  288. Cython/Utility/ObjectHandling.c +3342 -0
  289. Cython/Utility/Optimize.c +1589 -0
  290. Cython/Utility/Overflow.c +404 -0
  291. Cython/Utility/Printing.c +86 -0
  292. Cython/Utility/Profile.c +709 -0
  293. Cython/Utility/StringTools.c +1259 -0
  294. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  295. Cython/Utility/TestCythonScope.pyx +75 -0
  296. Cython/Utility/TestUtilityLoader.c +12 -0
  297. Cython/Utility/TypeConversion.c +1284 -0
  298. Cython/Utility/UFuncs.pyx +50 -0
  299. Cython/Utility/UFuncs_C.c +89 -0
  300. Cython/Utility/__init__.py +28 -0
  301. Cython/Utility/arrayarray.h +148 -0
  302. Cython/Utils.py +687 -0
  303. Cython/__init__.py +10 -0
  304. Cython/__init__.pyi +7 -0
  305. Cython/py.typed +0 -0
  306. cython-3.1.0.dist-info/COPYING.txt +19 -0
  307. cython-3.1.0.dist-info/LICENSE.txt +176 -0
  308. cython-3.1.0.dist-info/METADATA +636 -0
  309. cython-3.1.0.dist-info/RECORD +316 -0
  310. cython-3.1.0.dist-info/WHEEL +5 -0
  311. cython-3.1.0.dist-info/entry_points.txt +4 -0
  312. cython-3.1.0.dist-info/top_level.txt +3 -0
  313. cython.py +29 -0
  314. pyximport/__init__.py +4 -0
  315. pyximport/pyxbuild.py +160 -0
  316. pyximport/pyximport.py +482 -0
@@ -0,0 +1,185 @@
1
+ ///////////////////// ModuleLoader.proto //////////////////////////
2
+
3
+ static PyObject* __Pyx_LoadInternalModule(const char* name, const char* fallback_code); /* proto */
4
+
5
+ //////////////////// ModuleLoader ///////////////////////
6
+ //@requires: CommonStructures.c::FetchSharedCythonModule
7
+
8
+ static PyObject* __Pyx_LoadInternalModule(const char* name, const char* fallback_code) {
9
+ // We want to be able to use the contents of the standard library dataclasses module where available.
10
+ // If those objects aren't available (due to Python version) then a simple fallback is substituted
11
+ // instead, which largely just fails with a not-implemented error.
12
+ //
13
+ // The fallbacks are placed in the "shared abi module" as a convenient internal place to
14
+ // store them
15
+
16
+ PyObject *shared_abi_module = 0, *module = 0;
17
+ #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
18
+ PyObject *result;
19
+ #endif
20
+
21
+ shared_abi_module = __Pyx_FetchSharedCythonABIModule();
22
+ if (!shared_abi_module) return NULL;
23
+
24
+ #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
25
+ if (PyObject_GetOptionalAttrString(shared_abi_module, name, &result) != 0) {
26
+ Py_DECREF(shared_abi_module);
27
+ return result;
28
+ }
29
+ #else
30
+ if (PyObject_HasAttrString(shared_abi_module, name)) {
31
+ PyObject* result = PyObject_GetAttrString(shared_abi_module, name);
32
+ Py_DECREF(shared_abi_module);
33
+ return result;
34
+ }
35
+ #endif
36
+
37
+ // the best and simplest case is simply to defer to the standard library (if available)
38
+ module = PyImport_ImportModule(name);
39
+ if (!module) {
40
+ PyObject *localDict, *runValue, *builtins, *modulename;
41
+ if (!PyErr_ExceptionMatches(PyExc_ImportError)) goto bad;
42
+ PyErr_Clear(); /* this is reasonably likely (especially on older versions of Python) */
43
+ modulename = PyUnicode_FromFormat("_cython_" CYTHON_ABI ".%s", name);
44
+ if (!modulename) goto bad;
45
+ #if CYTHON_COMPILING_IN_CPYTHON
46
+ module = PyImport_AddModuleObject(modulename); /* borrowed */
47
+ #else
48
+ module = PyImport_AddModule(PyBytes_AsString(modulename)); /* borrowed */
49
+ #endif
50
+ Py_DECREF(modulename);
51
+ if (!module) goto bad;
52
+ Py_INCREF(module);
53
+ if (PyObject_SetAttrString(shared_abi_module, name, module) < 0) goto bad;
54
+ localDict = PyModule_GetDict(module); /* borrowed */
55
+ if (!localDict) goto bad;
56
+ builtins = PyEval_GetBuiltins(); /* borrowed */
57
+ if (!builtins) goto bad;
58
+ if (PyDict_SetItemString(localDict, "__builtins__", builtins) <0) goto bad;
59
+
60
+ #if CYTHON_COMPILING_IN_LIMITED_API
61
+ {
62
+ PyObject *compiled = Py_CompileString(fallback_code, "<dataclass fallback code>", Py_file_input);
63
+ if (!compiled) goto bad;
64
+ runValue = PyEval_EvalCode(compiled, localDict, localDict);
65
+ Py_DECREF(compiled);
66
+ }
67
+ #else
68
+ runValue = PyRun_String(fallback_code, Py_file_input, localDict, localDict);
69
+ #endif
70
+ if (!runValue) goto bad;
71
+ Py_DECREF(runValue);
72
+ }
73
+ goto shared_cleanup;
74
+
75
+ bad:
76
+ Py_CLEAR(module);
77
+ shared_cleanup:
78
+ Py_XDECREF(shared_abi_module);
79
+ return module;
80
+ }
81
+
82
+ ///////////////////// SpecificModuleLoader.proto //////////////////////
83
+ //@substitute: tempita
84
+
85
+ static PyObject* __Pyx_Load_{{cname}}_Module(void); /* proto */
86
+
87
+
88
+ //////////////////// SpecificModuleLoader ///////////////////////
89
+ //@requires: ModuleLoader
90
+
91
+ static PyObject* __Pyx_Load_{{cname}}_Module(void) {
92
+ return __Pyx_LoadInternalModule("{{cname}}", {{py_code}});
93
+ }
94
+
95
+ //////////////////// DataclassesCallHelper.proto ////////////////////////
96
+
97
+ static PyObject* __Pyx_DataclassesCallHelper(PyObject *callable, PyObject *kwds); /* proto */
98
+
99
+ //////////////////// DataclassesCallHelper ////////////////////////
100
+
101
+ // The signature of a few of the dataclasses module functions has
102
+ // been expanded over the years. Cython always passes the full set
103
+ // of arguments from the most recent version we know of, so needs
104
+ // to remove any arguments that don't exist on earlier versions.
105
+
106
+ static int __Pyx_DataclassesCallHelper_FilterToDict(PyObject *callable, PyObject *kwds, PyObject *new_kwds, PyObject *args_list, int is_kwonly) {
107
+ Py_ssize_t size, i;
108
+ size = PySequence_Size(args_list);
109
+ if (unlikely(size < 0)) return -1;
110
+
111
+ for (i=0; i<size; ++i) {
112
+ PyObject *key, *value;
113
+ int setitem_result;
114
+ key = PySequence_GetItem(args_list, i);
115
+ if (!key) return -1;
116
+
117
+ if (PyUnicode_Check(key) && (
118
+ PyUnicode_CompareWithASCIIString(key, "self") == 0 ||
119
+ // namedtuple constructor in fallback code
120
+ PyUnicode_CompareWithASCIIString(key, "_cls") == 0)) {
121
+ Py_DECREF(key);
122
+ continue;
123
+ }
124
+
125
+ value = PyDict_GetItem(kwds, key);
126
+ if (!value) {
127
+ if (is_kwonly) {
128
+ Py_DECREF(key);
129
+ continue;
130
+ } else {
131
+ // The most likely reason for this is that Cython
132
+ // hasn't kept up to date with the Python dataclasses module.
133
+ // To be nice to our users, try not to fail, but ask them
134
+ // to report a bug so we can keep up to date.
135
+ value = Py_None;
136
+ if (PyErr_WarnFormat(
137
+ PyExc_RuntimeWarning, 1,
138
+ "Argument %S not passed to %R. This is likely a bug in Cython so please report it.",
139
+ key, callable) == -1) {
140
+ Py_DECREF(key);
141
+ return -1;
142
+ }
143
+ }
144
+ }
145
+ Py_INCREF(value);
146
+ setitem_result = PyDict_SetItem(new_kwds, key, value);
147
+ Py_DECREF(key);
148
+ Py_DECREF(value);
149
+ if (setitem_result == -1) return -1;
150
+ }
151
+ return 0;
152
+ }
153
+
154
+ static PyObject* __Pyx_DataclassesCallHelper(PyObject *callable, PyObject *kwds) {
155
+ PyObject *new_kwds=NULL, *result=NULL;
156
+ PyObject *inspect;
157
+ PyObject *args_list=NULL, *kwonly_args_list=NULL, *getfullargspec_result=NULL;
158
+
159
+ // Going via inspect to work out what arguments to pass is unlikely to be the
160
+ // fastest thing ever. However, it is compatible, and only happens once
161
+ // at module-import time.
162
+ inspect = PyImport_ImportModule("inspect");
163
+ if (!inspect) goto bad;
164
+ getfullargspec_result = PyObject_CallMethodObjArgs(inspect, PYUNICODE("getfullargspec"), callable, NULL);
165
+ Py_DECREF(inspect);
166
+ if (!getfullargspec_result) goto bad;
167
+ args_list = PyObject_GetAttrString(getfullargspec_result, "args");
168
+ if (!args_list) goto bad;
169
+ kwonly_args_list = PyObject_GetAttrString(getfullargspec_result, "kwonlyargs");
170
+ if (!kwonly_args_list) goto bad;
171
+
172
+ new_kwds = PyDict_New();
173
+ if (!new_kwds) goto bad;
174
+
175
+ // copy over only those arguments that are in the specification
176
+ if (__Pyx_DataclassesCallHelper_FilterToDict(callable, kwds, new_kwds, args_list, 0) == -1) goto bad;
177
+ if (__Pyx_DataclassesCallHelper_FilterToDict(callable, kwds, new_kwds, kwonly_args_list, 1) == -1) goto bad;
178
+ result = PyObject_Call(callable, EMPTY(tuple), new_kwds);
179
+ bad:
180
+ Py_XDECREF(getfullargspec_result);
181
+ Py_XDECREF(args_list);
182
+ Py_XDECREF(kwonly_args_list);
183
+ Py_XDECREF(new_kwds);
184
+ return result;
185
+ }
@@ -0,0 +1,112 @@
1
+ ################### Dataclasses_fallback ###############################
2
+
3
+ # This is the fallback dataclass code if the stdlib module isn't available.
4
+ # It defines enough of the support types to be used with cdef classes
5
+ # and to fail if used on regular types.
6
+
7
+ # (Intended to be included as py code - not compiled)
8
+
9
+ from collections import namedtuple
10
+ try:
11
+ from types import MappingProxyType
12
+ except ImportError:
13
+ # mutable fallback if unavailable
14
+ MappingProxyType = lambda x: x
15
+
16
+ class _MISSING_TYPE:
17
+ pass
18
+ MISSING = _MISSING_TYPE()
19
+
20
+ _DataclassParams = namedtuple('_DataclassParams',
21
+ ["init", "repr", "eq", "order", "unsafe_hash", "frozen",
22
+ "match_args", "kw_only", "slots", "weakref_slot"])
23
+ class Field:
24
+ __slots__ = ('name',
25
+ 'type',
26
+ 'default',
27
+ 'default_factory',
28
+ 'repr',
29
+ 'hash',
30
+ 'init',
31
+ 'compare',
32
+ 'metadata',
33
+ 'kw_only',
34
+ '_field_type', # Private: not to be used by user code.
35
+ )
36
+
37
+ def __init__(self, default, default_factory, init, repr, hash, compare,
38
+ metadata, kw_only):
39
+ self.name = None
40
+ self.type = None
41
+ self.default = default
42
+ self.default_factory = default_factory
43
+ self.init = init
44
+ self.repr = repr
45
+ self.hash = hash
46
+ self.compare = compare
47
+ # Be aware that if MappingProxyType is unavailable (i.e. py2?) then we
48
+ # don't enforce non-mutability that the real module does
49
+ self.metadata = (MappingProxyType({})
50
+ if metadata is None else
51
+ MappingProxyType(metadata))
52
+ self.kw_only = kw_only
53
+ self._field_type = None
54
+
55
+ def __repr__(self):
56
+ return ('Field('
57
+ 'name={!r},'
58
+ 'type={!r},'
59
+ 'default={!r},'
60
+ 'default_factory={!r},'
61
+ 'init={!r},'
62
+ 'repr={!r},'
63
+ 'hash={!r},'
64
+ 'compare={!r},'
65
+ 'metadata={!r},'
66
+ 'kwonly={!r},'
67
+ ')'.format(self.name, self.type, self.default,
68
+ self.default_factory, self.init,
69
+ self.repr, self.hash, self.compare,
70
+ self.metadata, self.kw_only))
71
+
72
+ # A sentinel object for default values to signal that a default
73
+ # factory will be used. This is given a nice repr() which will appear
74
+ # in the function signature of dataclasses' constructors.
75
+ class _HAS_DEFAULT_FACTORY_CLASS:
76
+ def __repr__(self):
77
+ return '<factory>'
78
+ _HAS_DEFAULT_FACTORY = _HAS_DEFAULT_FACTORY_CLASS()
79
+
80
+ def dataclass(*args, **kwds):
81
+ raise NotImplementedError("Standard library 'dataclasses' module"
82
+ "is unavailable, likely due to the version of Python you're using.")
83
+
84
+ # Markers for the various kinds of fields and pseudo-fields.
85
+ class _FIELD_BASE:
86
+ def __init__(self, name):
87
+ self.name = name
88
+ def __repr__(self):
89
+ return self.name
90
+ _FIELD = _FIELD_BASE('_FIELD')
91
+ _FIELD_CLASSVAR = _FIELD_BASE('_FIELD_CLASSVAR')
92
+ _FIELD_INITVAR = _FIELD_BASE('_FIELD_INITVAR')
93
+
94
+ def field(*ignore, **kwds):
95
+ default = kwds.pop("default", MISSING)
96
+ default_factory = kwds.pop("default_factory", MISSING)
97
+ init = kwds.pop("init", True)
98
+ repr = kwds.pop("repr", True)
99
+ hash = kwds.pop("hash", None)
100
+ compare = kwds.pop("compare", True)
101
+ metadata = kwds.pop("metadata", None)
102
+ kw_only = kwds.pop("kw_only", None)
103
+
104
+ if kwds:
105
+ raise ValueError("field received unexpected keyword arguments: %s"
106
+ % list(kwds.keys()))
107
+ if default is not MISSING and default_factory is not MISSING:
108
+ raise ValueError('cannot specify both default and default_factory')
109
+ if ignore:
110
+ raise ValueError("'field' does not take any positional arguments")
111
+ return Field(default, default_factory, init,
112
+ repr, hash, compare, metadata, kw_only)
Cython/Utility/Embed.c ADDED
@@ -0,0 +1,125 @@
1
+ //////////////////// MainFunction ////////////////////
2
+
3
+ #ifdef __FreeBSD__
4
+ #include <floatingpoint.h>
5
+ #endif
6
+
7
+ #if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
8
+ int %(wmain_method)s(int argc, wchar_t **argv)
9
+ #else
10
+ static int __Pyx_main(int argc, wchar_t **argv)
11
+ #endif
12
+ {
13
+ /* 754 requires that FP exceptions run in "no stop" mode by default,
14
+ * and until C vendors implement C99's ways to control FP exceptions,
15
+ * Python requires non-stop mode. Alas, some platforms enable FP
16
+ * exceptions by default. Here we disable them.
17
+ */
18
+ #ifdef __FreeBSD__
19
+ fp_except_t m;
20
+
21
+ m = fpgetmask();
22
+ fpsetmask(m & ~FP_X_OFL);
23
+ #endif
24
+ #if PY_VERSION_HEX < 0x03080000
25
+ if (argc && argv)
26
+ Py_SetProgramName(argv[0]);
27
+ #endif
28
+
29
+ if (PyImport_AppendInittab("%(module_name)s", PyInit_%(module_name)s) < 0) return 1;
30
+
31
+ #if PY_VERSION_HEX < 0x03080000
32
+ Py_Initialize();
33
+ if (argc && argv)
34
+ PySys_SetArgv(argc, argv);
35
+ #else
36
+ {
37
+ PyStatus status;
38
+
39
+ PyConfig config;
40
+ PyConfig_InitPythonConfig(&config);
41
+ // Disable parsing command line arguments
42
+ config.parse_argv = 0;
43
+
44
+ if (argc && argv) {
45
+ status = PyConfig_SetString(&config, &config.program_name, argv[0]);
46
+ if (PyStatus_Exception(status)) {
47
+ PyConfig_Clear(&config);
48
+ return 1;
49
+ }
50
+
51
+ status = PyConfig_SetArgv(&config, argc, argv);
52
+ if (PyStatus_Exception(status)) {
53
+ PyConfig_Clear(&config);
54
+ return 1;
55
+ }
56
+ }
57
+
58
+ status = Py_InitializeFromConfig(&config);
59
+ if (PyStatus_Exception(status)) {
60
+ PyConfig_Clear(&config);
61
+ return 1;
62
+ }
63
+
64
+ PyConfig_Clear(&config);
65
+ }
66
+ #endif
67
+
68
+ { /* init module '%(module_name)s' as '__main__' */
69
+ PyObject* m = NULL;
70
+ %(module_is_main)s = 1;
71
+ m = PyImport_ImportModule("%(module_name)s");
72
+
73
+ if (!m && PyErr_Occurred()) {
74
+ PyErr_Print(); /* This exits with the right code if SystemExit. */
75
+ return 1;
76
+ }
77
+ Py_XDECREF(m);
78
+ }
79
+ if (Py_FinalizeEx() < 0)
80
+ return 2;
81
+ return 0;
82
+ }
83
+
84
+
85
+ #if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS)
86
+ #include <locale.h>
87
+
88
+ int
89
+ %(main_method)s(int argc, char **argv)
90
+ {
91
+ if (!argc) {
92
+ return __Pyx_main(0, NULL);
93
+ }
94
+ else {
95
+ int i, res;
96
+ wchar_t **argv_copy = (wchar_t **)malloc(sizeof(wchar_t*)*argc);
97
+ /* We need a second copy, as Python might modify the first one. */
98
+ wchar_t **argv_copy2 = (wchar_t **)malloc(sizeof(wchar_t*)*argc);
99
+ char *oldloc = strdup(setlocale(LC_ALL, NULL));
100
+ if (!argv_copy || !argv_copy2 || !oldloc) {
101
+ fprintf(stderr, "out of memory\\n");
102
+ free(argv_copy);
103
+ free(argv_copy2);
104
+ free(oldloc);
105
+ return 1;
106
+ }
107
+ res = 0;
108
+ setlocale(LC_ALL, "");
109
+ for (i = 0; i < argc; i++) {
110
+ argv_copy2[i] = argv_copy[i] = Py_DecodeLocale(argv[i], NULL);
111
+ if (!argv_copy[i]) res = 1; /* failure, but continue to simplify cleanup */
112
+ }
113
+ setlocale(LC_ALL, oldloc);
114
+ free(oldloc);
115
+ if (res == 0)
116
+ res = __Pyx_main(argc, argv_copy);
117
+ for (i = 0; i < argc; i++) {
118
+ PyMem_RawFree(argv_copy2[i]);
119
+ }
120
+ free(argv_copy);
121
+ free(argv_copy2);
122
+ return res;
123
+ }
124
+ }
125
+ #endif