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.
- Cython/Build/BuildExecutable.py +169 -0
- Cython/Build/Cache.py +199 -0
- Cython/Build/Cythonize.py +323 -0
- Cython/Build/Dependencies.py +1306 -0
- Cython/Build/Distutils.py +1 -0
- Cython/Build/Inline.py +463 -0
- Cython/Build/IpythonMagic.py +560 -0
- Cython/Build/SharedModule.py +76 -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 +8 -0
- Cython/CodeWriter.py +811 -0
- Cython/Compiler/AnalysedTreeTransforms.py +97 -0
- Cython/Compiler/Annotate.py +326 -0
- Cython/Compiler/AutoDocTransforms.py +320 -0
- Cython/Compiler/Buffer.py +680 -0
- Cython/Compiler/Builtin.py +934 -0
- Cython/Compiler/CmdLine.py +259 -0
- Cython/Compiler/Code.pxd +148 -0
- Cython/Compiler/Code.py +3375 -0
- Cython/Compiler/CodeGeneration.py +33 -0
- Cython/Compiler/CythonScope.py +187 -0
- Cython/Compiler/Dataclass.py +868 -0
- Cython/Compiler/DebugFlags.py +24 -0
- Cython/Compiler/Errors.py +295 -0
- Cython/Compiler/ExprNodes.py +15267 -0
- Cython/Compiler/FlowControl.pxd +97 -0
- Cython/Compiler/FlowControl.py +1455 -0
- Cython/Compiler/FusedNode.py +1002 -0
- Cython/Compiler/Future.py +16 -0
- Cython/Compiler/Interpreter.py +57 -0
- Cython/Compiler/Lexicon.py +340 -0
- Cython/Compiler/LineTable.py +114 -0
- Cython/Compiler/Main.py +853 -0
- Cython/Compiler/MatchCaseNodes.py +259 -0
- Cython/Compiler/MemoryView.py +922 -0
- Cython/Compiler/ModuleNode.py +4024 -0
- Cython/Compiler/Naming.py +374 -0
- Cython/Compiler/Nodes.py +10826 -0
- Cython/Compiler/Optimize.py +5256 -0
- Cython/Compiler/Options.py +835 -0
- Cython/Compiler/ParseTreeTransforms.pxd +77 -0
- Cython/Compiler/ParseTreeTransforms.py +4509 -0
- Cython/Compiler/Parsing.pxd +9 -0
- Cython/Compiler/Parsing.py +4789 -0
- Cython/Compiler/Pipeline.py +439 -0
- Cython/Compiler/PyrexTypes.py +5762 -0
- Cython/Compiler/Pythran.py +232 -0
- Cython/Compiler/Scanning.pxd +40 -0
- Cython/Compiler/Scanning.py +577 -0
- Cython/Compiler/StringEncoding.py +347 -0
- Cython/Compiler/Symtab.py +3080 -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 +86 -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 +33 -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 +584 -0
- Cython/Compiler/TypeSlots.py +1181 -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/__init__.py +1 -0
- Cython/Coverage.py +448 -0
- Cython/Debugger/Cygdb.py +175 -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 +174 -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 +67 -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 +84 -0
- Cython/Includes/libc/time.pxd +51 -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/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 +130 -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 +44 -0
- Cython/Includes/libcpp/set.pxd +228 -0
- Cython/Includes/libcpp/shared_mutex.pxd +72 -0
- Cython/Includes/libcpp/span.pxd +87 -0
- Cython/Includes/libcpp/stack.pxd +11 -0
- Cython/Includes/libcpp/stop_token.pxd +105 -0
- Cython/Includes/libcpp/string.pxd +355 -0
- Cython/Includes/libcpp/string_view.pxd +181 -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/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/DFA.pxd +14 -0
- Cython/Plex/DFA.py +164 -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/Regexps.py +539 -0
- Cython/Plex/Scanners.pxd +47 -0
- Cython/Plex/Scanners.py +360 -0
- Cython/Plex/Transitions.pxd +14 -0
- Cython/Plex/Transitions.py +239 -0
- Cython/Plex/__init__.py +34 -0
- Cython/Runtime/__init__.py +1 -0
- Cython/Runtime/refnanny.pyx +237 -0
- Cython/Shadow.py +690 -0
- Cython/Shadow.pyi +521 -0
- Cython/StringIOTree.py +170 -0
- Cython/Tempita/__init__.py +4 -0
- Cython/Tempita/_looper.py +154 -0
- Cython/Tempita/_tempita.py +1091 -0
- Cython/TestUtils.py +410 -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 +1002 -0
- Cython/Utility/Buffer.c +875 -0
- Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
- Cython/Utility/Builtins.c +776 -0
- Cython/Utility/CConvert.pyx +134 -0
- Cython/Utility/CMath.c +104 -0
- Cython/Utility/CommonStructures.c +118 -0
- Cython/Utility/Complex.c +378 -0
- Cython/Utility/Coroutine.c +2206 -0
- Cython/Utility/CpdefEnums.pyx +103 -0
- Cython/Utility/CppConvert.pyx +279 -0
- Cython/Utility/CppSupport.cpp +143 -0
- Cython/Utility/CythonFunction.c +1794 -0
- Cython/Utility/Dataclasses.c +185 -0
- Cython/Utility/Dataclasses.py +112 -0
- Cython/Utility/Embed.c +125 -0
- Cython/Utility/Exceptions.c +1012 -0
- Cython/Utility/ExtensionTypes.c +809 -0
- Cython/Utility/FunctionArguments.c +965 -0
- Cython/Utility/ImportExport.c +987 -0
- Cython/Utility/Lock.c +136 -0
- Cython/Utility/MemoryView.pxd +187 -0
- Cython/Utility/MemoryView.pyx +1481 -0
- Cython/Utility/MemoryView_C.c +1046 -0
- Cython/Utility/ModuleSetupCode.c +3059 -0
- Cython/Utility/NumpyImportArray.c +46 -0
- Cython/Utility/ObjectHandling.c +3342 -0
- Cython/Utility/Optimize.c +1589 -0
- Cython/Utility/Overflow.c +404 -0
- Cython/Utility/Printing.c +86 -0
- Cython/Utility/Profile.c +709 -0
- Cython/Utility/StringTools.c +1259 -0
- Cython/Utility/TestCyUtilityLoader.pyx +8 -0
- Cython/Utility/TestCythonScope.pyx +75 -0
- Cython/Utility/TestUtilityLoader.c +12 -0
- Cython/Utility/TypeConversion.c +1284 -0
- Cython/Utility/UFuncs.pyx +50 -0
- Cython/Utility/UFuncs_C.c +89 -0
- Cython/Utility/__init__.py +28 -0
- Cython/Utility/arrayarray.h +148 -0
- Cython/Utils.py +687 -0
- Cython/__init__.py +10 -0
- Cython/__init__.pyi +7 -0
- Cython/py.typed +0 -0
- cython-3.1.0.dist-info/COPYING.txt +19 -0
- cython-3.1.0.dist-info/LICENSE.txt +176 -0
- cython-3.1.0.dist-info/METADATA +636 -0
- cython-3.1.0.dist-info/RECORD +316 -0
- cython-3.1.0.dist-info/WHEEL +5 -0
- cython-3.1.0.dist-info/entry_points.txt +4 -0
- cython-3.1.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,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
|