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,232 @@
|
|
|
1
|
+
from .PyrexTypes import CType, CTypedefType, CStructOrUnionType
|
|
2
|
+
|
|
3
|
+
import cython
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
import pythran
|
|
7
|
+
pythran_is_pre_0_9 = tuple(map(int, pythran.__version__.split('.')[0:2])) < (0, 9)
|
|
8
|
+
pythran_is_pre_0_9_6 = tuple(map(int, pythran.__version__.split('.')[0:3])) < (0, 9, 6)
|
|
9
|
+
except ImportError:
|
|
10
|
+
pythran = None
|
|
11
|
+
pythran_is_pre_0_9 = True
|
|
12
|
+
pythran_is_pre_0_9_6 = True
|
|
13
|
+
|
|
14
|
+
if pythran_is_pre_0_9_6:
|
|
15
|
+
pythran_builtins = '__builtin__'
|
|
16
|
+
else:
|
|
17
|
+
pythran_builtins = 'builtins'
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# Pythran/Numpy specific operations
|
|
21
|
+
|
|
22
|
+
def has_np_pythran(env):
|
|
23
|
+
if env is None:
|
|
24
|
+
return False
|
|
25
|
+
directives = getattr(env, 'directives', None)
|
|
26
|
+
return (directives and directives.get('np_pythran', False))
|
|
27
|
+
|
|
28
|
+
@cython.ccall
|
|
29
|
+
def is_pythran_supported_dtype(type_):
|
|
30
|
+
if isinstance(type_, CTypedefType):
|
|
31
|
+
return is_pythran_supported_type(type_.typedef_base_type)
|
|
32
|
+
return type_.is_numeric
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def pythran_type(Ty, ptype="ndarray"):
|
|
36
|
+
if Ty.is_buffer:
|
|
37
|
+
ndim,dtype = Ty.ndim, Ty.dtype
|
|
38
|
+
if isinstance(dtype, CStructOrUnionType):
|
|
39
|
+
ctype = dtype.cname
|
|
40
|
+
elif isinstance(dtype, CType):
|
|
41
|
+
ctype = dtype.sign_and_name()
|
|
42
|
+
elif isinstance(dtype, CTypedefType):
|
|
43
|
+
ctype = dtype.typedef_cname
|
|
44
|
+
else:
|
|
45
|
+
raise ValueError("unsupported type %s!" % dtype)
|
|
46
|
+
if pythran_is_pre_0_9:
|
|
47
|
+
return "pythonic::types::%s<%s,%d>" % (ptype,ctype, ndim)
|
|
48
|
+
else:
|
|
49
|
+
return "pythonic::types::%s<%s,pythonic::types::pshape<%s>>" % (ptype,ctype, ",".join(("long",)*ndim))
|
|
50
|
+
if Ty.is_pythran_expr:
|
|
51
|
+
return Ty.pythran_type
|
|
52
|
+
#if Ty.is_none:
|
|
53
|
+
# return "decltype(pythonic::builtins::None)"
|
|
54
|
+
if Ty.is_numeric:
|
|
55
|
+
return Ty.sign_and_name()
|
|
56
|
+
raise ValueError("unsupported pythran type %s (%s)" % (Ty, type(Ty)))
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@cython.cfunc
|
|
60
|
+
def type_remove_ref(ty):
|
|
61
|
+
return "typename std::remove_reference<%s>::type" % ty
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def pythran_binop_type(op, tA, tB):
|
|
65
|
+
if op == '**':
|
|
66
|
+
return 'decltype(pythonic::numpy::functor::power{}(std::declval<%s>(), std::declval<%s>()))' % (
|
|
67
|
+
pythran_type(tA), pythran_type(tB))
|
|
68
|
+
else:
|
|
69
|
+
return "decltype(std::declval<%s>() %s std::declval<%s>())" % (
|
|
70
|
+
pythran_type(tA), op, pythran_type(tB))
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def pythran_unaryop_type(op, type_):
|
|
74
|
+
return "decltype(%sstd::declval<%s>())" % (
|
|
75
|
+
op, pythran_type(type_))
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@cython.cfunc
|
|
79
|
+
def _index_access(index_code, indices):
|
|
80
|
+
indexing = ",".join([index_code(idx) for idx in indices])
|
|
81
|
+
return ('[%s]' if len(indices) == 1 else '(%s)') % indexing
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def _index_type_code(index_with_type):
|
|
85
|
+
idx, index_type = index_with_type
|
|
86
|
+
if idx.is_slice:
|
|
87
|
+
n = 2 + int(not idx.step.is_none)
|
|
88
|
+
return "pythonic::%s::functor::slice{}(%s)" % (
|
|
89
|
+
pythran_builtins,
|
|
90
|
+
",".join(["0"]*n))
|
|
91
|
+
elif index_type.is_int:
|
|
92
|
+
return "std::declval<%s>()" % index_type.sign_and_name()
|
|
93
|
+
elif index_type.is_pythran_expr:
|
|
94
|
+
return "std::declval<%s>()" % index_type.pythran_type
|
|
95
|
+
raise ValueError("unsupported indexing type %s!" % index_type)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _index_code(idx):
|
|
99
|
+
if idx.is_slice:
|
|
100
|
+
values = idx.start, idx.stop, idx.step
|
|
101
|
+
if idx.step.is_none:
|
|
102
|
+
func = "contiguous_slice"
|
|
103
|
+
values = values[:2]
|
|
104
|
+
else:
|
|
105
|
+
func = "slice"
|
|
106
|
+
return "pythonic::types::%s(%s)" % (
|
|
107
|
+
func, ",".join(v.pythran_result() for v in values))
|
|
108
|
+
elif idx.type.is_int:
|
|
109
|
+
return to_pythran(idx)
|
|
110
|
+
elif idx.type.is_pythran_expr:
|
|
111
|
+
return idx.pythran_result()
|
|
112
|
+
raise ValueError("unsupported indexing type %s" % idx.type)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def pythran_indexing_type(type_, indices):
|
|
116
|
+
return type_remove_ref("decltype(std::declval<%s>()%s)" % (
|
|
117
|
+
pythran_type(type_),
|
|
118
|
+
_index_access(_index_type_code, indices),
|
|
119
|
+
))
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def pythran_indexing_code(indices):
|
|
123
|
+
return _index_access(_index_code, indices)
|
|
124
|
+
|
|
125
|
+
def np_func_to_list(func):
|
|
126
|
+
if not func.is_numpy_attribute:
|
|
127
|
+
return []
|
|
128
|
+
return np_func_to_list(func.obj) + [func.attribute]
|
|
129
|
+
|
|
130
|
+
if pythran is None:
|
|
131
|
+
def pythran_is_numpy_func_supported(name):
|
|
132
|
+
return False
|
|
133
|
+
else:
|
|
134
|
+
def pythran_is_numpy_func_supported(func):
|
|
135
|
+
CurF = pythran.tables.MODULES['numpy']
|
|
136
|
+
FL = np_func_to_list(func)
|
|
137
|
+
for F in FL:
|
|
138
|
+
CurF = CurF.get(F, None)
|
|
139
|
+
if CurF is None:
|
|
140
|
+
return False
|
|
141
|
+
return True
|
|
142
|
+
|
|
143
|
+
def pythran_functor(func):
|
|
144
|
+
func = np_func_to_list(func)
|
|
145
|
+
submodules = "::".join(func[:-1] + ["functor"])
|
|
146
|
+
return "pythonic::numpy::%s::%s" % (submodules, func[-1])
|
|
147
|
+
|
|
148
|
+
def pythran_func_type(func, args):
|
|
149
|
+
args = ",".join("std::declval<%s>()" % pythran_type(a.type) for a in args)
|
|
150
|
+
return "decltype(%s{}(%s))" % (pythran_functor(func), args)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
@cython.ccall
|
|
154
|
+
def to_pythran(op, ptype=None):
|
|
155
|
+
op_type = op.type
|
|
156
|
+
if op_type.is_int:
|
|
157
|
+
# Make sure that integer literals always have exactly the type that the templates expect.
|
|
158
|
+
return op_type.cast_code(op.result())
|
|
159
|
+
if is_pythran_expr(op_type) and (op.result_in_temp() or getattr(op, "entry", None)):
|
|
160
|
+
# Currently Pythran seems to generate different code for lvalve and rvalue references.
|
|
161
|
+
# The inferred variable types are all in terms of rvalue references (std::declval).
|
|
162
|
+
# Anything pythran expression written in terms of lvalue references ends up not
|
|
163
|
+
# default constructable so is unsuitable for use as a Cython temp.
|
|
164
|
+
# Therefore, we must make sure that we're passing rvalue references.
|
|
165
|
+
# (std::move would also do and likely be better in the case of most temps,
|
|
166
|
+
# but maybe not all temps)
|
|
167
|
+
return f"decltype({op.result()}){{{op.result()}}}"
|
|
168
|
+
if is_type(op_type, ["is_pythran_expr", "is_numeric", "is_float", "is_complex"]):
|
|
169
|
+
return op.result()
|
|
170
|
+
if op.is_none:
|
|
171
|
+
return "pythonic::%s::None" % pythran_builtins
|
|
172
|
+
if ptype is None:
|
|
173
|
+
ptype = pythran_type(op_type)
|
|
174
|
+
|
|
175
|
+
assert op.type.is_pyobject
|
|
176
|
+
return "from_python<%s>(%s)" % (ptype, op.py_result())
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
@cython.cfunc
|
|
180
|
+
def is_type(type_, types):
|
|
181
|
+
for attr in types:
|
|
182
|
+
if getattr(type_, attr, False):
|
|
183
|
+
return True
|
|
184
|
+
return False
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def is_pythran_supported_node_or_none(node):
|
|
188
|
+
return node.is_none or is_pythran_supported_type(node.type)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
@cython.ccall
|
|
192
|
+
def is_pythran_supported_type(type_):
|
|
193
|
+
pythran_supported = (
|
|
194
|
+
"is_pythran_expr", "is_int", "is_numeric", "is_float", "is_none", "is_complex")
|
|
195
|
+
return is_type(type_, pythran_supported) or is_pythran_expr(type_)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def is_pythran_supported_operation_type(type_):
|
|
199
|
+
pythran_supported = (
|
|
200
|
+
"is_pythran_expr", "is_int", "is_numeric", "is_float", "is_complex")
|
|
201
|
+
return is_type(type_,pythran_supported) or is_pythran_expr(type_)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
@cython.ccall
|
|
205
|
+
def is_pythran_expr(type_):
|
|
206
|
+
return type_.is_pythran_expr
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def is_pythran_buffer(type_):
|
|
210
|
+
return (type_.is_numpy_buffer and is_pythran_supported_dtype(type_.dtype) and
|
|
211
|
+
type_.mode in ("c", "strided") and not type_.cast)
|
|
212
|
+
|
|
213
|
+
def pythran_get_func_include_file(func):
|
|
214
|
+
func = np_func_to_list(func)
|
|
215
|
+
return "pythonic/numpy/%s.hpp" % "/".join(func)
|
|
216
|
+
|
|
217
|
+
def include_pythran_generic(env):
|
|
218
|
+
# Generic files
|
|
219
|
+
env.add_include_file("pythonic/core.hpp")
|
|
220
|
+
env.add_include_file("pythonic/python/core.hpp")
|
|
221
|
+
env.add_include_file("pythonic/types/bool.hpp")
|
|
222
|
+
env.add_include_file("pythonic/types/ndarray.hpp")
|
|
223
|
+
env.add_include_file("pythonic/numpy/power.hpp")
|
|
224
|
+
env.add_include_file("pythonic/%s/slice.hpp" % pythran_builtins)
|
|
225
|
+
env.add_include_file("<new>") # for placement new
|
|
226
|
+
|
|
227
|
+
for i in (8, 16, 32, 64):
|
|
228
|
+
env.add_include_file("pythonic/types/uint%d.hpp" % i)
|
|
229
|
+
env.add_include_file("pythonic/types/int%d.hpp" % i)
|
|
230
|
+
for t in ("float", "float32", "float64", "set", "slice", "tuple", "int",
|
|
231
|
+
"complex", "complex64", "complex128"):
|
|
232
|
+
env.add_include_file("pythonic/types/%s.hpp" % t)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import cython
|
|
2
|
+
|
|
3
|
+
from ..Plex.Scanners cimport Scanner
|
|
4
|
+
|
|
5
|
+
cdef unicode any_string_prefix, IDENT
|
|
6
|
+
|
|
7
|
+
cdef get_lexicon()
|
|
8
|
+
cdef initial_compile_time_env()
|
|
9
|
+
|
|
10
|
+
## methods commented with '##' out are used by Parsing.py when compiled.
|
|
11
|
+
|
|
12
|
+
@cython.final
|
|
13
|
+
cdef class CompileTimeScope:
|
|
14
|
+
cdef public dict entries
|
|
15
|
+
cdef public CompileTimeScope outer
|
|
16
|
+
##cdef declare(self, name, value)
|
|
17
|
+
##cdef lookup_here(self, name)
|
|
18
|
+
##cpdef lookup(self, name)
|
|
19
|
+
|
|
20
|
+
@cython.final
|
|
21
|
+
cdef class PyrexScanner(Scanner):
|
|
22
|
+
cdef public context
|
|
23
|
+
cdef public list included_files
|
|
24
|
+
cdef public CompileTimeScope compile_time_env
|
|
25
|
+
cdef public bint compile_time_eval
|
|
26
|
+
cdef public bint compile_time_expr
|
|
27
|
+
cdef public bint parse_comments
|
|
28
|
+
cdef public bint in_python_file
|
|
29
|
+
cdef public source_encoding
|
|
30
|
+
cdef dict keywords
|
|
31
|
+
cdef public list indentation_stack
|
|
32
|
+
cdef public Py_UCS4 indentation_char
|
|
33
|
+
cdef public int bracket_nesting_level
|
|
34
|
+
cdef readonly bint async_enabled
|
|
35
|
+
cdef public unicode sy
|
|
36
|
+
cdef public systring # EncodedString
|
|
37
|
+
cdef public list put_back_on_failure
|
|
38
|
+
# fstrings/tstrings
|
|
39
|
+
cdef list ft_string_state_stack
|
|
40
|
+
cdef int in_ft_string_expr_prescan
|
|
41
|
+
|
|
42
|
+
cdef Py_ssize_t current_level(self)
|
|
43
|
+
cdef int error_at_scanpos(self, str message) except -1
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
cdef class FTStringState:
|
|
47
|
+
cdef list bracket_states
|
|
48
|
+
cdef readonly str scanner_state
|