Cython 3.3.0a1__cp315-cp315-win_amd64.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 (335) hide show
  1. Cython/Build/BuildExecutable.py +156 -0
  2. Cython/Build/Cache.py +199 -0
  3. Cython/Build/Cythonize.py +349 -0
  4. Cython/Build/Dependencies.py +1276 -0
  5. Cython/Build/Distutils.py +1 -0
  6. Cython/Build/Inline.py +467 -0
  7. Cython/Build/IpythonMagic.py +559 -0
  8. Cython/Build/SharedModule.py +84 -0
  9. Cython/Build/Tests/TestCyCache.py +195 -0
  10. Cython/Build/Tests/TestCythonizeArgsParser.py +480 -0
  11. Cython/Build/Tests/TestDependencies.py +133 -0
  12. Cython/Build/Tests/TestInline.py +177 -0
  13. Cython/Build/Tests/TestIpythonMagic.py +303 -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 +997 -0
  24. Cython/Compiler/CmdLine.py +263 -0
  25. Cython/Compiler/Code.cp315-win_amd64.pyd +0 -0
  26. Cython/Compiler/Code.pxd +152 -0
  27. Cython/Compiler/Code.py +3907 -0
  28. Cython/Compiler/CodeGeneration.py +33 -0
  29. Cython/Compiler/CythonScope.py +194 -0
  30. Cython/Compiler/Dataclass.py +890 -0
  31. Cython/Compiler/DebugFlags.py +24 -0
  32. Cython/Compiler/Errors.py +310 -0
  33. Cython/Compiler/ExprNodes.py +15983 -0
  34. Cython/Compiler/FlowControl.cp315-win_amd64.pyd +0 -0
  35. Cython/Compiler/FlowControl.pxd +99 -0
  36. Cython/Compiler/FlowControl.py +1571 -0
  37. Cython/Compiler/FusedNode.cp315-win_amd64.pyd +0 -0
  38. Cython/Compiler/FusedNode.py +976 -0
  39. Cython/Compiler/Future.py +16 -0
  40. Cython/Compiler/Interpreter.py +57 -0
  41. Cython/Compiler/Lexicon.py +422 -0
  42. Cython/Compiler/LineTable.cp315-win_amd64.pyd +0 -0
  43. Cython/Compiler/LineTable.py +114 -0
  44. Cython/Compiler/Main.py +856 -0
  45. Cython/Compiler/MatchCaseNodes.py +2197 -0
  46. Cython/Compiler/MemoryView.py +930 -0
  47. Cython/Compiler/ModuleNode.py +4517 -0
  48. Cython/Compiler/Naming.py +367 -0
  49. Cython/Compiler/Nodes.py +10941 -0
  50. Cython/Compiler/Optimize.py +5455 -0
  51. Cython/Compiler/Options.py +838 -0
  52. Cython/Compiler/ParseTreeTransforms.pxd +79 -0
  53. Cython/Compiler/ParseTreeTransforms.py +4744 -0
  54. Cython/Compiler/Parsing.cp315-win_amd64.pyd +0 -0
  55. Cython/Compiler/Parsing.pxd +9 -0
  56. Cython/Compiler/Parsing.py +4792 -0
  57. Cython/Compiler/Pipeline.py +439 -0
  58. Cython/Compiler/PyrexTypes.py +6111 -0
  59. Cython/Compiler/Pythran.py +232 -0
  60. Cython/Compiler/Scanning.cp315-win_amd64.pyd +0 -0
  61. Cython/Compiler/Scanning.pxd +70 -0
  62. Cython/Compiler/Scanning.py +720 -0
  63. Cython/Compiler/StringEncoding.py +297 -0
  64. Cython/Compiler/Symtab.py +3092 -0
  65. Cython/Compiler/Tests/TestBuffer.py +105 -0
  66. Cython/Compiler/Tests/TestBuiltin.py +117 -0
  67. Cython/Compiler/Tests/TestCmdLine.py +587 -0
  68. Cython/Compiler/Tests/TestCode.py +145 -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 +132 -0
  74. Cython/Compiler/Tests/TestSignatureMatching.py +73 -0
  75. Cython/Compiler/Tests/TestStringEncoding.py +20 -0
  76. Cython/Compiler/Tests/TestTreeFragment.py +63 -0
  77. Cython/Compiler/Tests/TestTreePath.py +103 -0
  78. Cython/Compiler/Tests/TestTypes.py +118 -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 +611 -0
  86. Cython/Compiler/TypeSlots.py +1329 -0
  87. Cython/Compiler/UFuncs.py +311 -0
  88. Cython/Compiler/UtilNodes.py +413 -0
  89. Cython/Compiler/UtilityCode.py +348 -0
  90. Cython/Compiler/Version.py +8 -0
  91. Cython/Compiler/Visitor.cp315-win_amd64.pyd +0 -0
  92. Cython/Compiler/Visitor.pxd +53 -0
  93. Cython/Compiler/Visitor.py +864 -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 +280 -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 +580 -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 +152 -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 +268 -0
  127. Cython/Includes/cpython/exc.pxd +263 -0
  128. Cython/Includes/cpython/fileobject.pxd +57 -0
  129. Cython/Includes/cpython/float.pxd +56 -0
  130. Cython/Includes/cpython/frozendict.pxd +37 -0
  131. Cython/Includes/cpython/function.pxd +65 -0
  132. Cython/Includes/cpython/genobject.pxd +25 -0
  133. Cython/Includes/cpython/getargs.pxd +12 -0
  134. Cython/Includes/cpython/instance.pxd +25 -0
  135. Cython/Includes/cpython/iterator.pxd +36 -0
  136. Cython/Includes/cpython/iterobject.pxd +24 -0
  137. Cython/Includes/cpython/list.pxd +144 -0
  138. Cython/Includes/cpython/long.pxd +180 -0
  139. Cython/Includes/cpython/longintrepr.pxd +14 -0
  140. Cython/Includes/cpython/mapping.pxd +63 -0
  141. Cython/Includes/cpython/marshal.pxd +66 -0
  142. Cython/Includes/cpython/mem.pxd +120 -0
  143. Cython/Includes/cpython/memoryview.pxd +50 -0
  144. Cython/Includes/cpython/method.pxd +49 -0
  145. Cython/Includes/cpython/module.pxd +208 -0
  146. Cython/Includes/cpython/number.pxd +258 -0
  147. Cython/Includes/cpython/object.pxd +430 -0
  148. Cython/Includes/cpython/pycapsule.pxd +143 -0
  149. Cython/Includes/cpython/pylifecycle.pxd +68 -0
  150. Cython/Includes/cpython/pyport.pxd +8 -0
  151. Cython/Includes/cpython/pystate.pxd +95 -0
  152. Cython/Includes/cpython/pythread.pxd +53 -0
  153. Cython/Includes/cpython/ref.pxd +141 -0
  154. Cython/Includes/cpython/sentinel.pxd +17 -0
  155. Cython/Includes/cpython/sequence.pxd +134 -0
  156. Cython/Includes/cpython/set.pxd +119 -0
  157. Cython/Includes/cpython/slice.pxd +70 -0
  158. Cython/Includes/cpython/time.pxd +129 -0
  159. Cython/Includes/cpython/tuple.pxd +72 -0
  160. Cython/Includes/cpython/type.pxd +146 -0
  161. Cython/Includes/cpython/unicode.pxd +639 -0
  162. Cython/Includes/cpython/version.pxd +32 -0
  163. Cython/Includes/cpython/weakref.pxd +78 -0
  164. Cython/Includes/libc/__init__.pxd +1 -0
  165. Cython/Includes/libc/complex.pxd +35 -0
  166. Cython/Includes/libc/errno.pxd +127 -0
  167. Cython/Includes/libc/float.pxd +43 -0
  168. Cython/Includes/libc/limits.pxd +28 -0
  169. Cython/Includes/libc/locale.pxd +46 -0
  170. Cython/Includes/libc/math.pxd +209 -0
  171. Cython/Includes/libc/setjmp.pxd +10 -0
  172. Cython/Includes/libc/signal.pxd +64 -0
  173. Cython/Includes/libc/stddef.pxd +9 -0
  174. Cython/Includes/libc/stdint.pxd +105 -0
  175. Cython/Includes/libc/stdio.pxd +80 -0
  176. Cython/Includes/libc/stdlib.pxd +72 -0
  177. Cython/Includes/libc/string.pxd +50 -0
  178. Cython/Includes/libc/threads.pxd +234 -0
  179. Cython/Includes/libc/time.pxd +52 -0
  180. Cython/Includes/libcpp/__init__.pxd +4 -0
  181. Cython/Includes/libcpp/algorithm.pxd +320 -0
  182. Cython/Includes/libcpp/any.pxd +16 -0
  183. Cython/Includes/libcpp/atomic.pxd +59 -0
  184. Cython/Includes/libcpp/barrier.pxd +22 -0
  185. Cython/Includes/libcpp/bit.pxd +29 -0
  186. Cython/Includes/libcpp/cast.pxd +12 -0
  187. Cython/Includes/libcpp/cmath.pxd +518 -0
  188. Cython/Includes/libcpp/complex.pxd +106 -0
  189. Cython/Includes/libcpp/condition_variable.pxd +322 -0
  190. Cython/Includes/libcpp/deque.pxd +165 -0
  191. Cython/Includes/libcpp/exception.pxd +216 -0
  192. Cython/Includes/libcpp/execution.pxd +15 -0
  193. Cython/Includes/libcpp/forward_list.pxd +63 -0
  194. Cython/Includes/libcpp/functional.pxd +26 -0
  195. Cython/Includes/libcpp/future.pxd +103 -0
  196. Cython/Includes/libcpp/iterator.pxd +34 -0
  197. Cython/Includes/libcpp/latch.pxd +17 -0
  198. Cython/Includes/libcpp/limits.pxd +61 -0
  199. Cython/Includes/libcpp/list.pxd +117 -0
  200. Cython/Includes/libcpp/map.pxd +252 -0
  201. Cython/Includes/libcpp/memory.pxd +115 -0
  202. Cython/Includes/libcpp/mutex.pxd +387 -0
  203. Cython/Includes/libcpp/numbers.pxd +15 -0
  204. Cython/Includes/libcpp/numeric.pxd +131 -0
  205. Cython/Includes/libcpp/optional.pxd +34 -0
  206. Cython/Includes/libcpp/pair.pxd +1 -0
  207. Cython/Includes/libcpp/queue.pxd +25 -0
  208. Cython/Includes/libcpp/random.pxd +166 -0
  209. Cython/Includes/libcpp/semaphore.pxd +43 -0
  210. Cython/Includes/libcpp/set.pxd +228 -0
  211. Cython/Includes/libcpp/shared_mutex.pxd +96 -0
  212. Cython/Includes/libcpp/span.pxd +87 -0
  213. Cython/Includes/libcpp/stack.pxd +11 -0
  214. Cython/Includes/libcpp/stop_token.pxd +117 -0
  215. Cython/Includes/libcpp/string.pxd +355 -0
  216. Cython/Includes/libcpp/string_view.pxd +183 -0
  217. Cython/Includes/libcpp/typeindex.pxd +15 -0
  218. Cython/Includes/libcpp/typeinfo.pxd +10 -0
  219. Cython/Includes/libcpp/unordered_map.pxd +193 -0
  220. Cython/Includes/libcpp/unordered_set.pxd +152 -0
  221. Cython/Includes/libcpp/utility.pxd +30 -0
  222. Cython/Includes/libcpp/vector.pxd +186 -0
  223. Cython/Includes/numpy/math.pxd +150 -0
  224. Cython/Includes/openmp.pxd +50 -0
  225. Cython/Includes/posix/__init__.pxd +1 -0
  226. Cython/Includes/posix/dlfcn.pxd +14 -0
  227. Cython/Includes/posix/fcntl.pxd +86 -0
  228. Cython/Includes/posix/ioctl.pxd +4 -0
  229. Cython/Includes/posix/mman.pxd +101 -0
  230. Cython/Includes/posix/resource.pxd +57 -0
  231. Cython/Includes/posix/select.pxd +21 -0
  232. Cython/Includes/posix/signal.pxd +73 -0
  233. Cython/Includes/posix/stat.pxd +98 -0
  234. Cython/Includes/posix/stdio.pxd +37 -0
  235. Cython/Includes/posix/stdlib.pxd +29 -0
  236. Cython/Includes/posix/strings.pxd +9 -0
  237. Cython/Includes/posix/time.pxd +71 -0
  238. Cython/Includes/posix/types.pxd +30 -0
  239. Cython/Includes/posix/uio.pxd +26 -0
  240. Cython/Includes/posix/unistd.pxd +271 -0
  241. Cython/Includes/posix/wait.pxd +38 -0
  242. Cython/LZSS.py +170 -0
  243. Cython/Plex/Actions.cp315-win_amd64.pyd +0 -0
  244. Cython/Plex/Actions.pxd +24 -0
  245. Cython/Plex/Actions.py +119 -0
  246. Cython/Plex/DFA.cp315-win_amd64.pyd +0 -0
  247. Cython/Plex/DFA.pxd +14 -0
  248. Cython/Plex/DFA.py +164 -0
  249. Cython/Plex/Errors.py +48 -0
  250. Cython/Plex/Lexicons.py +178 -0
  251. Cython/Plex/Machines.cp315-win_amd64.pyd +0 -0
  252. Cython/Plex/Machines.pxd +36 -0
  253. Cython/Plex/Machines.py +238 -0
  254. Cython/Plex/Regexps.py +535 -0
  255. Cython/Plex/Scanners.cp315-win_amd64.pyd +0 -0
  256. Cython/Plex/Scanners.pxd +45 -0
  257. Cython/Plex/Scanners.py +328 -0
  258. Cython/Plex/Transitions.cp315-win_amd64.pyd +0 -0
  259. Cython/Plex/Transitions.pxd +14 -0
  260. Cython/Plex/Transitions.py +239 -0
  261. Cython/Plex/__init__.py +34 -0
  262. Cython/Runtime/__init__.py +1 -0
  263. Cython/Runtime/refnanny.cp315-win_amd64.pyd +0 -0
  264. Cython/Runtime/refnanny.pyx +237 -0
  265. Cython/Shadow.py +1167 -0
  266. Cython/StringIOTree.cp315-win_amd64.pyd +0 -0
  267. Cython/StringIOTree.py +169 -0
  268. Cython/Tempita/__init__.py +4 -0
  269. Cython/Tempita/_looper.py +154 -0
  270. Cython/Tempita/_tempita.cp315-win_amd64.pyd +0 -0
  271. Cython/Tempita/_tempita.py +1087 -0
  272. Cython/TestUtils.py +464 -0
  273. Cython/Tests/TestCodeWriter.py +128 -0
  274. Cython/Tests/TestCythonUtils.py +202 -0
  275. Cython/Tests/TestJediTyper.py +223 -0
  276. Cython/Tests/TestShadow.py +110 -0
  277. Cython/Tests/TestStringIOTree.py +68 -0
  278. Cython/Tests/TestTestUtils.py +89 -0
  279. Cython/Tests/__init__.py +1 -0
  280. Cython/Tests/xmlrunner.py +390 -0
  281. Cython/Utility/AsyncGen.c +1073 -0
  282. Cython/Utility/Buffer.c +866 -0
  283. Cython/Utility/BufferFormatFromTypeInfo.pxd +2 -0
  284. Cython/Utility/Builtins.c +933 -0
  285. Cython/Utility/CConvert.pyx +149 -0
  286. Cython/Utility/CMath.c +104 -0
  287. Cython/Utility/CommonStructures.c +244 -0
  288. Cython/Utility/Complex.c +378 -0
  289. Cython/Utility/Coroutine.c +2337 -0
  290. Cython/Utility/CpdefEnums.pyx +107 -0
  291. Cython/Utility/CppConvert.pyx +282 -0
  292. Cython/Utility/CppSupport.cpp +151 -0
  293. Cython/Utility/CythonFunction.c +2072 -0
  294. Cython/Utility/Dataclasses.c +101 -0
  295. Cython/Utility/Embed.c +129 -0
  296. Cython/Utility/Exceptions.c +1038 -0
  297. Cython/Utility/ExtensionTypes.c +1158 -0
  298. Cython/Utility/FunctionArguments.c +1045 -0
  299. Cython/Utility/FusedFunction.pyx +44 -0
  300. Cython/Utility/ImportExport.c +930 -0
  301. Cython/Utility/MatchCase.c +979 -0
  302. Cython/Utility/MatchCase_Cy.pyx +12 -0
  303. Cython/Utility/MemoryView.pxd +108 -0
  304. Cython/Utility/MemoryView.pyx +1499 -0
  305. Cython/Utility/MemoryView_C.c +1056 -0
  306. Cython/Utility/ModuleSetupCode.c +3352 -0
  307. Cython/Utility/NumpyImportArray.c +46 -0
  308. Cython/Utility/ObjectHandling.c +3372 -0
  309. Cython/Utility/Optimize.c +2563 -0
  310. Cython/Utility/Overflow.c +378 -0
  311. Cython/Utility/Profile.c +736 -0
  312. Cython/Utility/StringTools.c +1414 -0
  313. Cython/Utility/Synchronization.c +438 -0
  314. Cython/Utility/TString.c +369 -0
  315. Cython/Utility/TestCyUtilityLoader.pyx +8 -0
  316. Cython/Utility/TestCythonScope.pyx +75 -0
  317. Cython/Utility/TestUtilityLoader.c +12 -0
  318. Cython/Utility/TypeConversion.c +1556 -0
  319. Cython/Utility/UFuncs.pyx +50 -0
  320. Cython/Utility/UFuncs_C.c +89 -0
  321. Cython/Utility/__init__.py +28 -0
  322. Cython/Utility/arrayarray.h +172 -0
  323. Cython/Utils.cp315-win_amd64.pyd +0 -0
  324. Cython/Utils.py +677 -0
  325. Cython/__init__.py +12 -0
  326. Cython/py.typed +0 -0
  327. cython-3.3.0a1.dist-info/METADATA +394 -0
  328. cython-3.3.0a1.dist-info/RECORD +335 -0
  329. cython-3.3.0a1.dist-info/WHEEL +5 -0
  330. cython-3.3.0a1.dist-info/entry_points.txt +4 -0
  331. cython-3.3.0a1.dist-info/top_level.txt +3 -0
  332. cython.py +29 -0
  333. pyximport/__init__.py +4 -0
  334. pyximport/pyxbuild.py +160 -0
  335. pyximport/pyximport.py +482 -0
