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,173 @@
|
|
|
1
|
+
#####################################################################
|
|
2
|
+
#
|
|
3
|
+
# These are the Cython pxd files for (most of) the Python/C API.
|
|
4
|
+
#
|
|
5
|
+
# REFERENCE COUNTING:
|
|
6
|
+
#
|
|
7
|
+
# JUST TO SCARE YOU:
|
|
8
|
+
# If you are going to use any of the Python/C API in your Cython
|
|
9
|
+
# program, you might be responsible for doing reference counting.
|
|
10
|
+
# Read http://docs.python.org/api/refcounts.html which is so
|
|
11
|
+
# important I've copied it below.
|
|
12
|
+
#
|
|
13
|
+
# For all the declaration below, whenever the Py_ function returns
|
|
14
|
+
# a *new reference* to a PyObject*, the return type is "object".
|
|
15
|
+
# When the function returns a borrowed reference, the return
|
|
16
|
+
# type is PyObject*. When Cython sees "object" as a return type
|
|
17
|
+
# it doesn't increment the reference count. When it sees PyObject*
|
|
18
|
+
# in order to use the result you must explicitly cast to <object>,
|
|
19
|
+
# and when you do that Cython increments the reference count whether
|
|
20
|
+
# you want it to or not, forcing you to an explicit DECREF (or leak memory).
|
|
21
|
+
# To avoid this we make the above convention. Note, you can
|
|
22
|
+
# always locally override this convention by putting something like
|
|
23
|
+
#
|
|
24
|
+
# cdef extern from "Python.h":
|
|
25
|
+
# PyObject* PyNumber_Add(PyObject *o1, PyObject *o2)
|
|
26
|
+
#
|
|
27
|
+
# in your .pyx file or into a cimported .pxd file. You just have to
|
|
28
|
+
# use the one from the right (pxd-)namespace then.
|
|
29
|
+
#
|
|
30
|
+
# Cython automatically takes care of reference counting for anything
|
|
31
|
+
# of type object.
|
|
32
|
+
#
|
|
33
|
+
## More precisely, I think the correct convention for
|
|
34
|
+
## using the Python/C API from Cython is as follows.
|
|
35
|
+
##
|
|
36
|
+
## (1) Declare all input arguments as type "object". This way no explicit
|
|
37
|
+
## <PyObject*> casting is needed, and moreover Cython doesn't generate
|
|
38
|
+
## any funny reference counting.
|
|
39
|
+
## (2) Declare output as object if a new reference is returned.
|
|
40
|
+
## (3) Declare output as PyObject* if a borrowed reference is returned.
|
|
41
|
+
##
|
|
42
|
+
## This way when you call objects, no cast is needed, and if the api
|
|
43
|
+
## calls returns a new reference (which is about 95% of them), then
|
|
44
|
+
## you can just assign to a variable of type object. With borrowed
|
|
45
|
+
## references if you do an explicit typecast to <object>, Cython generates an
|
|
46
|
+
## INCREF and DECREF so you have to be careful. However, you got a
|
|
47
|
+
## borrowed reference in this case, so there's got to be another reference
|
|
48
|
+
## to your object, so you're OK, as long as you relealize this
|
|
49
|
+
## and use the result of an explicit cast to <object> as a borrowed
|
|
50
|
+
## reference (and you can call Py_INCREF if you want to turn it
|
|
51
|
+
## into another reference for some reason).
|
|
52
|
+
#
|
|
53
|
+
# "The reference count is important because today's computers have
|
|
54
|
+
# a finite (and often severely limited) memory size; it counts how
|
|
55
|
+
# many different places there are that have a reference to an
|
|
56
|
+
# object. Such a place could be another object, or a global (or
|
|
57
|
+
# static) C variable, or a local variable in some C function. When
|
|
58
|
+
# an object's reference count becomes zero, the object is
|
|
59
|
+
# deallocated. If it contains references to other objects, their
|
|
60
|
+
# reference count is decremented. Those other objects may be
|
|
61
|
+
# deallocated in turn, if this decrement makes their reference
|
|
62
|
+
# count become zero, and so on. (There's an obvious problem with
|
|
63
|
+
# objects that reference each other here; for now, the solution is
|
|
64
|
+
# ``don't do that.'')
|
|
65
|
+
#
|
|
66
|
+
# Reference counts are always manipulated explicitly. The normal
|
|
67
|
+
# way is to use the macro Py_INCREF() to increment an object's
|
|
68
|
+
# reference count by one, and Py_DECREF() to decrement it by
|
|
69
|
+
# one. The Py_DECREF() macro is considerably more complex than the
|
|
70
|
+
# incref one, since it must check whether the reference count
|
|
71
|
+
# becomes zero and then cause the object's deallocator to be
|
|
72
|
+
# called. The deallocator is a function pointer contained in the
|
|
73
|
+
# object's type structure. The type-specific deallocator takes
|
|
74
|
+
# care of decrementing the reference counts for other objects
|
|
75
|
+
# contained in the object if this is a compound object type, such
|
|
76
|
+
# as a list, as well as performing any additional finalization
|
|
77
|
+
# that's needed. There's no chance that the reference count can
|
|
78
|
+
# overflow; at least as many bits are used to hold the reference
|
|
79
|
+
# count as there are distinct memory locations in virtual memory
|
|
80
|
+
# (assuming sizeof(long) >= sizeof(char*)). Thus, the reference
|
|
81
|
+
# count increment is a simple operation.
|
|
82
|
+
#
|
|
83
|
+
# It is not necessary to increment an object's reference count for
|
|
84
|
+
# every local variable that contains a pointer to an object. In
|
|
85
|
+
# theory, the object's reference count goes up by one when the
|
|
86
|
+
# variable is made to point to it and it goes down by one when the
|
|
87
|
+
# variable goes out of scope. However, these two cancel each other
|
|
88
|
+
# out, so at the end the reference count hasn't changed. The only
|
|
89
|
+
# real reason to use the reference count is to prevent the object
|
|
90
|
+
# from being deallocated as long as our variable is pointing to
|
|
91
|
+
# it. If we know that there is at least one other reference to the
|
|
92
|
+
# object that lives at least as long as our variable, there is no
|
|
93
|
+
# need to increment the reference count temporarily. An important
|
|
94
|
+
# situation where this arises is in objects that are passed as
|
|
95
|
+
# arguments to C functions in an extension module that are called
|
|
96
|
+
# from Python; the call mechanism guarantees to hold a reference
|
|
97
|
+
# to every argument for the duration of the call.
|
|
98
|
+
#
|
|
99
|
+
# However, a common pitfall is to extract an object from a list
|
|
100
|
+
# and hold on to it for a while without incrementing its reference
|
|
101
|
+
# count. Some other operation might conceivably remove the object
|
|
102
|
+
# from the list, decrementing its reference count and possible
|
|
103
|
+
# deallocating it. The real danger is that innocent-looking
|
|
104
|
+
# operations may invoke arbitrary Python code which could do this;
|
|
105
|
+
# there is a code path which allows control to flow back to the
|
|
106
|
+
# user from a Py_DECREF(), so almost any operation is potentially
|
|
107
|
+
# dangerous.
|
|
108
|
+
#
|
|
109
|
+
# A safe approach is to always use the generic operations
|
|
110
|
+
# (functions whose name begins with "PyObject_", "PyNumber_",
|
|
111
|
+
# "PySequence_" or "PyMapping_"). These operations always
|
|
112
|
+
# increment the reference count of the object they return. This
|
|
113
|
+
# leaves the caller with the responsibility to call Py_DECREF()
|
|
114
|
+
# when they are done with the result; this soon becomes second
|
|
115
|
+
# nature.
|
|
116
|
+
#
|
|
117
|
+
# Now you should read http://docs.python.org/api/refcountDetails.html
|
|
118
|
+
# just to be sure you understand what is going on.
|
|
119
|
+
#
|
|
120
|
+
#################################################################
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
#################################################################
|
|
125
|
+
# BIG FAT DEPRECATION WARNING
|
|
126
|
+
#################################################################
|
|
127
|
+
# Do NOT cimport any names directly from the cpython package,
|
|
128
|
+
# despite of the star-imports below. They will be removed at
|
|
129
|
+
# some point.
|
|
130
|
+
# Instead, use the correct sub-module to draw your cimports from.
|
|
131
|
+
#
|
|
132
|
+
# A direct cimport from the package will make your code depend on
|
|
133
|
+
# all of the existing declarations. This may have side-effects
|
|
134
|
+
# and reduces the portability of your code.
|
|
135
|
+
#################################################################
|
|
136
|
+
# START OF DEPRECATED SECTION
|
|
137
|
+
#################################################################
|
|
138
|
+
|
|
139
|
+
from cpython.version cimport *
|
|
140
|
+
from cpython.ref cimport *
|
|
141
|
+
from cpython.exc cimport *
|
|
142
|
+
from cpython.module cimport *
|
|
143
|
+
from cpython.mem cimport *
|
|
144
|
+
from cpython.tuple cimport *
|
|
145
|
+
from cpython.list cimport *
|
|
146
|
+
from cpython.object cimport *
|
|
147
|
+
from cpython.sequence cimport *
|
|
148
|
+
from cpython.mapping cimport *
|
|
149
|
+
from cpython.iterator cimport *
|
|
150
|
+
from cpython.type cimport *
|
|
151
|
+
from cpython.number cimport *
|
|
152
|
+
from cpython.bool cimport *
|
|
153
|
+
from cpython.long cimport *
|
|
154
|
+
from cpython.float cimport *
|
|
155
|
+
from cpython.complex cimport *
|
|
156
|
+
from cpython.unicode cimport *
|
|
157
|
+
from cpython.dict cimport *
|
|
158
|
+
from cpython.instance cimport *
|
|
159
|
+
from cpython.function cimport *
|
|
160
|
+
from cpython.method cimport *
|
|
161
|
+
from cpython.weakref cimport *
|
|
162
|
+
from cpython.getargs cimport *
|
|
163
|
+
from cpython.pythread cimport *
|
|
164
|
+
from cpython.pystate cimport *
|
|
165
|
+
from cpython.set cimport *
|
|
166
|
+
from cpython.buffer cimport *
|
|
167
|
+
from cpython.bytes cimport *
|
|
168
|
+
from cpython.pycapsule cimport *
|
|
169
|
+
from cpython.contextvars cimport *
|
|
170
|
+
|
|
171
|
+
#################################################################
|
|
172
|
+
# END OF DEPRECATED SECTION
|
|
173
|
+
#################################################################
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"""
|
|
2
|
+
array.pxd
|
|
3
|
+
|
|
4
|
+
Cython interface to Python's array.array module.
|
|
5
|
+
|
|
6
|
+
* 1D contiguous data view
|
|
7
|
+
* tools for fast array creation, maximum C-speed and handiness
|
|
8
|
+
* suitable as allround light weight auto-array within Cython code too
|
|
9
|
+
|
|
10
|
+
Usage:
|
|
11
|
+
|
|
12
|
+
>>> cimport array
|
|
13
|
+
|
|
14
|
+
Usage through Cython buffer interface (Py2.3+):
|
|
15
|
+
|
|
16
|
+
>>> def f(arg1, unsigned i, double dx)
|
|
17
|
+
... array.array[double] a = arg1
|
|
18
|
+
... a[i] += dx
|
|
19
|
+
|
|
20
|
+
Fast C-level new_array(_zeros), resize_array, copy_array, Py_SIZE(obj),
|
|
21
|
+
zero_array
|
|
22
|
+
|
|
23
|
+
cdef array.array[double] k = array.copy(d)
|
|
24
|
+
cdef array.array[double] n = array.array(d, Py_SIZE(d) * 2 )
|
|
25
|
+
cdef array.array[double] m = array.zeros_like(FLOAT_TEMPLATE)
|
|
26
|
+
array.resize(f, 200000)
|
|
27
|
+
|
|
28
|
+
Zero overhead with naked data pointer views by union:
|
|
29
|
+
_f, _d, _i, _c, _u, ...
|
|
30
|
+
=> Original C array speed + Python dynamic memory management
|
|
31
|
+
|
|
32
|
+
cdef array.array a = inarray
|
|
33
|
+
if
|
|
34
|
+
a._d[2] += 0.66 # use as double array without extra casting
|
|
35
|
+
|
|
36
|
+
float *subview = vector._f + 10 # starting from 10th element
|
|
37
|
+
unsigned char *subview_buffer = vector._B + 4
|
|
38
|
+
|
|
39
|
+
Suitable as lightweight arrays intra Cython without speed penalty.
|
|
40
|
+
Replacement for C stack/malloc arrays; no trouble with refcounting,
|
|
41
|
+
mem.leaks; seamless Python compatibility, buffer() optional
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
last changes: 2009-05-15 rk
|
|
45
|
+
: 2009-12-06 bp
|
|
46
|
+
: 2012-05-02 andreasvc
|
|
47
|
+
: (see revision control)
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
cdef extern from *:
|
|
51
|
+
"""
|
|
52
|
+
#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API
|
|
53
|
+
#ifdef _MSC_VER
|
|
54
|
+
#pragma message ("This module uses CPython specific internals of 'array.array', which are not available in PyPy or the limited API.")
|
|
55
|
+
#else
|
|
56
|
+
#warning This module uses CPython specific internals of 'array.array', which are not available in PyPy or the limited API.
|
|
57
|
+
#endif
|
|
58
|
+
#endif
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
from libc.string cimport memset, memcpy
|
|
62
|
+
|
|
63
|
+
from cpython.object cimport Py_SIZE
|
|
64
|
+
from cpython.ref cimport PyTypeObject, Py_TYPE
|
|
65
|
+
from cpython.exc cimport PyErr_BadArgument
|
|
66
|
+
from cpython.mem cimport PyObject_Malloc, PyObject_Free
|
|
67
|
+
|
|
68
|
+
cdef extern from *: # Hard-coded utility code hack.
|
|
69
|
+
ctypedef class array.array [object arrayobject]
|
|
70
|
+
ctypedef object GETF(array a, Py_ssize_t ix)
|
|
71
|
+
ctypedef object SETF(array a, Py_ssize_t ix, object o)
|
|
72
|
+
ctypedef struct arraydescr: # [object arraydescr]:
|
|
73
|
+
char typecode
|
|
74
|
+
int itemsize
|
|
75
|
+
GETF getitem # PyObject * (*getitem)(struct arrayobject *, Py_ssize_t);
|
|
76
|
+
SETF setitem # int (*setitem)(struct arrayobject *, Py_ssize_t, PyObject *);
|
|
77
|
+
|
|
78
|
+
ctypedef union __data_union "__Pyx_data_union":
|
|
79
|
+
# views of ob_item:
|
|
80
|
+
float* as_floats # direct float pointer access to buffer
|
|
81
|
+
double* as_doubles # double ...
|
|
82
|
+
int* as_ints
|
|
83
|
+
unsigned int *as_uints
|
|
84
|
+
unsigned char *as_uchars
|
|
85
|
+
signed char *as_schars
|
|
86
|
+
char *as_chars
|
|
87
|
+
unsigned long *as_ulongs
|
|
88
|
+
long *as_longs
|
|
89
|
+
unsigned long long *as_ulonglongs
|
|
90
|
+
long long *as_longlongs
|
|
91
|
+
short *as_shorts
|
|
92
|
+
unsigned short *as_ushorts
|
|
93
|
+
Py_UNICODE *as_pyunicodes
|
|
94
|
+
void *as_voidptr
|
|
95
|
+
|
|
96
|
+
ctypedef class array.array [object arrayobject]:
|
|
97
|
+
cdef __cythonbufferdefaults__ = {'ndim' : 1, 'mode':'c'}
|
|
98
|
+
|
|
99
|
+
cdef:
|
|
100
|
+
Py_ssize_t ob_size
|
|
101
|
+
arraydescr* ob_descr # struct arraydescr *ob_descr;
|
|
102
|
+
|
|
103
|
+
@property
|
|
104
|
+
cdef inline __data_union data(self) nogil:
|
|
105
|
+
return __Pyx_PyArray_Data(self)
|
|
106
|
+
|
|
107
|
+
def __getbuffer__(self, Py_buffer* info, int flags):
|
|
108
|
+
# This implementation of getbuffer is geared towards Cython
|
|
109
|
+
# requirements, and does not yet fulfill the PEP.
|
|
110
|
+
# In particular strided access is always provided regardless
|
|
111
|
+
# of flags
|
|
112
|
+
item_count = Py_SIZE(self)
|
|
113
|
+
|
|
114
|
+
info.suboffsets = NULL
|
|
115
|
+
info.buf = self.data.as_chars
|
|
116
|
+
info.readonly = 0
|
|
117
|
+
info.ndim = 1
|
|
118
|
+
info.itemsize = self.ob_descr.itemsize # e.g. sizeof(float)
|
|
119
|
+
info.len = info.itemsize * item_count
|
|
120
|
+
|
|
121
|
+
info.shape = <Py_ssize_t*> PyObject_Malloc(sizeof(Py_ssize_t) + 2)
|
|
122
|
+
if not info.shape:
|
|
123
|
+
raise MemoryError()
|
|
124
|
+
info.shape[0] = item_count # constant regardless of resizing
|
|
125
|
+
info.strides = &info.itemsize
|
|
126
|
+
|
|
127
|
+
info.format = <char*> (info.shape + 1)
|
|
128
|
+
info.format[0] = self.ob_descr.typecode
|
|
129
|
+
info.format[1] = 0
|
|
130
|
+
info.obj = self
|
|
131
|
+
|
|
132
|
+
def __releasebuffer__(self, Py_buffer* info):
|
|
133
|
+
PyObject_Free(info.shape)
|
|
134
|
+
|
|
135
|
+
array newarrayobject(PyTypeObject* type, Py_ssize_t size, arraydescr *descr)
|
|
136
|
+
|
|
137
|
+
__data_union __Pyx_PyArray_Data(array self) nogil
|
|
138
|
+
# fast resize/realloc
|
|
139
|
+
# not suitable for small increments; reallocation 'to the point'
|
|
140
|
+
int resize(array self, Py_ssize_t n) except -1
|
|
141
|
+
# efficient for small increments (not in Py2.3-)
|
|
142
|
+
int resize_smart(array self, Py_ssize_t n) except -1
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
cdef inline array clone(array template, Py_ssize_t length, bint zero):
|
|
146
|
+
""" fast creation of a new array, given a template array.
|
|
147
|
+
type will be same as template.
|
|
148
|
+
if zero is true, new array will be initialized with zeroes."""
|
|
149
|
+
cdef array op = newarrayobject(Py_TYPE(template), length, template.ob_descr)
|
|
150
|
+
if zero and op is not None:
|
|
151
|
+
memset(op.data.as_chars, 0, length * op.ob_descr.itemsize)
|
|
152
|
+
return op
|
|
153
|
+
|
|
154
|
+
cdef inline array copy(array self):
|
|
155
|
+
""" make a copy of an array. """
|
|
156
|
+
cdef array op = newarrayobject(Py_TYPE(self), Py_SIZE(self), self.ob_descr)
|
|
157
|
+
memcpy(op.data.as_chars, self.data.as_chars, Py_SIZE(op) * op.ob_descr.itemsize)
|
|
158
|
+
return op
|
|
159
|
+
|
|
160
|
+
cdef inline int extend_buffer(array self, char* stuff, Py_ssize_t n) except -1:
|
|
161
|
+
""" efficient appending of new stuff of same type
|
|
162
|
+
(e.g. of same array type)
|
|
163
|
+
n: number of elements (not number of bytes!) """
|
|
164
|
+
cdef Py_ssize_t itemsize = self.ob_descr.itemsize
|
|
165
|
+
cdef Py_ssize_t origsize = Py_SIZE(self)
|
|
166
|
+
resize_smart(self, origsize + n)
|
|
167
|
+
memcpy(self.data.as_chars + origsize * itemsize, stuff, n * itemsize)
|
|
168
|
+
return 0
|
|
169
|
+
|
|
170
|
+
cdef inline int extend(array self, array other) except -1:
|
|
171
|
+
""" extend array with data from another array; types must match. """
|
|
172
|
+
if self.ob_descr.typecode != other.ob_descr.typecode:
|
|
173
|
+
PyErr_BadArgument()
|
|
174
|
+
return extend_buffer(self, other.data.as_chars, Py_SIZE(other))
|
|
175
|
+
|
|
176
|
+
cdef inline void zero(array self) noexcept:
|
|
177
|
+
""" set all elements of array to zero. """
|
|
178
|
+
memset(self.data.as_chars, 0, Py_SIZE(self) * self.ob_descr.itemsize)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
|
|
2
|
+
cdef extern from "Python.h":
|
|
3
|
+
|
|
4
|
+
############################################################################
|
|
5
|
+
# 7.2.2 Boolean Objects
|
|
6
|
+
############################################################################
|
|
7
|
+
|
|
8
|
+
ctypedef class __builtin__.bool [object PyLongObject]:
|
|
9
|
+
pass
|
|
10
|
+
|
|
11
|
+
# Booleans in Python are implemented as a subclass of
|
|
12
|
+
# integers. There are only two booleans, Py_False and Py_True. As
|
|
13
|
+
# such, the normal creation and deletion functions don't apply to
|
|
14
|
+
# booleans. The following macros are available, however.
|
|
15
|
+
|
|
16
|
+
bint PyBool_Check(object o)
|
|
17
|
+
# Return true if o is of type PyBool_Type.
|
|
18
|
+
|
|
19
|
+
#PyObject* Py_False
|
|
20
|
+
# The Python False object. This object has no methods. It needs to
|
|
21
|
+
# be treated just like any other object with respect to reference
|
|
22
|
+
# counts.
|
|
23
|
+
|
|
24
|
+
#PyObject* Py_True
|
|
25
|
+
# The Python True object. This object has no methods. It needs to
|
|
26
|
+
# be treated just like any other object with respect to reference
|
|
27
|
+
# counts.
|
|
28
|
+
|
|
29
|
+
# Py_RETURN_FALSE
|
|
30
|
+
# Return Py_False from a function, properly incrementing its reference count.
|
|
31
|
+
|
|
32
|
+
# Py_RETURN_TRUE
|
|
33
|
+
# Return Py_True from a function, properly incrementing its reference count.
|
|
34
|
+
|
|
35
|
+
object PyBool_FromLong(long v)
|
|
36
|
+
# Return value: New reference.
|
|
37
|
+
# Return a new reference to Py_True or Py_False depending on the truth value of v.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Please see the Python header files (object.h/abstract.h) for docs
|
|
2
|
+
|
|
3
|
+
cdef extern from "Python.h":
|
|
4
|
+
|
|
5
|
+
cdef enum:
|
|
6
|
+
PyBUF_MAX_NDIM
|
|
7
|
+
|
|
8
|
+
cdef enum:
|
|
9
|
+
PyBUF_SIMPLE,
|
|
10
|
+
PyBUF_WRITABLE,
|
|
11
|
+
PyBUF_WRITEABLE, # backwards compatibility
|
|
12
|
+
PyBUF_FORMAT,
|
|
13
|
+
PyBUF_ND,
|
|
14
|
+
PyBUF_STRIDES,
|
|
15
|
+
PyBUF_C_CONTIGUOUS,
|
|
16
|
+
PyBUF_F_CONTIGUOUS,
|
|
17
|
+
PyBUF_ANY_CONTIGUOUS,
|
|
18
|
+
PyBUF_INDIRECT,
|
|
19
|
+
PyBUF_CONTIG,
|
|
20
|
+
PyBUF_CONTIG_RO,
|
|
21
|
+
PyBUF_STRIDED,
|
|
22
|
+
PyBUF_STRIDED_RO,
|
|
23
|
+
PyBUF_RECORDS,
|
|
24
|
+
PyBUF_RECORDS_RO,
|
|
25
|
+
PyBUF_FULL,
|
|
26
|
+
PyBUF_FULL_RO,
|
|
27
|
+
PyBUF_READ,
|
|
28
|
+
PyBUF_WRITE,
|
|
29
|
+
PyBUF_SHADOW
|
|
30
|
+
|
|
31
|
+
bint PyObject_CheckBuffer(object obj)
|
|
32
|
+
# Return 1 if obj supports the buffer interface otherwise 0.
|
|
33
|
+
|
|
34
|
+
int PyObject_GetBuffer(object obj, Py_buffer *view, int flags) except -1
|
|
35
|
+
# Export obj into a Py_buffer, view. These arguments must never be
|
|
36
|
+
# NULL. The flags argument is a bit field indicating what kind of
|
|
37
|
+
# buffer the caller is prepared to deal with and therefore what
|
|
38
|
+
# kind of buffer the exporter is allowed to return. The buffer
|
|
39
|
+
# interface allows for complicated memory sharing possibilities,
|
|
40
|
+
# but some caller may not be able to handle all the complexity but
|
|
41
|
+
# may want to see if the exporter will let them take a simpler
|
|
42
|
+
# view to its memory.
|
|
43
|
+
|
|
44
|
+
# Some exporters may not be able to share memory in every possible
|
|
45
|
+
# way and may need to raise errors to signal to some consumers
|
|
46
|
+
# that something is just not possible. These errors should be a
|
|
47
|
+
# BufferError unless there is another error that is actually
|
|
48
|
+
# causing the problem. The exporter can use flags information to
|
|
49
|
+
# simplify how much of the Py_buffer structure is filled in with
|
|
50
|
+
# non-default values and/or raise an error if the object can’t
|
|
51
|
+
# support a simpler view of its memory.
|
|
52
|
+
|
|
53
|
+
# 0 is returned on success and -1 on error.
|
|
54
|
+
|
|
55
|
+
void PyBuffer_Release(Py_buffer *view)
|
|
56
|
+
# Release the buffer view. This should be called when the buffer
|
|
57
|
+
# is no longer being used as it may free memory from it.
|
|
58
|
+
|
|
59
|
+
void* PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices)
|
|
60
|
+
# ??
|
|
61
|
+
|
|
62
|
+
Py_ssize_t PyBuffer_SizeFromFormat(char *) # actually const char
|
|
63
|
+
# Return the implied ~Py_buffer.itemsize from the struct-stype
|
|
64
|
+
# ~Py_buffer.format
|
|
65
|
+
|
|
66
|
+
int PyBuffer_ToContiguous(void *buf, Py_buffer *view, Py_ssize_t len, char fort)
|
|
67
|
+
# ??
|
|
68
|
+
|
|
69
|
+
int PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char fort)
|
|
70
|
+
# ??
|
|
71
|
+
|
|
72
|
+
int PyObject_CopyToObject(object obj, void *buf, Py_ssize_t len, char fortran) except -1
|
|
73
|
+
# Copy len bytes of data pointed to by the contiguous chunk of
|
|
74
|
+
# memory pointed to by buf into the buffer exported by obj. The
|
|
75
|
+
# buffer must of course be writable. Return 0 on success and
|
|
76
|
+
# return -1 and raise an error on failure. If the object does not
|
|
77
|
+
# have a writable buffer, then an error is raised. If fortran is
|
|
78
|
+
# 'F', then if the object is multi-dimensional, then the data will
|
|
79
|
+
# be copied into the array in Fortran-style (first dimension
|
|
80
|
+
# varies the fastest). If fortran is 'C', then the data will be
|
|
81
|
+
# copied into the array in C-style (last dimension varies the
|
|
82
|
+
# fastest). If fortran is 'A', then it does not matter and the
|
|
83
|
+
# copy will be made in whatever way is more efficient.
|
|
84
|
+
|
|
85
|
+
int PyObject_CopyData(object dest, object src) except -1
|
|
86
|
+
# Copy the data from the src buffer to the buffer of destination
|
|
87
|
+
|
|
88
|
+
bint PyBuffer_IsContiguous(Py_buffer *view, char fort)
|
|
89
|
+
# Return 1 if the memory defined by the view is C-style (fortran
|
|
90
|
+
# is 'C') or Fortran-style (fortran is 'F') contiguous or either
|
|
91
|
+
# one (fortran is 'A'). Return 0 otherwise.
|
|
92
|
+
|
|
93
|
+
void PyBuffer_FillContiguousStrides(int ndims,
|
|
94
|
+
Py_ssize_t *shape,
|
|
95
|
+
Py_ssize_t *strides,
|
|
96
|
+
Py_ssize_t itemsize,
|
|
97
|
+
char fort)
|
|
98
|
+
# Fill the strides array with byte-strides of a contiguous
|
|
99
|
+
# (Fortran-style if fort is 'F' or C-style otherwise) array of the
|
|
100
|
+
# given shape with the given number of bytes per element.
|
|
101
|
+
|
|
102
|
+
int PyBuffer_FillInfo(Py_buffer *view, object exporter, void *buf,
|
|
103
|
+
Py_ssize_t len, int readonly, int flags) except -1
|
|
104
|
+
# Fill in a buffer-info structure, view, correctly for an exporter
|
|
105
|
+
# that can only share a contiguous chunk of memory of “unsigned
|
|
106
|
+
# bytes” of the given length. Return 0 on success and -1 (with
|
|
107
|
+
# raising an error) on error.
|
|
108
|
+
|
|
109
|
+
# DEPRECATED HERE: do not cimport from here, cimport from cpython.object instead
|
|
110
|
+
object PyObject_Format(object obj, object format_spec)
|
|
111
|
+
# Takes an arbitrary object and returns the result of calling
|
|
112
|
+
# obj.__format__(format_spec).
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from .object cimport PyObject
|
|
2
|
+
|
|
3
|
+
cdef extern from "Python.h":
|
|
4
|
+
bint PyByteArray_Check(object o)
|
|
5
|
+
# Return true if the object o is a bytearray object or an instance of a subtype of the bytearray type.
|
|
6
|
+
|
|
7
|
+
bint PyByteArray_CheckExact(object o)
|
|
8
|
+
# Return true if the object o is a bytearray object, but not an instance of a subtype of the bytearray type.
|
|
9
|
+
|
|
10
|
+
bytearray PyByteArray_FromObject(object o)
|
|
11
|
+
# Return a new bytearray object from any object, o, that implements the buffer protocol.
|
|
12
|
+
|
|
13
|
+
bytearray PyByteArray_FromStringAndSize(char *string, Py_ssize_t len)
|
|
14
|
+
# Create a new bytearray object from string and its length, len. On failure, NULL is returned.
|
|
15
|
+
|
|
16
|
+
bytearray PyByteArray_Concat(object a, object b)
|
|
17
|
+
# Concat bytearrays a and b and return a new bytearray with the result.
|
|
18
|
+
|
|
19
|
+
Py_ssize_t PyByteArray_Size(object bytearray)
|
|
20
|
+
# Return the size of bytearray after checking for a NULL pointer.
|
|
21
|
+
|
|
22
|
+
char* PyByteArray_AsString(object bytearray)
|
|
23
|
+
# Return the contents of bytearray as a char array after checking for a NULL pointer.
|
|
24
|
+
# The returned array always has an extra null byte appended.
|
|
25
|
+
|
|
26
|
+
int PyByteArray_Resize(object bytearray, Py_ssize_t len) except -1
|
|
27
|
+
# Resize the internal buffer of bytearray to len.
|
|
28
|
+
|
|
29
|
+
char* PyByteArray_AS_STRING(object bytearray)
|
|
30
|
+
# Macro version of PyByteArray_AsString().
|
|
31
|
+
|
|
32
|
+
Py_ssize_t PyByteArray_GET_SIZE(object bytearray)
|
|
33
|
+
# Macro version of PyByteArray_Size().
|