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,105 @@
|
|
|
1
|
+
from Cython.TestUtils import CythonTest
|
|
2
|
+
import Cython.Compiler.Errors as Errors
|
|
3
|
+
from Cython.Compiler.Nodes import *
|
|
4
|
+
from Cython.Compiler.ParseTreeTransforms import *
|
|
5
|
+
from Cython.Compiler.Buffer import *
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class TestBufferParsing(CythonTest):
|
|
9
|
+
# First, we only test the raw parser, i.e.
|
|
10
|
+
# the number and contents of arguments are NOT checked.
|
|
11
|
+
# However "dtype"/the first positional argument is special-cased
|
|
12
|
+
# to parse a type argument rather than an expression
|
|
13
|
+
|
|
14
|
+
def parse(self, s):
|
|
15
|
+
return self.should_not_fail(lambda: self.fragment(s)).root
|
|
16
|
+
|
|
17
|
+
def not_parseable(self, expected_error, s):
|
|
18
|
+
e = self.should_fail(lambda: self.fragment(s), Errors.CompileError)
|
|
19
|
+
self.assertEqual(expected_error, e.message_only)
|
|
20
|
+
|
|
21
|
+
def test_basic(self):
|
|
22
|
+
t = self.parse("cdef object[float, 4, ndim=2, foo=foo] x")
|
|
23
|
+
bufnode = t.stats[0].base_type
|
|
24
|
+
self.assertTrue(isinstance(bufnode, TemplatedTypeNode))
|
|
25
|
+
self.assertEqual(2, len(bufnode.positional_args))
|
|
26
|
+
# print bufnode.dump()
|
|
27
|
+
# should put more here...
|
|
28
|
+
|
|
29
|
+
def test_type_pos(self):
|
|
30
|
+
self.parse("cdef object[short unsigned int, 3] x")
|
|
31
|
+
|
|
32
|
+
def test_type_keyword(self):
|
|
33
|
+
self.parse("cdef object[foo=foo, dtype=short unsigned int] x")
|
|
34
|
+
|
|
35
|
+
def test_pos_after_key(self):
|
|
36
|
+
self.not_parseable("Non-keyword arg following keyword arg",
|
|
37
|
+
"cdef object[foo=1, 2] x")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# See also tests/error/e_bufaccess.pyx and tets/run/bufaccess.pyx
|
|
41
|
+
# THESE TESTS ARE NOW DISABLED, the code they test was pretty much
|
|
42
|
+
# refactored away
|
|
43
|
+
class TestBufferOptions(CythonTest):
|
|
44
|
+
# Tests the full parsing of the options within the brackets
|
|
45
|
+
|
|
46
|
+
def nonfatal_error(self, error):
|
|
47
|
+
# We're passing self as context to transform to trap this
|
|
48
|
+
self.error = error
|
|
49
|
+
self.assertTrue(self.expect_error)
|
|
50
|
+
|
|
51
|
+
def parse_opts(self, opts, expect_error=False):
|
|
52
|
+
assert opts != ""
|
|
53
|
+
s = "def f():\n cdef object[%s] x" % opts
|
|
54
|
+
self.expect_error = expect_error
|
|
55
|
+
root = self.fragment(s, pipeline=[NormalizeTree(self), PostParse(self)]).root
|
|
56
|
+
if not expect_error:
|
|
57
|
+
vardef = root.stats[0].body.stats[0]
|
|
58
|
+
assert isinstance(vardef, CVarDefNode) # use normal assert as this is to validate the test code
|
|
59
|
+
buftype = vardef.base_type
|
|
60
|
+
self.assertTrue(isinstance(buftype, TemplatedTypeNode))
|
|
61
|
+
self.assertTrue(isinstance(buftype.base_type_node, CSimpleBaseTypeNode))
|
|
62
|
+
self.assertEqual("object", buftype.base_type_node.name)
|
|
63
|
+
return buftype
|
|
64
|
+
else:
|
|
65
|
+
self.assertTrue(len(root.stats[0].body.stats) == 0)
|
|
66
|
+
|
|
67
|
+
def non_parse(self, expected_err, opts):
|
|
68
|
+
self.parse_opts(opts, expect_error=True)
|
|
69
|
+
# e = self.should_fail(lambda: self.parse_opts(opts))
|
|
70
|
+
self.assertEqual(expected_err, self.error.message_only)
|
|
71
|
+
|
|
72
|
+
def __test_basic(self):
|
|
73
|
+
buf = self.parse_opts("unsigned short int, 3")
|
|
74
|
+
self.assertTrue(isinstance(buf.dtype_node, CSimpleBaseTypeNode))
|
|
75
|
+
self.assertTrue(buf.dtype_node.signed == 0 and buf.dtype_node.longness == -1)
|
|
76
|
+
self.assertEqual(3, buf.ndim)
|
|
77
|
+
|
|
78
|
+
def __test_dict(self):
|
|
79
|
+
buf = self.parse_opts("ndim=3, dtype=unsigned short int")
|
|
80
|
+
self.assertTrue(isinstance(buf.dtype_node, CSimpleBaseTypeNode))
|
|
81
|
+
self.assertTrue(buf.dtype_node.signed == 0 and buf.dtype_node.longness == -1)
|
|
82
|
+
self.assertEqual(3, buf.ndim)
|
|
83
|
+
|
|
84
|
+
def __test_ndim(self):
|
|
85
|
+
self.parse_opts("int, 2")
|
|
86
|
+
self.non_parse(ERR_BUF_NDIM, "int, 'a'")
|
|
87
|
+
self.non_parse(ERR_BUF_NDIM, "int, -34")
|
|
88
|
+
|
|
89
|
+
def __test_use_DEF(self):
|
|
90
|
+
t = self.fragment("""
|
|
91
|
+
DEF ndim = 3
|
|
92
|
+
def f():
|
|
93
|
+
cdef object[int, ndim] x
|
|
94
|
+
cdef object[ndim=ndim, dtype=int] y
|
|
95
|
+
""", pipeline=[NormalizeTree(self), PostParse(self)]).root
|
|
96
|
+
stats = t.stats[0].body.stats
|
|
97
|
+
self.assertTrue(stats[0].base_type.ndim == 3)
|
|
98
|
+
self.assertTrue(stats[1].base_type.ndim == 3)
|
|
99
|
+
|
|
100
|
+
# add exotic and impossible combinations as they come along...
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
if __name__ == '__main__':
|
|
104
|
+
import unittest
|
|
105
|
+
unittest.main()
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import builtins
|
|
2
|
+
import sys
|
|
3
|
+
import unittest
|
|
4
|
+
|
|
5
|
+
from ..Builtin import (
|
|
6
|
+
inferred_method_return_types, find_return_type_of_builtin_method,
|
|
7
|
+
unsafe_compile_time_methods, is_safe_compile_time_method,
|
|
8
|
+
builtin_scope,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from ..Code import (
|
|
12
|
+
KNOWN_PYTHON_BUILTINS_VERSION, KNOWN_PYTHON_BUILTINS,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
class TestBuiltinReturnTypes(unittest.TestCase):
|
|
16
|
+
def test_find_return_type_of_builtin_method(self):
|
|
17
|
+
# It's enough to test the method existence in a recent Python that likely has them.
|
|
18
|
+
look_up_methods = sys.version_info >= (3,10)
|
|
19
|
+
|
|
20
|
+
for type_name, methods in inferred_method_return_types.items():
|
|
21
|
+
py_type = getattr(builtins, type_name if type_name != 'unicode' else 'str')
|
|
22
|
+
|
|
23
|
+
for method_name, return_type_name in methods.items():
|
|
24
|
+
builtin_type = builtin_scope.lookup(type_name).type
|
|
25
|
+
return_type = find_return_type_of_builtin_method(builtin_type, method_name)
|
|
26
|
+
|
|
27
|
+
if return_type.is_builtin_type:
|
|
28
|
+
if '[' in return_type_name:
|
|
29
|
+
return_type_name = return_type_name.partition('[')[0]
|
|
30
|
+
if return_type_name == 'T':
|
|
31
|
+
return_type_name = type_name
|
|
32
|
+
self.assertEqual(return_type.name, return_type_name)
|
|
33
|
+
if look_up_methods:
|
|
34
|
+
self.assertTrue(hasattr(py_type, method_name), f"{type_name}.{method_name}")
|
|
35
|
+
else:
|
|
36
|
+
self.assertEqual(return_type.empty_declaration_code(pyrex=True), return_type_name)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class TestBuiltinCompatibility(unittest.TestCase):
|
|
40
|
+
def test_python_builtin_compatibility(self):
|
|
41
|
+
expected_builtins = set(KNOWN_PYTHON_BUILTINS)
|
|
42
|
+
if sys.platform != 'win32':
|
|
43
|
+
expected_builtins.discard("WindowsError")
|
|
44
|
+
runtime_builtins = frozenset(
|
|
45
|
+
name for name in dir(builtins)
|
|
46
|
+
if name not in ('__doc__', '__loader__', '__name__', '__package__', '__spec__'))
|
|
47
|
+
if sys.version_info < KNOWN_PYTHON_BUILTINS_VERSION:
|
|
48
|
+
missing_builtins = expected_builtins - runtime_builtins
|
|
49
|
+
if missing_builtins:
|
|
50
|
+
self.skipTest(f'skipping test, older Python release found. Missing builtins: {", ".join(sorted(missing_builtins))}')
|
|
51
|
+
self.skipTest('skipping test, older Python release found.')
|
|
52
|
+
self.assertSetEqual(runtime_builtins, expected_builtins)
|
|
53
|
+
|
|
54
|
+
def test_unsafe_compile_time_methods(self):
|
|
55
|
+
"""Validate the table of builtin methods that are not safe for compile time evaluation
|
|
56
|
+
against the table of known builtin methods (and their types).
|
|
57
|
+
"""
|
|
58
|
+
for builtin_type_name, unsafe_methods in unsafe_compile_time_methods.items():
|
|
59
|
+
self.assertIsInstance(unsafe_methods, set)
|
|
60
|
+
|
|
61
|
+
builtin_type = getattr(builtins, builtin_type_name) # All named types must exist as builtin types.
|
|
62
|
+
|
|
63
|
+
known_methods = sorted(
|
|
64
|
+
inferred_method_return_types[builtin_type_name]) # All types are also in "inferred_method_return_types".
|
|
65
|
+
|
|
66
|
+
self.assertFalse(unsafe_methods.difference(known_methods)) # Only known methods are listed.
|
|
67
|
+
|
|
68
|
+
for method_name in known_methods:
|
|
69
|
+
builtin_method = getattr(builtin_type, method_name, None)
|
|
70
|
+
if builtin_method is None:
|
|
71
|
+
self.assertIn(method_name, unsafe_methods) # Non-portable methods are always unsafe.
|
|
72
|
+
continue
|