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.
Files changed (333) hide show
  1. Cython/Build/BuildExecutable.py +169 -0
  2. Cython/Build/Cache.py +199 -0
  3. Cython/Build/Cythonize.py +350 -0
  4. Cython/Build/Dependencies.py +1314 -0
  5. Cython/Build/Distutils.py +1 -0
  6. Cython/Build/Inline.py +463 -0
  7. Cython/Build/IpythonMagic.py +560 -0
  8. Cython/Build/SharedModule.py +94 -0
  9. Cython/Build/Tests/TestCyCache.py +194 -0
  10. Cython/Build/Tests/TestCythonizeArgsParser.py +481 -0
  11. Cython/Build/Tests/TestDependencies.py +133 -0
  12. Cython/Build/Tests/TestInline.py +177 -0
  13. Cython/Build/Tests/TestIpythonMagic.py +287 -0
  14. Cython/Build/Tests/TestRecythonize.py +212 -0
  15. Cython/Build/Tests/TestStripLiterals.py +155 -0
  16. Cython/Build/Tests/__init__.py +1 -0
  17. Cython/Build/__init__.py +11 -0
  18. Cython/CodeWriter.py +815 -0
  19. Cython/Compiler/AnalysedTreeTransforms.py +97 -0
  20. Cython/Compiler/Annotate.py +328 -0
  21. Cython/Compiler/AutoDocTransforms.py +320 -0
  22. Cython/Compiler/Buffer.py +680 -0
  23. Cython/Compiler/Builtin.py +984 -0
  24. Cython/Compiler/CmdLine.py +263 -0
  25. Cython/Compiler/Code.pxd +149 -0
  26. Cython/Compiler/Code.py +3746 -0
  27. Cython/Compiler/Code.pyd +0 -0
  28. Cython/Compiler/CodeGeneration.py +33 -0
  29. Cython/Compiler/CythonScope.py +191 -0
  30. Cython/Compiler/Dataclass.py +864 -0
  31. Cython/Compiler/DebugFlags.py +24 -0
  32. Cython/Compiler/Errors.py +297 -0
  33. Cython/Compiler/ExprNodes.py +15562 -0
  34. Cython/Compiler/FlowControl.pxd +97 -0
  35. Cython/Compiler/FlowControl.py +1451 -0
  36. Cython/Compiler/FlowControl.pyd +0 -0
  37. Cython/Compiler/FusedNode.py +971 -0
  38. Cython/Compiler/FusedNode.pyd +0 -0
  39. Cython/Compiler/Future.py +16 -0
  40. Cython/Compiler/Interpreter.py +57 -0
  41. Cython/Compiler/Lexicon.py +421 -0
  42. Cython/Compiler/LineTable.py +114 -0
  43. Cython/Compiler/LineTable.pyd +0 -0
  44. Cython/Compiler/Main.py +857 -0
  45. Cython/Compiler/MatchCaseNodes.py +259 -0
  46. Cython/Compiler/MemoryView.py +905 -0
  47. Cython/Compiler/ModuleNode.py +4235 -0
  48. Cython/Compiler/Naming.py +363 -0
  49. Cython/Compiler/Nodes.py +10831 -0
  50. Cython/Compiler/Optimize.py +5288 -0
  51. Cython/Compiler/Options.py +843 -0
  52. Cython/Compiler/ParseTreeTransforms.pxd +78 -0
  53. Cython/Compiler/ParseTreeTransforms.py +4638 -0
  54. Cython/Compiler/Parsing.pxd +9 -0
  55. Cython/Compiler/Parsing.py +4775 -0
  56. Cython/Compiler/Parsing.pyd +0 -0
  57. Cython/Compiler/Pipeline.py +439 -0
  58. Cython/Compiler/PyrexTypes.py +5870 -0
  59. Cython/Compiler/Pythran.py +232 -0
  60. Cython/Compiler/Scanning.pxd +48 -0
  61. Cython/Compiler/Scanning.py +701 -0
  62. Cython/Compiler/Scanning.pyd +0 -0
  63. Cython/Compiler/StringEncoding.py +298 -0
  64. Cython/Compiler/Symtab.py +3073 -0
  65. Cython/Compiler/Tests/TestBuffer.py +105 -0
  66. Cython/Compiler/Tests/TestBuiltin.py +72 -0
  67. Cython/Compiler/Tests/TestCmdLine.py +586 -0
  68. Cython/Compiler/Tests/TestCode.py +144 -0
  69. Cython/Compiler/Tests/TestFlowControl.py +65 -0
  70. Cython/Compiler/Tests/TestGrammar.py +202 -0
  71. Cython/Compiler/Tests/TestMemView.py +71 -0
  72. Cython/Compiler/Tests/TestParseTreeTransforms.py +285 -0
  73. Cython/Compiler/Tests/TestScanning.py +134 -0
  74. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  75. Cython/Compiler/Tests/TestStringEncoding.py +21 -0
  76. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  77. Cython/Compiler/Tests/TestTreePath.py +103 -0
  78. Cython/Compiler/Tests/TestTypes.py +75 -0
  79. Cython/Compiler/Tests/TestUtilityLoad.py +112 -0
  80. Cython/Compiler/Tests/TestVisitor.py +61 -0
  81. Cython/Compiler/Tests/Utils.py +36 -0
  82. Cython/Compiler/Tests/__init__.py +1 -0
  83. Cython/Compiler/TreeFragment.py +278 -0
  84. Cython/Compiler/TreePath.py +303 -0
  85. Cython/Compiler/TypeInference.py +591 -0
  86. Cython/Compiler/TypeSlots.py +1174 -0
  87. Cython/Compiler/UFuncs.py +311 -0
  88. Cython/Compiler/UtilNodes.py +389 -0
  89. Cython/Compiler/UtilityCode.py +344 -0
  90. Cython/Compiler/Version.py +8 -0
  91. Cython/Compiler/Visitor.pxd +53 -0
  92. Cython/Compiler/Visitor.py +861 -0
  93. Cython/Compiler/Visitor.pyd +0 -0
  94. Cython/Compiler/__init__.py +1 -0
  95. Cython/Coverage.py +448 -0
  96. Cython/Debugger/Cygdb.py +177 -0
  97. Cython/Debugger/DebugWriter.py +82 -0
  98. Cython/Debugger/Tests/TestLibCython.py +275 -0
  99. Cython/Debugger/Tests/__init__.py +1 -0
  100. Cython/Debugger/Tests/cfuncs.c +8 -0
  101. Cython/Debugger/Tests/codefile +49 -0
  102. Cython/Debugger/Tests/test_libcython_in_gdb.py +578 -0
  103. Cython/Debugger/Tests/test_libpython_in_gdb.py +90 -0
  104. Cython/Debugger/__init__.py +1 -0
  105. Cython/Debugger/libcython.py +1548 -0
  106. Cython/Debugger/libpython.py +2821 -0
  107. Cython/Debugging.py +20 -0
  108. Cython/Distutils/__init__.py +2 -0
  109. Cython/Distutils/build_ext.py +139 -0
  110. Cython/Distutils/extension.py +96 -0
  111. Cython/Distutils/old_build_ext.py +351 -0
  112. Cython/Includes/cpython/__init__.pxd +173 -0
  113. Cython/Includes/cpython/array.pxd +178 -0
  114. Cython/Includes/cpython/bool.pxd +37 -0
  115. Cython/Includes/cpython/buffer.pxd +112 -0
  116. Cython/Includes/cpython/bytearray.pxd +33 -0
  117. Cython/Includes/cpython/bytes.pxd +200 -0
  118. Cython/Includes/cpython/cellobject.pxd +35 -0
  119. Cython/Includes/cpython/ceval.pxd +8 -0
  120. Cython/Includes/cpython/codecs.pxd +121 -0
  121. Cython/Includes/cpython/complex.pxd +60 -0
  122. Cython/Includes/cpython/contextvars.pxd +145 -0
  123. Cython/Includes/cpython/conversion.pxd +36 -0
  124. Cython/Includes/cpython/datetime.pxd +395 -0
  125. Cython/Includes/cpython/descr.pxd +26 -0
  126. Cython/Includes/cpython/dict.pxd +187 -0
  127. Cython/Includes/cpython/exc.pxd +263 -0
  128. Cython/Includes/cpython/fileobject.pxd +57 -0
  129. Cython/Includes/cpython/float.pxd +47 -0
  130. Cython/Includes/cpython/function.pxd +65 -0
  131. Cython/Includes/cpython/genobject.pxd +25 -0
  132. Cython/Includes/cpython/getargs.pxd +12 -0
  133. Cython/Includes/cpython/instance.pxd +25 -0
  134. Cython/Includes/cpython/iterator.pxd +36 -0
  135. Cython/Includes/cpython/iterobject.pxd +24 -0
  136. Cython/Includes/cpython/list.pxd +92 -0
  137. Cython/Includes/cpython/long.pxd +149 -0
  138. Cython/Includes/cpython/longintrepr.pxd +14 -0
  139. Cython/Includes/cpython/mapping.pxd +63 -0
  140. Cython/Includes/cpython/marshal.pxd +66 -0
  141. Cython/Includes/cpython/mem.pxd +120 -0
  142. Cython/Includes/cpython/memoryview.pxd +50 -0
  143. Cython/Includes/cpython/method.pxd +49 -0
  144. Cython/Includes/cpython/module.pxd +208 -0
  145. Cython/Includes/cpython/number.pxd +258 -0
  146. Cython/Includes/cpython/object.pxd +433 -0
  147. Cython/Includes/cpython/pycapsule.pxd +143 -0
  148. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  149. Cython/Includes/cpython/pyport.pxd +8 -0
  150. Cython/Includes/cpython/pystate.pxd +95 -0
  151. Cython/Includes/cpython/pythread.pxd +53 -0
  152. Cython/Includes/cpython/ref.pxd +141 -0
  153. Cython/Includes/cpython/sequence.pxd +134 -0
  154. Cython/Includes/cpython/set.pxd +119 -0
  155. Cython/Includes/cpython/slice.pxd +70 -0
  156. Cython/Includes/cpython/time.pxd +129 -0
  157. Cython/Includes/cpython/tuple.pxd +72 -0
  158. Cython/Includes/cpython/type.pxd +53 -0
  159. Cython/Includes/cpython/unicode.pxd +639 -0
  160. Cython/Includes/cpython/version.pxd +32 -0
  161. Cython/Includes/cpython/weakref.pxd +78 -0
  162. Cython/Includes/libc/__init__.pxd +1 -0
  163. Cython/Includes/libc/complex.pxd +35 -0
  164. Cython/Includes/libc/errno.pxd +127 -0
  165. Cython/Includes/libc/float.pxd +43 -0
  166. Cython/Includes/libc/limits.pxd +28 -0
  167. Cython/Includes/libc/locale.pxd +46 -0
  168. Cython/Includes/libc/math.pxd +209 -0
  169. Cython/Includes/libc/setjmp.pxd +10 -0
  170. Cython/Includes/libc/signal.pxd +64 -0
  171. Cython/Includes/libc/stddef.pxd +9 -0
  172. Cython/Includes/libc/stdint.pxd +105 -0
  173. Cython/Includes/libc/stdio.pxd +80 -0
  174. Cython/Includes/libc/stdlib.pxd +72 -0
  175. Cython/Includes/libc/string.pxd +50 -0
  176. Cython/Includes/libc/threads.pxd +234 -0
  177. Cython/Includes/libc/time.pxd +52 -0
  178. Cython/Includes/libcpp/__init__.pxd +4 -0
  179. Cython/Includes/libcpp/algorithm.pxd +320 -0
  180. Cython/Includes/libcpp/any.pxd +16 -0
  181. Cython/Includes/libcpp/atomic.pxd +59 -0
  182. Cython/Includes/libcpp/barrier.pxd +22 -0
  183. Cython/Includes/libcpp/bit.pxd +29 -0
  184. Cython/Includes/libcpp/cast.pxd +12 -0
  185. Cython/Includes/libcpp/cmath.pxd +518 -0
  186. Cython/Includes/libcpp/complex.pxd +106 -0
  187. Cython/Includes/libcpp/condition_variable.pxd +322 -0
  188. Cython/Includes/libcpp/deque.pxd +165 -0
  189. Cython/Includes/libcpp/exception.pxd +86 -0
  190. Cython/Includes/libcpp/execution.pxd +15 -0
  191. Cython/Includes/libcpp/forward_list.pxd +63 -0
  192. Cython/Includes/libcpp/functional.pxd +26 -0
  193. Cython/Includes/libcpp/future.pxd +103 -0
  194. Cython/Includes/libcpp/iterator.pxd +34 -0
  195. Cython/Includes/libcpp/latch.pxd +17 -0
  196. Cython/Includes/libcpp/limits.pxd +61 -0
  197. Cython/Includes/libcpp/list.pxd +117 -0
  198. Cython/Includes/libcpp/map.pxd +252 -0
  199. Cython/Includes/libcpp/memory.pxd +115 -0
  200. Cython/Includes/libcpp/mutex.pxd +387 -0
  201. Cython/Includes/libcpp/numbers.pxd +15 -0
  202. Cython/Includes/libcpp/numeric.pxd +131 -0
  203. Cython/Includes/libcpp/optional.pxd +34 -0
  204. Cython/Includes/libcpp/pair.pxd +1 -0
  205. Cython/Includes/libcpp/queue.pxd +25 -0
  206. Cython/Includes/libcpp/random.pxd +166 -0
  207. Cython/Includes/libcpp/semaphore.pxd +43 -0
  208. Cython/Includes/libcpp/set.pxd +228 -0
  209. Cython/Includes/libcpp/shared_mutex.pxd +96 -0
  210. Cython/Includes/libcpp/span.pxd +87 -0
  211. Cython/Includes/libcpp/stack.pxd +11 -0
  212. Cython/Includes/libcpp/stop_token.pxd +117 -0
  213. Cython/Includes/libcpp/string.pxd +355 -0
  214. Cython/Includes/libcpp/string_view.pxd +183 -0
  215. Cython/Includes/libcpp/typeindex.pxd +15 -0
  216. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  217. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  218. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  219. Cython/Includes/libcpp/utility.pxd +30 -0
  220. Cython/Includes/libcpp/vector.pxd +186 -0
  221. Cython/Includes/numpy/math.pxd +150 -0
  222. Cython/Includes/openmp.pxd +50 -0
  223. Cython/Includes/posix/__init__.pxd +1 -0
  224. Cython/Includes/posix/dlfcn.pxd +14 -0
  225. Cython/Includes/posix/fcntl.pxd +86 -0
  226. Cython/Includes/posix/ioctl.pxd +4 -0
  227. Cython/Includes/posix/mman.pxd +101 -0
  228. Cython/Includes/posix/resource.pxd +57 -0
  229. Cython/Includes/posix/select.pxd +21 -0
  230. Cython/Includes/posix/signal.pxd +73 -0
  231. Cython/Includes/posix/stat.pxd +98 -0
  232. Cython/Includes/posix/stdio.pxd +37 -0
  233. Cython/Includes/posix/stdlib.pxd +29 -0
  234. Cython/Includes/posix/strings.pxd +9 -0
  235. Cython/Includes/posix/time.pxd +71 -0
  236. Cython/Includes/posix/types.pxd +30 -0
  237. Cython/Includes/posix/uio.pxd +26 -0
  238. Cython/Includes/posix/unistd.pxd +271 -0
  239. Cython/Includes/posix/wait.pxd +38 -0
  240. Cython/Plex/Actions.pxd +24 -0
  241. Cython/Plex/Actions.py +119 -0
  242. Cython/Plex/Actions.pyd +0 -0
  243. Cython/Plex/DFA.pxd +14 -0
  244. Cython/Plex/DFA.py +164 -0
  245. Cython/Plex/DFA.pyd +0 -0
  246. Cython/Plex/Errors.py +48 -0
  247. Cython/Plex/Lexicons.py +178 -0
  248. Cython/Plex/Machines.pxd +36 -0
  249. Cython/Plex/Machines.py +238 -0
  250. Cython/Plex/Machines.pyd +0 -0
  251. Cython/Plex/Regexps.py +535 -0
  252. Cython/Plex/Scanners.pxd +45 -0
  253. Cython/Plex/Scanners.py +328 -0
  254. Cython/Plex/Scanners.pyd +0 -0
  255. Cython/Plex/Transitions.pxd +14 -0
  256. Cython/Plex/Transitions.py +239 -0
  257. Cython/Plex/Transitions.pyd +0 -0
  258. Cython/Plex/__init__.py +34 -0
  259. Cython/Runtime/__init__.py +1 -0
  260. Cython/Runtime/refnanny.pyd +0 -0
  261. Cython/Runtime/refnanny.pyx +237 -0
  262. Cython/Shadow.py +690 -0
  263. Cython/Shadow.pyi +521 -0
  264. Cython/StringIOTree.py +170 -0
  265. Cython/StringIOTree.pyd +0 -0
  266. Cython/Tempita/__init__.py +4 -0
  267. Cython/Tempita/_looper.py +154 -0
  268. Cython/Tempita/_tempita.py +1091 -0
  269. Cython/Tempita/_tempita.pyd +0 -0
  270. Cython/TestUtils.py +422 -0
  271. Cython/Tests/TestCodeWriter.py +128 -0
  272. Cython/Tests/TestCythonUtils.py +202 -0
  273. Cython/Tests/TestJediTyper.py +223 -0
  274. Cython/Tests/TestShadow.py +114 -0
  275. Cython/Tests/TestStringIOTree.py +67 -0
  276. Cython/Tests/TestTestUtils.py +90 -0
  277. Cython/Tests/__init__.py +1 -0
  278. Cython/Tests/xmlrunner.py +390 -0
  279. Cython/Utility/AsyncGen.c +1031 -0
  280. Cython/Utility/Buffer.c +865 -0
  281. Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
  282. Cython/Utility/Builtins.c +810 -0
  283. Cython/Utility/CConvert.pyx +134 -0
  284. Cython/Utility/CMath.c +104 -0
  285. Cython/Utility/CommonStructures.c +226 -0
  286. Cython/Utility/Complex.c +378 -0
  287. Cython/Utility/Coroutine.c +2300 -0
  288. Cython/Utility/CpdefEnums.pyx +103 -0
  289. Cython/Utility/CppConvert.pyx +282 -0
  290. Cython/Utility/CppSupport.cpp +151 -0
  291. Cython/Utility/CythonFunction.c +1832 -0
  292. Cython/Utility/Dataclasses.c +101 -0
  293. Cython/Utility/Embed.c +121 -0
  294. Cython/Utility/Exceptions.c +1016 -0
  295. Cython/Utility/ExtensionTypes.c +996 -0
  296. Cython/Utility/FunctionArguments.c +1043 -0
  297. Cython/Utility/FusedFunction.pyx +44 -0
  298. Cython/Utility/ImportExport.c +907 -0
  299. Cython/Utility/MemoryView.pxd +188 -0
  300. Cython/Utility/MemoryView.pyx +1482 -0
  301. Cython/Utility/MemoryView_C.c +927 -0
  302. Cython/Utility/ModuleSetupCode.c +3203 -0
  303. Cython/Utility/NumpyImportArray.c +46 -0
  304. Cython/Utility/ObjectHandling.c +3273 -0
  305. Cython/Utility/Optimize.c +1603 -0
  306. Cython/Utility/Overflow.c +384 -0
  307. Cython/Utility/Printing.c +86 -0
  308. Cython/Utility/Profile.c +732 -0
  309. Cython/Utility/StringTools.c +1379 -0
  310. Cython/Utility/Synchronization.c +399 -0
  311. Cython/Utility/TString.c +356 -0
  312. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  313. Cython/Utility/TestCythonScope.pyx +75 -0
  314. Cython/Utility/TestUtilityLoader.c +12 -0
  315. Cython/Utility/TypeConversion.c +1385 -0
  316. Cython/Utility/UFuncs.pyx +50 -0
  317. Cython/Utility/UFuncs_C.c +89 -0
  318. Cython/Utility/__init__.py +28 -0
  319. Cython/Utility/arrayarray.h +167 -0
  320. Cython/Utils.py +687 -0
  321. Cython/Utils.pyd +0 -0
  322. Cython/__init__.py +10 -0
  323. Cython/__init__.pyi +7 -0
  324. Cython/py.typed +0 -0
  325. cython-3.2.0.dist-info/METADATA +85 -0
  326. cython-3.2.0.dist-info/RECORD +333 -0
  327. cython-3.2.0.dist-info/WHEEL +5 -0
  328. cython-3.2.0.dist-info/entry_points.txt +4 -0
  329. cython-3.2.0.dist-info/top_level.txt +3 -0
  330. cython.py +29 -0
  331. pyximport/__init__.py +4 -0
  332. pyximport/pyxbuild.py +160 -0
  333. pyximport/pyximport.py +482 -0