@@ -0,0 +1,29 @@
1
+ # POSIX additions to <stdlib.h>
2
+ # https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdlib.h.html
3
+
4
+ cdef extern from "<stdlib.h>" nogil:
5
+ void _Exit(int)
6
+ double drand48()
7
+ double erand48(unsigned short *)
8
+ int getsubopt(char **, char *const *, char **)
9
+ void lcong48(unsigned short *)
10
+ long lrand()
11
+ char *mkdtemp(char *)
12
+ int mkstemp(char *)
13
+ long mrand()
14
+ long nrand48(unsigned short *)
15
+ int posix_memalign(void **, size_t, size_t)
16
+ int posix_openpt(int)
17
+ char *ptsname(int)
18
+ int putenv(char *)
19
+ int rand_r(unsigned *)
20
+ long random()
21
+ char *realpath(const char *, char *)
22
+ unsigned short *seed48(unsigned short *)
23
+ int setenv(const char *, const char *, int)
24
+ void setkey(const char *)
25
+ char *setstate(char *)
26
+ void srand48(long)
27
+ void srandom(unsigned)
28
+ int unlockpt(int)
29
+ int unsetenv(const char *)
@@ -0,0 +1,9 @@
1
+ cdef extern from "<strings.h>" nogil:
2
+ int bcmp(const void *, const void *, size_t)
3
+ void bcopy(const void *, void *, size_t)
4
+ void bzero(void *, size_t)
5
+ int ffs(int)
6
+ char *index(const char *, int)
7
+ char *rindex(const char *, int)
8
+ int strcasecmp(const char *, const char *)
9
+ int strncasecmp(const char *, const char *, size_t)
@@ -0,0 +1,71 @@
1
+ # https://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/time.h.html
2
+
3
+ from posix.types cimport suseconds_t, time_t, clockid_t, timer_t
4
+ from posix.signal cimport sigevent
5
+
6
+ cdef extern from "<sys/time.h>" nogil:
7
+ enum: CLOCK_REALTIME
8
+ enum: TIMER_ABSTIME
9
+ enum: CLOCK_MONOTONIC
10
+
11
+ # FreeBSD-specific clocks
12
+ enum: CLOCK_UPTIME
13
+ enum: CLOCK_UPTIME_PRECISE
14
+ enum: CLOCK_UPTIME_FAST
15
+ enum: CLOCK_REALTIME_PRECISE
16
+ enum: CLOCK_REALTIME_FAST
17
+ enum: CLOCK_MONOTONIC_PRECISE
18
+ enum: CLOCK_MONOTONIC_FAST
19
+ enum: CLOCK_SECOND
20
+
21
+ # Linux-specific clocks
22
+ enum: CLOCK_PROCESS_CPUTIME_ID
23
+ enum: CLOCK_THREAD_CPUTIME_ID
24
+ enum: CLOCK_MONOTONIC_RAW
25
+ enum: CLOCK_REALTIME_COARSE
26
+ enum: CLOCK_MONOTONIC_COARSE
27
+ enum: CLOCK_BOOTTIME
28
+ enum: CLOCK_REALTIME_ALARM
29
+ enum: CLOCK_BOOTTIME_ALARM
30
+
31
+ enum: ITIMER_REAL
32
+ enum: ITIMER_VIRTUAL
33
+ enum: ITIMER_PROF
34
+
35
+ cdef struct timezone:
36
+ int tz_minuteswest
37
+ int dsttime
38
+
39
+ cdef struct timeval:
40
+ time_t tv_sec
41
+ suseconds_t tv_usec
42
+
43
+ cdef struct timespec:
44
+ time_t tv_sec
45
+ long tv_nsec
46
+
47
+ cdef struct itimerval:
48
+ timeval it_interval
49
+ timeval it_value
50
+
51
+ cdef struct itimerspec:
52
+ timespec it_interval
53
+ timespec it_value
54
+
55
+ int nanosleep(const timespec *, timespec *)
56
+
57
+ int getitimer(int, itimerval *)
58
+ int gettimeofday(timeval *tp, timezone *tzp)
59
+ int setitimer(int, const itimerval *, itimerval *)
60
+
61
+ int clock_getcpuclockid(pid_t, clockid_t *)
62
+ int clock_getres(clockid_t, timespec *)
63
+ int clock_gettime(clockid_t, timespec *)
64
+ int clock_nanosleep(clockid_t, int, const timespec *, timespec *)
65
+ int clock_settime(clockid_t, const timespec *)
66
+
67
+ int timer_create(clockid_t, sigevent *, timer_t *)
68
+ int timer_delete(timer_t)
69
+ int timer_gettime(timer_t, itimerspec *)
70
+ int timer_getoverrun(timer_t)
71
+ int timer_settime(timer_t, int, const itimerspec *, itimerspec *)
@@ -0,0 +1,30 @@
1
+ # Note that the actual size of these types is system-dependent, and
2
+ # cannot be detected before C compile time. However, the generated C code
3
+ # will correctly use the actual size of these types *except* for
4
+ # determining promotion in binary arithmetic expressions involving
5
+ # mixed types. In this case, operands are promoted to the declared
6
+ # larger type, with a bias towards typedef types. Thus, with the
7
+ # declarations below, long + time_t will result in a time_t whereas
8
+ # long long + time_t will result in a long long which should be
9
+ # acceptable for either 32-bit or 64-bit signed time_t (though admittedly
10
+ # the POSIX standard doesn't even specify that time_t must be an integral
11
+ # type).
12
+
13
+ cdef extern from "<sys/types.h>":
14
+ ctypedef long blkcnt_t
15
+ ctypedef long blksize_t
16
+ ctypedef long clockid_t
17
+ ctypedef long dev_t
18
+ ctypedef long gid_t
19
+ ctypedef long id_t
20
+ ctypedef unsigned long ino_t
21
+ ctypedef long mode_t
22
+ ctypedef long nlink_t
23
+ ctypedef long off_t
24
+ ctypedef long pid_t
25
+ ctypedef struct sigset_t:
26
+ pass
27
+ ctypedef long suseconds_t
28
+ ctypedef long time_t
29
+ ctypedef long timer_t
30
+ ctypedef long uid_t
@@ -0,0 +1,26 @@
1
+ # https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_uio.h.html
2
+
3
+ from posix.types cimport off_t
4
+
5
+
6
+ cdef extern from "<sys/uio.h>" nogil:
7
+
8
+ cdef struct iovec:
9
+ void *iov_base
10
+ size_t iov_len
11
+
12
+ ssize_t readv (int fd, const iovec *iov, int iovcnt)
13
+ ssize_t writev(int fd, const iovec *iov, int iovcnt)
14
+
15
+ # Linux-specific, https://man7.org/linux/man-pages/man2/readv.2.html
16
+ ssize_t preadv (int fd, const iovec *iov, int iovcnt, off_t offset)
17
+ ssize_t pwritev(int fd, const iovec *iov, int iovcnt, off_t offset)
18
+
19
+ enum: RWF_DSYNC
20
+ enum: RWF_HIPRI
21
+ enum: RWF_SYNC
22
+ enum: RWF_NOWAIT
23
+ enum: RWF_APPEND
24
+
25
+ ssize_t preadv2 (int fd, const iovec *iov, int iovcnt, off_t offset, int flags)
26
+ ssize_t pwritev2(int fd, const iovec *iov, int iovcnt, off_t offset, int flags)
@@ -0,0 +1,271 @@
1
+ # http://www.opengroup.org/onlinepubs/009695399/basedefs/unistd.h.html
2
+
3
+ from posix.types cimport gid_t, pid_t, off_t, uid_t
4
+
5
+ cdef extern from "<unistd.h>" nogil:
6
+
7
+ #:NULL
8
+
9
+ enum: R_OK
10
+ enum: W_OK
11
+ enum: X_OK
12
+ enum: F_OK
13
+
14
+ enum: _CS_PATH
15
+ enum: _CS_POSIX_V6_ILP32_OFF32_CFLAGS
16
+ enum: _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
17
+ enum: _CS_POSIX_V6_ILP32_OFF32_LIBS
18
+ enum: _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
19
+ enum: _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
20
+ enum: _CS_POSIX_V6_ILP32_OFFBIG_LIBS
21
+ enum: _CS_POSIX_V6_LP64_OFF64_CFLAGS
22
+ enum: _CS_POSIX_V6_LP64_OFF64_LDFLAGS
23
+ enum: _CS_POSIX_V6_LP64_OFF64_LIBS
24
+ enum: _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
25
+ enum: _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
26
+ enum: _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
27
+ enum: _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS
28
+
29
+ enum: SEEK_SET
30
+ enum: SEEK_CUR
31
+ enum: SEEK_END
32
+
33
+ enum: F_LOCK
34
+ enum: F_TEST
35
+ enum: F_TLOCK
36
+ enum: F_ULOCK
37
+
38
+ enum: _PC_2_SYMLINKS
39
+ enum: _PC_ALLOC_SIZE_MIN
40
+ enum: _PC_ASYNC_IO
41
+ enum: _PC_CHOWN_RESTRICTED
42
+ enum: _PC_FILESIZEBITS
43
+ enum: _PC_LINK_MAX
44
+ enum: _PC_MAX_CANON
45
+ enum: _PC_MAX_INPUT
46
+ enum: _PC_NAME_MAX
47
+ enum: _PC_NO_TRUNC
48
+ enum: _PC_PATH_MAX
49
+ enum: _PC_PIPE_BUF
50
+ enum: _PC_PRIO_IO
51
+ enum: _PC_REC_INCR_XFER_SIZE
52
+ enum: _PC_REC_MIN_XFER_SIZE
53
+ enum: _PC_REC_XFER_ALIGN
54
+ enum: _PC_SYMLINK_MAX
55
+ enum: _PC_SYNC_IO
56
+ enum: _PC_VDISABLE
57
+
58
+ enum: _SC_2_C_BIND
59
+ enum: _SC_2_C_DEV
60
+ enum: _SC_2_CHAR_TERM
61
+ enum: _SC_2_FORT_DEV
62
+ enum: _SC_2_FORT_RUN
63
+ enum: _SC_2_LOCALEDEF
64
+ enum: _SC_2_PBS
65
+ enum: _SC_2_PBS_ACCOUNTING
66
+ enum: _SC_2_PBS_CHECKPOINT
67
+ enum: _SC_2_PBS_LOCATE
68
+ enum: _SC_2_PBS_MESSAGE
69
+ enum: _SC_2_PBS_TRACK
70
+ enum: _SC_2_SW_DEV
71
+ enum: _SC_2_UPE
72
+ enum: _SC_2_VERSION
73
+ enum: _SC_ADVISORY_INFO
74
+ enum: _SC_AIO_LISTIO_MAX
75
+ enum: _SC_AIO_MAX
76
+ enum: _SC_AIO_PRIO_DELTA_MAX
77
+ enum: _SC_ARG_MAX
78
+ enum: _SC_ASYNCHRONOUS_IO
79
+ enum: _SC_ATEXIT_MAX
80
+ enum: _SC_BARRIERS
81
+ enum: _SC_BC_BASE_MAX
82
+ enum: _SC_BC_DIM_MAX
83
+ enum: _SC_BC_SCALE_MAX
84
+ enum: _SC_BC_STRING_MAX
85
+ enum: _SC_CHILD_MAX
86
+ enum: _SC_CLK_TCK
87
+ enum: _SC_CLOCK_SELECTION
88
+ enum: _SC_COLL_WEIGHTS_MAX
89
+ enum: _SC_CPUTIME
90
+ enum: _SC_DELAYTIMER_MAX
91
+ enum: _SC_EXPR_NEST_MAX
92
+ enum: _SC_FSYNC
93
+ enum: _SC_GETGR_R_SIZE_MAX
94
+ enum: _SC_GETPW_R_SIZE_MAX
95
+ enum: _SC_HOST_NAME_MAX
96
+ enum: _SC_IOV_MAX
97
+ enum: _SC_IPV6
98
+ enum: _SC_JOB_CONTROL
99
+ enum: _SC_LINE_MAX
100
+ enum: _SC_LOGIN_NAME_MAX
101
+ enum: _SC_MAPPED_FILES
102
+ enum: _SC_MEMLOCK
103
+ enum: _SC_MEMLOCK_RANGE
104
+ enum: _SC_MEMORY_PROTECTION
105
+ enum: _SC_MESSAGE_PASSING
106
+ enum: _SC_MONOTONIC_CLOCK
107
+ enum: _SC_MQ_OPEN_MAX
108
+ enum: _SC_MQ_PRIO_MAX
109
+ enum: _SC_NGROUPS_MAX
110
+ enum: _SC_OPEN_MAX
111
+ enum: _SC_PAGE_SIZE
112
+ enum: _SC_PAGESIZE
113
+ enum: _SC_PRIORITIZED_IO
114
+ enum: _SC_PRIORITY_SCHEDULING
115
+ enum: _SC_RAW_SOCKETS
116
+ enum: _SC_RE_DUP_MAX
117
+ enum: _SC_READER_WRITER_LOCKS
118
+ enum: _SC_REALTIME_SIGNALS
119
+ enum: _SC_REGEXP
120
+ enum: _SC_RTSIG_MAX
121
+ enum: _SC_SAVED_IDS
122
+ enum: _SC_SEM_NSEMS_MAX
123
+ enum: _SC_SEM_VALUE_MAX
124
+ enum: _SC_SEMAPHORES
125
+ enum: _SC_SHARED_MEMORY_OBJECTS
126
+ enum: _SC_SHELL
127
+ enum: _SC_SIGQUEUE_MAX
128
+ enum: _SC_SPAWN
129
+ enum: _SC_SPIN_LOCKS
130
+ enum: _SC_SPORADIC_SERVER
131
+ enum: _SC_SS_REPL_MAX
132
+ enum: _SC_STREAM_MAX
133
+ enum: _SC_SYMLOOP_MAX
134
+ enum: _SC_SYNCHRONIZED_IO
135
+ enum: _SC_THREAD_ATTR_STACKADDR
136
+ enum: _SC_THREAD_ATTR_STACKSIZE
137
+ enum: _SC_THREAD_CPUTIME
138
+ enum: _SC_THREAD_DESTRUCTOR_ITERATIONS
139
+ enum: _SC_THREAD_KEYS_MAX
140
+ enum: _SC_THREAD_PRIO_INHERIT
141
+ enum: _SC_THREAD_PRIO_PROTECT
142
+ enum: _SC_THREAD_PRIORITY_SCHEDULING
143
+ enum: _SC_THREAD_PROCESS_SHARED
144
+ enum: _SC_THREAD_SAFE_FUNCTIONS
145
+ enum: _SC_THREAD_SPORADIC_SERVER
146
+ enum: _SC_THREAD_STACK_MIN
147
+ enum: _SC_THREAD_THREADS_MAX
148
+ enum: _SC_THREADS
149
+ enum: _SC_TIMEOUTS
150
+ enum: _SC_TIMER_MAX
151
+ enum: _SC_TIMERS
152
+ enum: _SC_TRACE
153
+ enum: _SC_TRACE_EVENT_FILTER
154
+ enum: _SC_TRACE_EVENT_NAME_MAX
155
+ enum: _SC_TRACE_INHERIT
156
+ enum: _SC_TRACE_LOG
157
+ enum: _SC_TRACE_NAME_MAX
158
+ enum: _SC_TRACE_SYS_MAX
159
+ enum: _SC_TRACE_USER_EVENT_MAX
160
+ enum: _SC_TTY_NAME_MAX
161
+ enum: _SC_TYPED_MEMORY_OBJECTS
162
+ enum: _SC_TZNAME_MAX
163
+ enum: _SC_V6_ILP32_OFF32
164
+ enum: _SC_V6_ILP32_OFFBIG
165
+ enum: _SC_V6_LP64_OFF64
166
+ enum: _SC_V6_LPBIG_OFFBIG
167
+ enum: _SC_VERSION
168
+ enum: _SC_XBS5_ILP32_OFF32
169
+ enum: _SC_XBS5_ILP32_OFFBIG
170
+ enum: _SC_XBS5_LP64_OFF64
171
+ enum: _SC_XBS5_LPBIG_OFFBIG
172
+ enum: _SC_XOPEN_CRYPT
173
+ enum: _SC_XOPEN_ENH_I18N
174
+ enum: _SC_XOPEN_LEGACY
175
+ enum: _SC_XOPEN_REALTIME
176
+ enum: _SC_XOPEN_REALTIME_THREADS
177
+ enum: _SC_XOPEN_SHM
178
+ enum: _SC_XOPEN_STREAMS
179
+ enum: _SC_XOPEN_UNIX
180
+ enum: _SC_XOPEN_VERSION
181
+
182
+ enum: STDIN_FILENO #0
183
+ enum: STDOUT_FILENO #1
184
+ enum: STDERR_FILENO #2
185
+
186
+ ctypedef unsigned useconds_t
187
+
188
+ int access(const char *, int)
189
+ unsigned alarm(unsigned)
190
+ int chdir(const char *)
191
+ int chown(const char *, uid_t, gid_t)
192
+ int close(int)
193
+ size_t confstr(int, char *, size_t)
194
+ char *crypt(const char *, const char *)
195
+ char *ctermid(char *)
196
+ int dup(int)
197
+ int dup2(int, int)
198
+ void encrypt(char[64], int)
199
+ int execl(const char *, const char *, ...)
200
+ int execle(const char *, const char *, ...)
201
+ int execlp(const char *, const char *, ...)
202
+ int execv(const char *, char *[])
203
+ int execve(const char *, char *[], char *[])
204
+ int execvp(const char *, char *[])
205
+ void _exit(int)
206
+ int fchown(int, uid_t, gid_t)
207
+ int fchdir(int)
208
+ int fdatasync(int)
209
+ pid_t fork()
210
+ long fpathconf(int, int)
211
+ int fsync(int)
212
+ int ftruncate(int, off_t)
213
+ char *getcwd(char *, size_t)
214
+ gid_t getegid()
215
+ uid_t geteuid()
216
+ gid_t getgid()
217
+ int getgroups(int, gid_t [])
218
+ long gethostid()
219
+ int gethostname(char *, size_t)
220
+ char *getlogin()
221
+ int getlogin_r(char *, size_t)
222
+ int getopt(int, char * [], const char *)
223
+ pid_t getpgid(pid_t)
224
+ pid_t getpgrp()
225
+ pid_t getpid()
226
+ pid_t getppid()
227
+ pid_t getsid(pid_t)
228
+ uid_t getuid()
229
+ char *getwd(char *)
230
+ int isatty(int)
231
+ int lchown(const char *, uid_t, gid_t)
232
+ int link(const char *, const char *)
233
+ int lockf(int, int, off_t)
234
+ off_t lseek(int, off_t, int)
235
+ int nice(int)
236
+ long pathconf(char *, int)
237
+ int pause()
238
+ int pipe(int [2])
239
+ ssize_t pread(int, void *, size_t, off_t)
240
+ ssize_t pwrite(int, const void *, size_t, off_t)
241
+ ssize_t read(int, void *, size_t)
242
+ ssize_t readlink(const char *, char *, size_t)
243
+ int rmdir(const char *)
244
+ int setegid(gid_t)
245
+ int seteuid(uid_t)
246
+ int setgid(gid_t)
247
+ int setpgid(pid_t, pid_t)
248
+ pid_t setpgrp()
249
+ int setregid(gid_t, gid_t)
250
+ int setreuid(uid_t, uid_t)
251
+ pid_t setsid()
252
+ int setuid(uid_t)
253
+ unsigned sleep(unsigned)
254
+ void swab(const void *, void *, ssize_t)
255
+ int symlink(const char *, const char *)
256
+ void sync()
257
+ long sysconf(int)
258
+ pid_t tcgetpgrp(int)
259
+ int tcsetpgrp(int, pid_t)
260
+ int truncate(const char *, off_t)
261
+ char *ttyname(int)
262
+ int ttyname_r(int, char *, size_t)
263
+ useconds_t ualarm(useconds_t, useconds_t)
264
+ int unlink(const char *)
265
+ int usleep(useconds_t)
266
+ pid_t vfork()
267
+ ssize_t write(int, const void *, size_t)
268
+ char *optarg
269
+ int optind
270
+ int opterr
271
+ int optopt
@@ -0,0 +1,38 @@
1
+ # https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_wait.h.html
2
+
3
+ from posix.types cimport pid_t, id_t
4
+ from posix.signal cimport siginfo_t
5
+ from posix.resource cimport rusage
6
+
7
+ cdef extern from "<sys/wait.h>" nogil:
8
+ enum: WNOHANG
9
+ enum: WUNTRACED
10
+ enum: WCONTINUED
11
+ enum: WEXITED
12
+ enum: WSTOPPED
13
+ enum: WNOWAIT
14
+
15
+ int WEXITSTATUS(int status)
16
+ int WIFCONTINUED(int status)
17
+ int WIFEXITED(int status)
18
+ int WIFSIGNALED(int status)
19
+ int WIFSTOPPED(int status)
20
+ int WSTOPSIG(int status)
21
+ int WTERMSIG(int status)
22
+
23
+ ctypedef int idtype_t
24
+ enum: P_ALL # idtype_t values
25
+ enum: P_PID
26
+ enum: P_PGID
27
+
28
+ pid_t wait(int *stat_loc)
29
+ pid_t waitpid(pid_t pid, int *status, int options)
30
+ int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options)
31
+
32
+ # wait3 was in POSIX until 2008 while wait4 was never standardized.
33
+ # Even so, these calls are in almost every Unix, always in sys/wait.h.
34
+ # Hence, posix.wait is the least surprising place to declare them for Cython.
35
+ # libc may require _XXX_SOURCE to be defined at C-compile time to provide them.
36
+
37
+ pid_t wait3(int *status, int options, rusage *rusage)
38
+ pid_t wait4(pid_t pid, int *status, int options, rusage *rusage)
Cython/LZSS.py ADDED
@@ -0,0 +1,170 @@
1
+ """
2
+ LZSS-like compressor.
3
+
4
+ See decompression function in StringTools.c, "DecompressString_LZSS".
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from collections import defaultdict
10
+
11
+ import cython
12
+
13
+ PRINT_STATS = False
14
+
15
+
16
+ def lzss_compress(data: bytes) -> bytes:
17
+ """
18
+ LZSS-like compressor.
19
+
20
+ Uses a byte triplet dict for fast match finding.
21
+ Outputs a bit stream with small overhead.
22
+
23
+ Args:
24
+ data: Input bytes to compress
25
+
26
+ Returns:
27
+ Compressed bytes (no header/metadata, decompressor must know output size)
28
+ """
29
+ if not data:
30
+ return b''
31
+
32
+ input_size = len(data)
33
+
34
+ # Hash table: maps 3-byte sequences to a list of positions starting with that sequence.
35
+ hash_table = defaultdict(list)
36
+
37
+ def find_longest_match(pos: cython.Py_ssize_t) -> tuple[cython.Py_ssize_t, cython.Py_ssize_t]:
38
+ """Find longest match in sliding window. Returns (offset, length)."""
39
+ if pos + 3 > input_size:
40
+ return (0, 0)
41
+
42
+ # 14-bit offset (max 16KiB lookback)
43
+ WINDOW_SIZE: cython.long = 1 << 14
44
+ # 8-bit length + 3, allowing up to 258 bytes.
45
+ MAX_MATCH: cython.long = min(255 + 3, input_size - pos)
46
+
47
+ best_len: cython.Py_ssize_t = 0
48
+ best_offset: cython.Py_ssize_t = 0
49
+ window_start: cython.Py_ssize_t = max(0, pos - WINDOW_SIZE - MAX_MATCH)
50
+
51
+ prev_pos: cython.Py_ssize_t
52
+ match_len: cython.long
53
+ max_len: cython.long
54
+
55
+ # Check all positions starting with the same 3-byte sequence.
56
+ key = data[pos:pos+3]
57
+ if key not in hash_table:
58
+ return (0, 0)
59
+
60
+ for prev_pos in hash_table[key]:
61
+ if prev_pos < window_start or prev_pos >= pos:
62
+ continue
63
+
64
+ # Extend match as far as possible.
65
+ match_len = 3
66
+ max_len = min(MAX_MATCH, pos - prev_pos)
67
+ while match_len < max_len and data[prev_pos + match_len] == data[pos + match_len]:
68
+ match_len += 1
69
+
70
+ # Prefer longer matches, break ties by preferring closer offsets.
71
+ if match_len > best_len:
72
+ best_len = match_len
73
+ best_offset = pos - prev_pos
74
+
75
+ # Lazy matching: check if next position has a better match.
76
+ next_key = data[pos + 1:pos + 4]
77
+ if 0 < best_len < MAX_MATCH and next_key in hash_table and pos + best_len + 1 < input_size:
78
+ next_best_len: cython.Py_ssize_t = 0
79
+ window_start = max(0, pos + 1 - WINDOW_SIZE - MAX_MATCH)
80
+
81
+ for prev_pos in hash_table[next_key]:
82
+ if prev_pos < window_start:
83
+ continue
84
+
85
+ match_len = 3
86
+ max_len = min(MAX_MATCH, pos - prev_pos, input_size - pos - 1)
87
+ while match_len < max_len and data[prev_pos + match_len] == data[pos + 1 + match_len]:
88
+ match_len += 1
89
+
90
+ if match_len > next_best_len:
91
+ next_best_len = match_len
92
+
93
+ # If the next position has a significantly better match, ignore this one.
94
+ if next_best_len > best_len + 1:
95
+ best_offset = best_len = 0
96
+
97
+ return (best_offset, best_len)
98
+
99
+ # Build output as bit stream.
100
+ output = bytearray(b'\0')
101
+ pos: cython.Py_ssize_t = 0
102
+ flags_pos: cython.Py_ssize_t = 0
103
+ flags: cython.int = 0xFF0000
104
+
105
+ stats = [0, 0, 0, 0]
106
+
107
+ while pos < input_size:
108
+ offset, length = find_longest_match(pos)
109
+
110
+ #if offset > 0:
111
+ # assert data[pos:pos+length] == data[pos-offset:pos-offset+length], (
112
+ # data[pos:pos+3], data[pos-offset:pos-offset+length])
113
+
114
+ # Update hash table for current position.
115
+ key = data[pos:pos+3]
116
+ hash_table[key].append(pos)
117
+
118
+ flag = 0
119
+ offset -= length # offset >= length if interesting, so remove redundancy.
120
+
121
+ # See if the match is worth it and store a single literal byte otherwise.
122
+
123
+ if length > 2 and 0 <= offset <= 0x7F:
124
+ # Store 7 bit offset and length as two bytes.
125
+ output.append(offset)
126
+ #assert output[-1] & 0x80 == 0
127
+ output.append(length - 3)
128
+ stats[1] += 1
129
+ elif length > 2 and length - 3 <= 0x1F and 0 <= offset <= 0x1FF:
130
+ # Store a longer 7+2 bit offset at the cost of a shorter 5 bit length.
131
+ output.append((offset & 0x7F) | 0x80)
132
+ output.append(((offset & 0x180) >> 2) | (length - 3))
133
+ #assert output[-1] & 0x80 == 0
134
+ stats[2] += 1
135
+ elif length > 3 and 0 <= offset < (1 << 14):
136
+ # Store a 7+7 bit offset with a separate 8 bit length.
137
+ output.append(offset & 0x7F | 0x80)
138
+ output.append((offset >> 7) & 0x7F | 0x80)
139
+ output.append(length - 3)
140
+ stats[3] += 1
141
+ else:
142
+ # Encode 8 bit literal + 1 bit flag.
143
+ flag = 1
144
+ length = 1
145
+ output.append(data[pos])
146
+ stats[0] += 1
147
+
148
+ pos += length
149
+
150
+ flags = (flag << 7) | (flags >> 1)
151
+ if flags < 0x10000:
152
+ output[flags_pos] = flags & 0xFF
153
+ flags_pos = len(output)
154
+ output.append(0) # next flags
155
+ flags = 0xFF0000
156
+
157
+ if flags_pos == len(output) - 1:
158
+ output.pop()
159
+ else:
160
+ # Pad flags with empty non-literals
161
+ # - decompressor must stop at the end of the output buffer !
162
+ while flags >= 0x10000:
163
+ flags >>= 1
164
+ output[flags_pos] = flags & 0xFF
165
+
166
+ if PRINT_STATS:
167
+ print("BYTES:", input_size, "->", len(output))
168
+ print("ENCODINGS:", stats)
169
+
170
+ return bytes(output)
Binary file
@@ -0,0 +1,24 @@
1
+ cdef class Action:
2
+ cdef perform(self, token_stream, text)
3
+
4
+ cdef class Return(Action):
5
+ cdef object value
6
+ cdef perform(self, token_stream, text)
7
+
8
+ cdef class Call(Action):
9
+ cdef object function
10
+ cdef perform(self, token_stream, text)
11
+
12
+ cdef class Method(Action):
13
+ cdef str name
14
+ cdef dict kwargs
15
+
16
+ cdef class Begin(Action):
17
+ cdef object state_name
18
+ cdef perform(self, token_stream, text)
19
+
20
+ cdef class Ignore(Action):
21
+ cdef perform(self, token_stream, text)
22
+
23
+ cdef class Text(Action):
24
+ cdef perform(self, token_stream, text)