@@ -0,0 +1,95 @@
1
+ # Thread and interpreter state structures and their interfaces
2
+
3
+ from .object cimport PyObject
4
+
5
+ cdef extern from "Python.h":
6
+
7
+ # We make these an opaque types. If the user wants specific attributes,
8
+ # they can be declared manually.
9
+
10
+ ctypedef long PY_INT64_T # FIXME: Py2.7+, not defined here but used here
11
+
12
+ ctypedef struct PyInterpreterState:
13
+ pass
14
+
15
+ ctypedef struct PyThreadState:
16
+ pass
17
+
18
+ ctypedef struct PyFrameObject:
19
+ pass
20
+
21
+ # This is not actually a struct, but make sure it can never be coerced to
22
+ # an int or used in arithmetic expressions
23
+ ctypedef struct PyGILState_STATE:
24
+ pass
25
+
26
+ # The type of the trace function registered using PyEval_SetProfile() and
27
+ # PyEval_SetTrace().
28
+ # Py_tracefunc return -1 when raising an exception, or 0 for success.
29
+ ctypedef int (*Py_tracefunc)(PyObject *, PyFrameObject *, int, PyObject *)
30
+
31
+ # The following values are used for 'what' for tracefunc functions
32
+ enum:
33
+ PyTrace_CALL
34
+ PyTrace_EXCEPTION
35
+ PyTrace_LINE
36
+ PyTrace_RETURN
37
+ PyTrace_C_CALL
38
+ PyTrace_C_EXCEPTION
39
+ PyTrace_C_RETURN
40
+
41
+
42
+ PyInterpreterState * PyInterpreterState_New()
43
+ void PyInterpreterState_Clear(PyInterpreterState *)
44
+ void PyInterpreterState_Delete(PyInterpreterState *)
45
+ PY_INT64_T PyInterpreterState_GetID(PyInterpreterState *)
46
+
47
+ PyThreadState * PyThreadState_New(PyInterpreterState *)
48
+ void PyThreadState_Clear(PyThreadState *)
49
+ void PyThreadState_Delete(PyThreadState *)
50
+
51
+ PyThreadState * PyThreadState_Get()
52
+ PyThreadState * PyThreadState_Swap(PyThreadState *) # NOTE: DO NOT USE IN CYTHON CODE !
53
+ PyObject * PyThreadState_GetDict()
54
+ int PyThreadState_SetAsyncExc(long, PyObject *)
55
+
56
+ # Ensure that the current thread is ready to call the Python
57
+ # C API, regardless of the current state of Python, or of its
58
+ # thread lock. This may be called as many times as desired
59
+ # by a thread so long as each call is matched with a call to
60
+ # PyGILState_Release(). In general, other thread-state APIs may
61
+ # be used between _Ensure() and _Release() calls, so long as the
62
+ # thread-state is restored to its previous state before the Release().
63
+ # For example, normal use of the Py_BEGIN_ALLOW_THREADS/
64
+ # Py_END_ALLOW_THREADS macros are acceptable.
65
+
66
+ # The return value is an opaque "handle" to the thread state when
67
+ # PyGILState_Ensure() was called, and must be passed to
68
+ # PyGILState_Release() to ensure Python is left in the same state. Even
69
+ # though recursive calls are allowed, these handles can *not* be shared -
70
+ # each unique call to PyGILState_Ensure must save the handle for its
71
+ # call to PyGILState_Release.
72
+
73
+ # When the function returns, the current thread will hold the GIL.
74
+
75
+ # Failure is a fatal error.
76
+ PyGILState_STATE PyGILState_Ensure()
77
+
78
+ # Release any resources previously acquired. After this call, Python's
79
+ # state will be the same as it was prior to the corresponding
80
+ # PyGILState_Ensure() call (but generally this state will be unknown to
81
+ # the caller, hence the use of the GILState API.)
82
+
83
+ # Every call to PyGILState_Ensure must be matched by a call to
84
+ # PyGILState_Release on the same thread.
85
+ void PyGILState_Release(PyGILState_STATE)
86
+
87
+ # Return 1 if the current thread holds the GIL and 0 otherwise.
88
+ int PyGILState_Check()
89
+
90
+ # Routines for advanced debuggers, requested by David Beazley.
91
+ # Don't use unless you know what you are doing!
92
+ PyInterpreterState * PyInterpreterState_Head()
93
+ PyInterpreterState * PyInterpreterState_Next(PyInterpreterState *)
94
+ PyThreadState * PyInterpreterState_ThreadHead(PyInterpreterState *)
95
+ PyThreadState * PyThreadState_Next(PyThreadState *)
@@ -0,0 +1,53 @@
1
+
2
+
3
+ cdef extern from "pythread.h":
4
+
5
+ ctypedef void *PyThread_type_lock
6
+ ctypedef void *PyThread_type_sema
7
+
8
+ void PyThread_init_thread()
9
+ long PyThread_start_new_thread(void (*)(void *), void *) # FIXME: legacy
10
+ #unsigned long PyThread_start_new_thread(void (*)(void *), void *) # returned 'long' before Py3.7
11
+ void PyThread_exit_thread()
12
+ long PyThread_get_thread_ident() # FIXME: legacy
13
+ #unsigned long PyThread_get_thread_ident() # returned 'long' before Py3.7
14
+
15
+ PyThread_type_lock PyThread_allocate_lock()
16
+ void PyThread_free_lock(PyThread_type_lock)
17
+ int PyThread_acquire_lock(PyThread_type_lock, int mode) nogil
18
+ void PyThread_release_lock(PyThread_type_lock) nogil
19
+
20
+ enum:
21
+ # 'mode' in PyThread_acquire_lock()
22
+ WAIT_LOCK # 1
23
+ NOWAIT_LOCK # 0
24
+
25
+ ctypedef enum PyLockStatus:
26
+ # return values of PyThread_acquire_lock() in CPython 3.2+
27
+ PY_LOCK_FAILURE = 0
28
+ PY_LOCK_ACQUIRED = 1
29
+ PY_LOCK_INTR
30
+
31
+ size_t PyThread_get_stacksize()
32
+ int PyThread_set_stacksize(size_t)
33
+
34
+ # Thread Local Storage (TLS) API deprecated in CPython 3.7+
35
+ int PyThread_create_key()
36
+ void PyThread_delete_key(int)
37
+ int PyThread_set_key_value(int, void *)
38
+ void * PyThread_get_key_value(int)
39
+ void PyThread_delete_key_value(int key)
40
+
41
+ # Cleanup after a fork
42
+ void PyThread_ReInitTLS()
43
+
44
+ # Thread Specific Storage (TSS) API in CPython 3.7+ (also backported)
45
+ #ctypedef struct Py_tss_t: pass # Cython built-in type
46
+ Py_tss_t Py_tss_NEEDS_INIT # Not normally useful: Cython auto-initialises declared "Py_tss_t" variables.
47
+ Py_tss_t * PyThread_tss_alloc()
48
+ void PyThread_tss_free(Py_tss_t *key)
49
+ int PyThread_tss_is_created(Py_tss_t *key)
50
+ int PyThread_tss_create(Py_tss_t *key)
51
+ void PyThread_tss_delete(Py_tss_t *key)
52
+ int PyThread_tss_set(Py_tss_t *key, void *value)
53
+ void * PyThread_tss_get(Py_tss_t *key)
@@ -0,0 +1,141 @@
1
+ from .object cimport PyObject
2
+ from .object cimport PyTypeObject, Py_TYPE # legacy imports for re-export
3
+
4
+ cdef extern from "Python.h":
5
+ #####################################################################
6
+ # 3. Reference Counts
7
+ #####################################################################
8
+ # The macros in this section are used for managing reference counts of Python objects.
9
+ void Py_INCREF(object o)
10
+ # Increment the reference count for object o. The object must not
11
+ # be NULL; if you aren't sure that it isn't NULL, use
12
+ # Py_XINCREF().
13
+
14
+ void Py_XINCREF(PyObject* o)
15
+ # Increment the reference count for object o. The object may be NULL, in which case the macro has no effect.
16
+
17
+ void Py_DECREF(object o)
18
+ # Decrement the reference count for object o. The object must not
19
+ # be NULL; if you aren't sure that it isn't NULL, use
20
+ # Py_XDECREF(). If the reference count reaches zero, the object's
21
+ # type's deallocation function (which must not be NULL) is
22
+ # invoked.
23
+
24
+ # Warning: The deallocation function can cause arbitrary Python
25
+ # code to be invoked (e.g. when a class instance with a __del__()
26
+ # method is deallocated). While exceptions in such code are not
27
+ # propagated, the executed code has free access to all Python
28
+ # global variables. This means that any object that is reachable
29
+ # from a global variable should be in a consistent state before
30
+ # Py_DECREF() is invoked. For example, code to delete an object
31
+ # from a list should copy a reference to the deleted object in a
32
+ # temporary variable, update the list data structure, and then
33
+ # call Py_DECREF() for the temporary variable.
34
+
35
+ void Py_XDECREF(PyObject* o)
36
+ # Decrement the reference count for object o. The object may be
37
+ # NULL, in which case the macro has no effect; otherwise the
38
+ # effect is the same as for Py_DECREF(), and the same warning
39
+ # applies.
40
+
41
+ void Py_CLEAR(PyObject* o)
42
+ # Decrement the reference count for object o. The object may be
43
+ # NULL, in which case the macro has no effect; otherwise the
44
+ # effect is the same as for Py_DECREF(), except that the argument
45
+ # is also set to NULL. The warning for Py_DECREF() does not apply
46
+ # with respect to the object passed because the macro carefully
47
+ # uses a temporary variable and sets the argument to NULL before
48
+ # decrementing its reference count.
49
+ # It is a good idea to use this macro whenever decrementing the
50
+ # value of a variable that might be traversed during garbage
51
+ # collection.
52
+
53
+ Py_ssize_t Py_REFCNT(object o)
54
+ # Get the reference count of the Python object o.
55
+
56
+ # Note that the returned value may not actually reflect how many
57
+ # references to the object are actually held. For example, some
58
+ # objects are “immortal” and have a very high refcount that does not
59
+ # reflect the actual number of references. Consequently, do not rely
60
+ # on the returned value to be accurate, other than a value of 0 or
61
+ # 1.
62
+
63
+ Py_ssize_t _Py_REFCNT "Py_REFCNT" (PyObject *ptr)
64
+ # Get the reference count for the PyObject pointer ptr.
65
+
66
+ # This is useful when it would be awkward to create an owned reference just
67
+ # to get the reference count. See the note for Py_REFCNT above about the
68
+ # accuracy of reference counts.
69
+
70
+ int PyUnstable_Object_EnableDeferredRefcount(object o)
71
+ # Enable deferred reference counting on obj, if supported by the runtime.
72
+ # In the free-threaded build, this allows the interpreter to avoid reference count
73
+ # adjustments to obj, which may improve multi-threaded performance.
74
+ # The tradeoff is that obj will only be deallocated by the tracing garbage collector,
75
+ # and not when the interpreter no longer has any references to it.
76
+ #
77
+ # This function returns 1 if deferred reference counting is enabled on obj,
78
+ # and 0 if deferred reference counting is not supported or if the hint was ignored
79
+ # by the interpreter, such as when deferred reference counting is already enabled on obj.
80
+ # This function is thread-safe, and cannot fail.
81
+ #
82
+ # This function does nothing on builds with the GIL enabled, which do not support
83
+ # deferred reference counting. This also does nothing if obj is not an object tracked
84
+ # by the garbage collector (see gc.is_tracked() and PyObject_GC_IsTracked()).
85
+ #
86
+ # This function is intended to be used soon after obj is created, by the code
87
+ # that creates it, such as in the object’s tp_new slot.
88
+ #
89
+ # Added in CPython 3.14.
90
+
91
+ int PyUnstable_Object_IsUniqueReferencedTemporary(object o)
92
+ # Check if obj is a unique temporary object.
93
+ # Returns 1 if obj is known to be a unique temporary object, and 0 otherwise.
94
+ # This function cannot fail, but the check is conservative, and may return 0
95
+ # in some cases even if obj is a unique temporary object.
96
+ #
97
+ # If an object is a unique temporary, it is guaranteed that the current code
98
+ # has the only reference to the object. For arguments to C functions, this should
99
+ # be used instead of checking if the reference count is 1.
100
+ # Starting with Python 3.14, the interpreter internally avoids some reference count
101
+ # modifications when loading objects onto the operands stack by borrowing references
102
+ # when possible, which means that a reference count of 1 by itself does not guarantee
103
+ # that a function argument uniquely referenced.
104
+ #
105
+ # Added in CPython 3.14.
106
+
107
+ int PyUnstable_IsImmortal(object o)
108
+ # This function returns non-zero if obj is immortal, and zero otherwise.
109
+ # This function cannot fail.
110
+ #
111
+ # Added in CPython 3.14.
112
+
113
+ void PyUnstable_EnableTryIncRef(object o)
114
+ # Enables subsequent uses of PyUnstable_TryIncRef() on obj.
115
+ # The caller must hold a strong reference to obj when calling this.
116
+ #
117
+ # Added in CPython 3.14.
118
+
119
+ bint PyUnstable_TryIncRef(PyObject *o)
120
+ # Increments the reference count of obj if it is not zero.
121
+ # Returns 1 if the object’s reference count was successfully incremented.
122
+ # Otherwise, this function returns 0.
123
+ #
124
+ # PyUnstable_EnableTryIncRef() must have been called earlier on obj
125
+ # or this function may spuriously return 0 in the free threading build.
126
+ #
127
+ # Added in CPython 3.14.
128
+
129
+ int PyUnstable_Object_IsUniquelyReferenced(object o)
130
+ # Determine if op only has one reference.
131
+ #
132
+ # On GIL-enabled builds, this function is equivalent to Py_REFCNT(op) == 1.
133
+ #
134
+ # On a free threaded build, this checks if op’s reference count is equal
135
+ # to one and additionally checks if op is only used by this thread.
136
+ # Py_REFCNT(op) == 1 is not thread-safe on free threaded builds; prefer this function.
137
+ #
138
+ # The caller must hold an attached thread state, despite the fact that this function
139
+ # doesn’t call into the Python interpreter. This function cannot fail.
140
+ #
141
+ # Added in CPython 3.14.
@@ -0,0 +1,134 @@
1
+ from .object cimport PyObject
2
+
3
+ cdef extern from "Python.h":
4
+
5
+ ############################################################################
6
+ # 6.3 Sequence Protocol
7
+ ############################################################################
8
+
9
+ bint PySequence_Check(object o)
10
+ # Return 1 if the object provides sequence protocol, and 0
11
+ # otherwise. This function always succeeds.
12
+
13
+ Py_ssize_t PySequence_Size(object o) except -1
14
+ # Returns the number of objects in sequence o on success, and -1
15
+ # on failure. For objects that do not provide sequence protocol,
16
+ # this is equivalent to the Python expression "len(o)".
17
+
18
+ Py_ssize_t PySequence_Length(object o) except -1
19
+ # Alternate name for PySequence_Size().
20
+
21
+ object PySequence_Concat(object o1, object o2)
22
+ # Return value: New reference.
23
+ # Return the concatenation of o1 and o2 on success, and NULL on
24
+ # failure. This is the equivalent of the Python expression "o1 +
25
+ # o2".
26
+
27
+ object PySequence_Repeat(object o, Py_ssize_t count)
28
+ # Return value: New reference.
29
+ # Return the result of repeating sequence object o count times, or
30
+ # NULL on failure. This is the equivalent of the Python expression
31
+ # "o * count".
32
+
33
+ object PySequence_InPlaceConcat(object o1, object o2)
34
+ # Return value: New reference.
35
+ # Return the concatenation of o1 and o2 on success, and NULL on
36
+ # failure. The operation is done in-place when o1 supports
37
+ # it. This is the equivalent of the Python expression "o1 += o2".
38
+
39
+ object PySequence_InPlaceRepeat(object o, Py_ssize_t count)
40
+ # Return value: New reference.
41
+ # Return the result of repeating sequence object o count times, or
42
+ # NULL on failure. The operation is done in-place when o supports
43
+ # it. This is the equivalent of the Python expression "o *=
44
+ # count".
45
+
46
+ object PySequence_GetItem(object o, Py_ssize_t i)
47
+ # Return value: New reference.
48
+ # Return the ith element of o, or NULL on failure. This is the
49
+ # equivalent of the Python expression "o[i]".
50
+
51
+ object PySequence_GetSlice(object o, Py_ssize_t i1, Py_ssize_t i2)
52
+ # Return value: New reference.
53
+ # Return the slice of sequence object o between i1 and i2, or NULL
54
+ # on failure. This is the equivalent of the Python expression
55
+ # "o[i1:i2]".
56
+
57
+ int PySequence_SetItem(object o, Py_ssize_t i, object v) except -1
58
+ # Assign object v to the ith element of o. Returns -1 on
59
+ # failure. This is the equivalent of the Python statement "o[i] =
60
+ # v". This function does not steal a reference to v.
61
+
62
+ int PySequence_DelItem(object o, Py_ssize_t i) except -1
63
+ # Delete the ith element of object o. Returns -1 on failure. This
64
+ # is the equivalent of the Python statement "del o[i]".
65
+
66
+ int PySequence_SetSlice(object o, Py_ssize_t i1, Py_ssize_t i2, object v) except -1
67
+ # Assign the sequence object v to the slice in sequence object o
68
+ # from i1 to i2. This is the equivalent of the Python statement
69
+ # "o[i1:i2] = v".
70
+
71
+ int PySequence_DelSlice(object o, Py_ssize_t i1, Py_ssize_t i2) except -1
72
+ # Delete the slice in sequence object o from i1 to i2. Returns -1
73
+ # on failure. This is the equivalent of the Python statement "del
74
+ # o[i1:i2]".
75
+
76
+ int PySequence_Count(object o, object value) except -1
77
+ # Return the number of occurrences of value in o, that is, return
78
+ # the number of keys for which o[key] == value. On failure, return
79
+ # -1. This is equivalent to the Python expression
80
+ # "o.count(value)".
81
+
82
+ int PySequence_Contains(object o, object value) except -1
83
+ # Determine if o contains value. If an item in o is equal to
84
+ # value, return 1, otherwise return 0. On error, return -1. This
85
+ # is equivalent to the Python expression "value in o".
86
+
87
+ Py_ssize_t PySequence_Index(object o, object value) except -1
88
+ # Return the first index i for which o[i] == value. On error,
89
+ # return -1. This is equivalent to the Python expression
90
+ # "o.index(value)".
91
+
92
+ object PySequence_List(object o)
93
+ # Return value: New reference.
94
+ # Return a list object with the same contents as the arbitrary
95
+ # sequence o. The returned list is guaranteed to be new.
96
+
97
+ object PySequence_Tuple(object o)
98
+ # Return value: New reference.
99
+ # Return a tuple object with the same contents as the arbitrary
100
+ # sequence o or NULL on failure. If o is a tuple, a new reference
101
+ # will be returned, otherwise a tuple will be constructed with the
102
+ # appropriate contents. This is equivalent to the Python
103
+ # expression "tuple(o)".
104
+
105
+ object PySequence_Fast(object o, char *m)
106
+ # Return value: New reference.
107
+ # Returns the sequence o as a tuple, unless it is already a tuple
108
+ # or list, in which case o is returned. Use
109
+ # PySequence_Fast_GET_ITEM() to access the members of the
110
+ # result. Returns NULL on failure. If the object is not a
111
+ # sequence, raises TypeError with m as the message text.
112
+
113
+ PyObject* PySequence_Fast_GET_ITEM(object o, Py_ssize_t i)
114
+ # Return value: Borrowed reference.
115
+ # Return the ith element of o, assuming that o was returned by
116
+ # PySequence_Fast(), o is not NULL, and that i is within bounds.
117
+
118
+ PyObject** PySequence_Fast_ITEMS(object o)
119
+ # Return the underlying array of PyObject pointers. Assumes that o
120
+ # was returned by PySequence_Fast() and o is not NULL.
121
+
122
+ object PySequence_ITEM(object o, Py_ssize_t i)
123
+ # Return value: New reference.
124
+ # Return the ith element of o or NULL on failure. Macro form of
125
+ # PySequence_GetItem() but without checking that
126
+ # PySequence_Check(o) is true and without adjustment for negative
127
+ # indices.
128
+
129
+ Py_ssize_t PySequence_Fast_GET_SIZE(object o)
130
+ # Returns the length of o, assuming that o was returned by
131
+ # PySequence_Fast() and that o is not NULL. The size can also be
132
+ # gotten by calling PySequence_Size() on o, but
133
+ # PySequence_Fast_GET_SIZE() is faster because it can assume o is
134
+ # a list or tuple.
@@ -0,0 +1,119 @@
1
+ cdef extern from "Python.h":
2
+
3
+ ############################################################################
4
+ # 7.5.14 Set Objects
5
+ ############################################################################
6
+
7
+ # This section details the public API for set and frozenset
8
+ # objects. Any functionality not listed below is best accessed
9
+ # using the either the abstract object protocol (including
10
+ # PyObject_CallMethod(), PyObject_RichCompareBool(),
11
+ # PyObject_Hash(), PyObject_Repr(), PyObject_IsTrue(),
12
+ # PyObject_Print(), and PyObject_GetIter()) or the abstract number
13
+ # protocol (including PyNumber_Add(), PyNumber_Subtract(),
14
+ # PyNumber_Or(), PyNumber_Xor(), PyNumber_InPlaceAdd(),
15
+ # PyNumber_InPlaceSubtract(), PyNumber_InPlaceOr(), and
16
+ # PyNumber_InPlaceXor()).
17
+
18
+ # PySetObject
19
+ # This subtype of PyObject is used to hold the internal data for
20
+ # both set and frozenset objects. It is like a PyDictObject in
21
+ # that it is a fixed size for small sets (much like tuple storage)
22
+ # and will point to a separate, variable sized block of memory for
23
+ # medium and large sized sets (much like list storage). None of
24
+ # the fields of this structure should be considered public and are
25
+ # subject to change. All access should be done through the
26
+ # documented API rather than by manipulating the values in the
27
+ # structure.
28
+
29
+ # PyTypeObject PySet_Type
30
+ # This is an instance of PyTypeObject representing the Python set type.
31
+
32
+ # PyTypeObject PyFrozenSet_Type
33
+ # This is an instance of PyTypeObject representing the Python frozenset type.
34
+
35
+ # The following type check macros work on pointers to any Python
36
+ # object. Likewise, the constructor functions work with any
37
+ # iterable Python object.
38
+
39
+ bint PyAnySet_Check(object p)
40
+ # Return true if p is a set object, a frozenset object, or an
41
+ # instance of a subtype.
42
+
43
+ bint PyAnySet_CheckExact(object p)
44
+ # Return true if p is a set object or a frozenset object but not
45
+ # an instance of a subtype.
46
+
47
+ bint PyFrozenSet_Check(object p)
48
+ # Return true if p is a frozenset object or an instance of a subtype.
49
+
50
+ bint PyFrozenSet_CheckExact(object p)
51
+ # Return true if p is a frozenset object but not an instance of a subtype.
52
+
53
+ bint PySet_Check(object p)
54
+ # Return true if p is a set object or an instance of a subtype.
55
+
56
+ object PySet_New(object iterable)
57
+ # Return value: New reference.
58
+ # Return a new set containing objects returned by the
59
+ # iterable. The iterable may be NULL to create a new empty
60
+ # set. Return the new set on success or NULL on failure. Raise
61
+ # TypeError if iterable is not actually iterable. The constructor
62
+ # is also useful for copying a set (c=set(s)).
63
+
64
+ object PyFrozenSet_New(object iterable)
65
+ # Return value: New reference.
66
+ # Return a new frozenset containing objects returned by the
67
+ # iterable. The iterable may be NULL to create a new empty
68
+ # frozenset. Return the new set on success or NULL on
69
+ # failure. Raise TypeError if iterable is not actually iterable.
70
+
71
+
72
+ # The following functions and macros are available for instances
73
+ # of set or frozenset or instances of their subtypes.
74
+
75
+ Py_ssize_t PySet_Size(object anyset) except -1
76
+ # Return the length of a set or frozenset object. Equivalent to
77
+ # "len(anyset)". Raises a PyExc_SystemError if anyset is not a
78
+ # set, frozenset, or an instance of a subtype.
79
+
80
+ Py_ssize_t PySet_GET_SIZE(object anyset)
81
+ # Macro form of PySet_Size() without error checking.
82
+
83
+ bint PySet_Contains(object anyset, object key) except -1
84
+ # Return 1 if found, 0 if not found, and -1 if an error is
85
+ # encountered. Unlike the Python __contains__() method, this
86
+ # function does not automatically convert unhashable sets into
87
+ # temporary frozensets. Raise a TypeError if the key is
88
+ # unhashable. Raise PyExc_SystemError if anyset is not a set,
89
+ # frozenset, or an instance of a subtype.
90
+
91
+
92
+ # The following functions are available for instances of set or
93
+ # its subtypes but not for instances of frozenset or its subtypes.
94
+
95
+ int PySet_Add(object set, object key) except -1
96
+ # Add key to a set instance. Does not apply to frozenset
97
+ # instances. Return 0 on success or -1 on failure. Raise a
98
+ # TypeError if the key is unhashable. Raise a MemoryError if there
99
+ # is no room to grow. Raise a SystemError if set is an not an
100
+ # instance of set or its subtype.
101
+
102
+ bint PySet_Discard(object set, object key) except -1
103
+ # Return 1 if found and removed, 0 if not found (no action taken),
104
+ # and -1 if an error is encountered. Does not raise KeyError for
105
+ # missing keys. Raise a TypeError if the key is unhashable. Unlike
106
+ # the Python discard() method, this function does not
107
+ # automatically convert unhashable sets into temporary
108
+ # frozensets. Raise PyExc_SystemError if set is an not an instance
109
+ # of set or its subtype.
110
+
111
+ object PySet_Pop(object set)
112
+ # Return value: New reference.
113
+ # Return a new reference to an arbitrary object in the set, and
114
+ # removes the object from the set. Return NULL on failure. Raise
115
+ # KeyError if the set is empty. Raise a SystemError if set is an
116
+ # not an instance of set or its subtype.
117
+
118
+ int PySet_Clear(object set)
119
+ # Empty an existing set of all elements.
@@ -0,0 +1,70 @@
1
+ cdef extern from "Python.h":
2
+
3
+ # PyTypeObject PySlice_Type
4
+ #
5
+ # The type object for slice objects. This is the same as slice and types.SliceType
6
+
7
+ bint PySlice_Check(object ob)
8
+ #
9
+ # Return true if ob is a slice object; ob must not be NULL.
10
+
11
+ slice PySlice_New(object start, object stop, object step)
12
+ #
13
+ # Return a new slice object with the given values. The start, stop, and step
14
+ # parameters are used as the values of the slice object attributes of the same
15
+ # names. Any of the values may be NULL, in which case the None will be used
16
+ # for the corresponding attribute. Return NULL if the new object could not be
17
+ # allocated.
18
+
19
+ int PySlice_GetIndices(object slice, Py_ssize_t length,
20
+ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step) except? -1
21
+ #
22
+ # Retrieve the start, stop and step indices from the slice object slice,
23
+ # assuming a sequence of length length. Treats indices greater than length
24
+ # as errors.
25
+ #
26
+ # Returns 0 on success and -1 on error with no exception set (unless one
27
+ # of the indices was not None and failed to be converted to an integer,
28
+ # in which case -1 is returned with an exception set).
29
+ #
30
+ # You probably do not want to use this function.
31
+ #
32
+ # Changed in version 3.2: The parameter type for the slice parameter was
33
+ # PySliceObject* before.
34
+
35
+ int PySlice_GetIndicesEx(object slice, Py_ssize_t length,
36
+ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
37
+ Py_ssize_t *slicelength) except -1
38
+ #
39
+ # Usable replacement for PySlice_GetIndices(). Retrieve the start, stop, and step
40
+ # indices from the slice object slice assuming a sequence of length length, and
41
+ # store the length of the slice in slicelength. Out of bounds indices are clipped
42
+ # in a manner consistent with the handling of normal slices.
43
+ #
44
+ # Returns 0 on success and -1 on error with exception set.
45
+ #
46
+ # Changed in version 3.2: The parameter type for the slice parameter was
47
+ # PySliceObject* before.
48
+
49
+ int PySlice_Unpack(object slice, Py_ssize_t *start, Py_ssize_t *stop,
50
+ Py_ssize_t *step) except -1
51
+ # Extract the start, stop and step data members from a slice object as C
52
+ # integers. Silently reduce values larger than PY_SSIZE_T_MAX to
53
+ # PY_SSIZE_T_MAX, silently boost the start and stop values less than
54
+ # PY_SSIZE_T_MIN to PY_SSIZE_T_MIN, and silently boost the step values
55
+ # less than -PY_SSIZE_T_MAX to -PY_SSIZE_T_MAX.
56
+
57
+ # Return -1 on error, 0 on success.
58
+
59
+ # New in version 3.6.1.
60
+
61
+ Py_ssize_t PySlice_AdjustIndices(Py_ssize_t length, Py_ssize_t *start,
62
+ Py_ssize_t *stop, Py_ssize_t step)
63
+ # Adjust start/end slice indices assuming a sequence of the specified
64
+ # length. Out of bounds indices are clipped in a manner consistent with
65
+ # the handling of normal slices.
66
+
67
+ # Return the length of the slice. Always successful. Doesn’t call Python
68
+ # code.
69
+
70
+ # New in version 3.6.1.