cinderx 2026.1.16.2__cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.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 (68) hide show
  1. __static__/__init__.py +641 -0
  2. __static__/compiler_flags.py +8 -0
  3. __static__/enum.py +160 -0
  4. __static__/native_utils.py +77 -0
  5. __static__/type_code.py +48 -0
  6. __strict__/__init__.py +39 -0
  7. _cinderx.so +0 -0
  8. cinderx/__init__.py +577 -0
  9. cinderx/__pycache__/__init__.cpython-314.pyc +0 -0
  10. cinderx/_asyncio.py +156 -0
  11. cinderx/compileall.py +710 -0
  12. cinderx/compiler/__init__.py +40 -0
  13. cinderx/compiler/__main__.py +137 -0
  14. cinderx/compiler/config.py +7 -0
  15. cinderx/compiler/consts.py +72 -0
  16. cinderx/compiler/debug.py +70 -0
  17. cinderx/compiler/dis_stable.py +283 -0
  18. cinderx/compiler/errors.py +151 -0
  19. cinderx/compiler/flow_graph_optimizer.py +1287 -0
  20. cinderx/compiler/future.py +91 -0
  21. cinderx/compiler/misc.py +32 -0
  22. cinderx/compiler/opcode_cinder.py +18 -0
  23. cinderx/compiler/opcode_static.py +100 -0
  24. cinderx/compiler/opcodebase.py +158 -0
  25. cinderx/compiler/opcodes.py +991 -0
  26. cinderx/compiler/optimizer.py +547 -0
  27. cinderx/compiler/pyassem.py +3711 -0
  28. cinderx/compiler/pycodegen.py +7660 -0
  29. cinderx/compiler/pysourceloader.py +62 -0
  30. cinderx/compiler/static/__init__.py +1404 -0
  31. cinderx/compiler/static/compiler.py +629 -0
  32. cinderx/compiler/static/declaration_visitor.py +335 -0
  33. cinderx/compiler/static/definite_assignment_checker.py +280 -0
  34. cinderx/compiler/static/effects.py +160 -0
  35. cinderx/compiler/static/module_table.py +666 -0
  36. cinderx/compiler/static/type_binder.py +2176 -0
  37. cinderx/compiler/static/types.py +10580 -0
  38. cinderx/compiler/static/util.py +81 -0
  39. cinderx/compiler/static/visitor.py +91 -0
  40. cinderx/compiler/strict/__init__.py +69 -0
  41. cinderx/compiler/strict/class_conflict_checker.py +249 -0
  42. cinderx/compiler/strict/code_gen_base.py +409 -0
  43. cinderx/compiler/strict/common.py +507 -0
  44. cinderx/compiler/strict/compiler.py +352 -0
  45. cinderx/compiler/strict/feature_extractor.py +130 -0
  46. cinderx/compiler/strict/flag_extractor.py +97 -0
  47. cinderx/compiler/strict/loader.py +827 -0
  48. cinderx/compiler/strict/preprocessor.py +11 -0
  49. cinderx/compiler/strict/rewriter/__init__.py +5 -0
  50. cinderx/compiler/strict/rewriter/remove_annotations.py +84 -0
  51. cinderx/compiler/strict/rewriter/rewriter.py +975 -0
  52. cinderx/compiler/strict/runtime.py +77 -0
  53. cinderx/compiler/symbols.py +1754 -0
  54. cinderx/compiler/unparse.py +414 -0
  55. cinderx/compiler/visitor.py +194 -0
  56. cinderx/jit.py +230 -0
  57. cinderx/opcode.py +202 -0
  58. cinderx/static.py +113 -0
  59. cinderx/strictmodule.py +6 -0
  60. cinderx/test_support.py +341 -0
  61. cinderx-2026.1.16.2.dist-info/METADATA +15 -0
  62. cinderx-2026.1.16.2.dist-info/RECORD +68 -0
  63. cinderx-2026.1.16.2.dist-info/WHEEL +6 -0
  64. cinderx-2026.1.16.2.dist-info/licenses/LICENSE +21 -0
  65. cinderx-2026.1.16.2.dist-info/top_level.txt +5 -0
  66. opcodes/__init__.py +0 -0
  67. opcodes/assign_opcode_numbers.py +272 -0
  68. opcodes/cinderx_opcodes.py +121 -0
@@ -0,0 +1,341 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ # pyre-strict
3
+
4
+ import abc
5
+ import ctypes
6
+ import dis
7
+ import functools
8
+ import importlib
9
+ import multiprocessing
10
+ import os.path
11
+ import sys
12
+ import tempfile
13
+ import types
14
+ import unittest
15
+ from contextlib import contextmanager
16
+ from pathlib import Path
17
+ from typing import Callable, Coroutine, Generator, Sequence, TypeVar
18
+
19
+ import cinderx
20
+ import cinderx.jit
21
+
22
+ try:
23
+ import cinder
24
+
25
+ def hasCinderX() -> bool:
26
+ return True
27
+
28
+ except ImportError:
29
+
30
+ def hasCinderX() -> bool:
31
+ return False
32
+
33
+
34
+ # String encoding to use for subprocesses.
35
+ ENCODING: str = sys.stdout.encoding or sys.getdefaultencoding()
36
+
37
+ # Hack to allow subprocesses to find where the cinderx module is.
38
+ CINDERX_PATH: str = os.path.dirname(os.path.dirname(cinderx.__file__))
39
+
40
+
41
+ def subprocess_env() -> dict[str, str]:
42
+ # We have CINDERX_PATH here over the rest of sys.path because our cinderx/opcode.py
43
+ # library is generated on a per-version basis and ends up being thrown into cinderx
44
+ # at build time. When we run tests with sys.path we can end up with PythonLib on the
45
+ # path first and we can pick up the version which doesn't have it injected.
46
+ return {
47
+ "PYTHONPATH": CINDERX_PATH + os.path.pathsep + os.path.pathsep.join(sys.path)
48
+ }
49
+
50
+
51
+ def get_cinderjit_xargs() -> list[str]:
52
+ args = []
53
+ for k, v in sys._xoptions.items():
54
+ if not k.startswith("jit"):
55
+ continue
56
+ elif v is True:
57
+ args.extend(["-X", k])
58
+ else:
59
+ args.extend(["-X", f"{k}={v}"])
60
+ return args
61
+
62
+
63
+ TYield = TypeVar("TYield")
64
+ TSend = TypeVar("TSend")
65
+ TReturn = TypeVar("TReturn")
66
+
67
+
68
+ def get_await_stack(
69
+ coro: Coroutine[TYield, TSend, TReturn],
70
+ ) -> list[Coroutine[TYield, TSend, TReturn]]:
71
+ """Return the chain of coroutines reachable from coro via its awaiter"""
72
+
73
+ stack = []
74
+ awaiter = cinder._get_coro_awaiter(coro)
75
+ while awaiter is not None:
76
+ stack.append(awaiter)
77
+
78
+ # pyre-ignore[1001]
79
+ awaiter = cinder._get_coro_awaiter(awaiter)
80
+ return stack
81
+
82
+
83
+ def verify_stack(
84
+ testcase: unittest.TestCase, stack: Sequence[str], expected: Sequence[str]
85
+ ) -> None:
86
+ n = len(expected)
87
+ frames = stack[-n:]
88
+ testcase.assertEqual(len(frames), n, "Callstack had less frames than expected")
89
+
90
+ for actual, exp in zip(frames, expected):
91
+ testcase.assertTrue(
92
+ actual.endswith(exp),
93
+ f"The actual frame {actual} doesn't refer to the expected function {exp}",
94
+ )
95
+
96
+
97
+ def compiles_after_one_call() -> bool:
98
+ """
99
+ Check if CinderX will automatically compile functions after they are called once.
100
+ """
101
+ return cinderx.jit.get_compile_after_n_calls() == 0
102
+
103
+
104
+ _FT = TypeVar("_FT", bound=Callable[..., object])
105
+
106
+
107
+ # pyre-ignore[34]: Type variable isn't present in parameters
108
+ def passAlways(reason: str) -> Callable[[_FT], _FT]:
109
+ """
110
+ Force a test to always pass.
111
+ Useful when `skip` is not desired
112
+ (e.g. intentionally skipping tests that shouldn't be deleted)
113
+ """
114
+
115
+ def decorator(test_item: object) -> object:
116
+ if isinstance(test_item, type):
117
+ # apply this decorator to all "test_" methods of the test case
118
+ for attr_name in dir(test_item):
119
+ if attr_name.startswith("test_"):
120
+ attr = getattr(test_item, attr_name)
121
+ setattr(test_item, attr_name, passAlways(attr))
122
+
123
+ else:
124
+
125
+ @functools.wraps(test_item)
126
+ def pass_wrapper(*args: object, **kwargs: object) -> None:
127
+ return
128
+
129
+ test_item = pass_wrapper
130
+
131
+ test_item.__unittest_skip_why__ = reason
132
+ return test_item
133
+
134
+ if isinstance(reason, types.FunctionType):
135
+ test_item = reason
136
+ reason = ""
137
+ return decorator(test_item)
138
+ # pyre-ignore[7]: bad return type
139
+ return decorator
140
+
141
+
142
+ # pyre-ignore[34]: Type variable isn't present in parameters
143
+ def passIf(condition: object, reason: str) -> Callable[[_FT], _FT]:
144
+ """
145
+ Force a test to pass if the condition is true.
146
+ """
147
+ if condition:
148
+ return passAlways(reason)
149
+ return lambda obj: obj
150
+
151
+
152
+ # pyre-ignore[34]: Type variable isn't present in parameters
153
+ def passUnless(condition: object, reason: str) -> Callable[[_FT], _FT]:
154
+ """
155
+ Force a test to pass unless the condition is true.
156
+ """
157
+ if not condition:
158
+ return passAlways(reason)
159
+ return lambda obj: obj
160
+
161
+
162
+ def skip_if_jit(reason: str) -> Callable[[Callable[..., None]], Callable[..., None]]:
163
+ return passIf(cinderx.jit.is_enabled(), reason)
164
+
165
+
166
+ def skip_unless_jit(
167
+ reason: str,
168
+ ) -> Callable[[Callable[..., None]], Callable[..., None]]:
169
+ return passUnless(cinderx.jit.is_enabled(), reason)
170
+
171
+
172
+ def skip_unless_lazy_imports(
173
+ reason: str = "Depends on Lazy Imports being enabled",
174
+ ) -> Callable[[Callable[..., None]], Callable[..., None]]:
175
+ return passUnless(hasattr(importlib, "set_lazy_imports"), reason)
176
+
177
+
178
+ TRet = TypeVar("TRet")
179
+
180
+
181
+ def failUnlessJITCompiled(func: Callable[..., TRet]) -> Callable[..., TRet]:
182
+ """
183
+ Fail a test if the JIT is enabled but the test body wasn't JIT-compiled.
184
+ """
185
+ if not cinderx.jit.is_enabled():
186
+ return func
187
+
188
+ try:
189
+ # force_compile raises a RuntimeError if compilation fails. If it does,
190
+ # defer raising an exception to when the decorated function runs.
191
+ cinderx.jit.force_compile(func)
192
+ except RuntimeError as re:
193
+ if re.args == ("PYJIT_RESULT_NOT_ON_JITLIST",):
194
+ # We generally only run tests with a jitlist under
195
+ # Tools/scripts/jitlist_bisect.py. In that case, we want to allow
196
+ # the decorated function to run under the interpreter to determine
197
+ # if it's the function the JIT is handling incorrectly.
198
+ return func
199
+
200
+ # re is cleared at the end of the except block but we need the value
201
+ # when wrapper() is eventually called.
202
+ exc: RuntimeError = re
203
+
204
+ def wrapper(*args: ...) -> None:
205
+ raise RuntimeError(
206
+ f"JIT compilation of {func.__qualname__} failed with {exc}"
207
+ )
208
+
209
+ return wrapper
210
+
211
+ return func
212
+
213
+
214
+ def fail_if_deopt(func: Callable[..., TRet]) -> Callable[..., TRet]:
215
+ """
216
+ Raise a RuntimeException if _any_ deopts occur during execution of the
217
+ wrapped function. Note deopts occuring in nested function calls will also
218
+ trigger this. Also, execution will run to completion - it won't stop at the
219
+ point a deopt occurs.
220
+ """
221
+
222
+ if not cinderx.jit.is_enabled():
223
+ return func
224
+
225
+ def wrapper(*args: ..., **kwargs: ...) -> TRet:
226
+ cinderx.jit.get_and_clear_runtime_stats()
227
+ r = func(*args, **kwargs)
228
+ # pyre-ignore[6]
229
+ if len(deopts := cinderx.jit.get_and_clear_runtime_stats()["deopt"]):
230
+ raise RuntimeError(f"Deopt occured {deopts}")
231
+ return r
232
+
233
+ wrapper.inner_function = func
234
+
235
+ return wrapper
236
+
237
+
238
+ def is_asan_build() -> bool:
239
+ try:
240
+ ctypes.pythonapi.__asan_init
241
+ return True
242
+ except AttributeError:
243
+ return False
244
+
245
+
246
+ # This is long because ASAN + JIT + subprocess + the Python compiler can be
247
+ # pretty slow in CI.
248
+ SUBPROCESS_TIMEOUT_SEC = 100 if is_asan_build() else 5
249
+
250
+
251
+ @contextmanager
252
+ def temp_sys_path() -> Generator[Path, None, None]:
253
+ with tempfile.TemporaryDirectory() as tmpdir:
254
+ _orig_sys_modules = sys.modules
255
+ sys.modules = _orig_sys_modules.copy()
256
+ _orig_sys_path = sys.path[:]
257
+ sys.path.insert(0, tmpdir)
258
+ try:
259
+ yield Path(tmpdir)
260
+ finally:
261
+ sys.path[:] = _orig_sys_path
262
+ sys.modules = _orig_sys_modules
263
+
264
+
265
+ class _ExceptionResult:
266
+ def __init__(self, exc: Exception) -> None:
267
+ self.exc = exc
268
+
269
+
270
+ def run_in_subprocess(func: Callable[..., TRet]) -> Callable[..., TRet]:
271
+ """
272
+ Run a function in a subprocess. This enables modifying process state in a
273
+ test without affecting other test functions.
274
+ """
275
+
276
+ queue: multiprocessing.Queue = multiprocessing.Queue()
277
+
278
+ def wrapper(queue: multiprocessing.Queue, *args: object) -> None:
279
+ try:
280
+ result = func(*args)
281
+ queue.put(result, timeout=SUBPROCESS_TIMEOUT_SEC)
282
+ except Exception as e:
283
+ queue.put(_ExceptionResult(e), timeout=SUBPROCESS_TIMEOUT_SEC)
284
+
285
+ def wrapped(*args: object) -> TRet:
286
+ fork = multiprocessing.get_context("fork")
287
+ p = fork.Process(target=wrapper, args=(queue, *args))
288
+ p.start()
289
+ value = queue.get(timeout=SUBPROCESS_TIMEOUT_SEC)
290
+ p.join(timeout=SUBPROCESS_TIMEOUT_SEC)
291
+ if isinstance(value, _ExceptionResult):
292
+ raise value.exc
293
+ return value
294
+
295
+ return wrapped
296
+
297
+
298
+ class AssertBytecodeContainsMixin(abc.ABC):
299
+ @abc.abstractmethod
300
+ def assertIn(
301
+ self, expected: object, actual: Sequence[object], msg: str | None = None
302
+ ) -> None:
303
+ raise NotImplementedError
304
+
305
+ @abc.abstractmethod
306
+ def assertTrue(self, expr: object, msg: str | None = None) -> None:
307
+ raise NotImplementedError
308
+
309
+ def assertBytecodeContains(
310
+ self,
311
+ func: object,
312
+ expected_opcode: str,
313
+ expected_oparg: int | None = None,
314
+ ) -> None:
315
+ try:
316
+ # pyre-ignore[16] - for things wrapped by fail_if_deopt()
317
+ inner_function = func.inner_function
318
+ except AttributeError:
319
+ pass
320
+ else:
321
+ func = inner_function
322
+
323
+ bytecode_instructions = dis.get_instructions(func)
324
+
325
+ if expected_oparg is None:
326
+ opcodes = [instr.opname for instr in bytecode_instructions]
327
+ self.assertIn(
328
+ expected_opcode,
329
+ opcodes,
330
+ f"{expected_opcode} opcode should be present in {func.__name__} bytecode",
331
+ )
332
+ else:
333
+ matching_instructions = [
334
+ instr
335
+ for instr in bytecode_instructions
336
+ if instr.opname == expected_opcode and instr.arg == expected_oparg
337
+ ]
338
+ self.assertTrue(
339
+ len(matching_instructions) > 0,
340
+ f"{expected_opcode} opcode with oparg {expected_oparg} should be present in {func.__name__} bytecode",
341
+ )
@@ -0,0 +1,15 @@
1
+ Metadata-Version: 2.4
2
+ Name: cinderx
3
+ Version: 2026.1.16.2
4
+ Summary: High-performance Python runtime extension
5
+ Home-page: https://www.github.com/facebookincubator/cinderx
6
+ Classifier: Development Status :: 3 - Alpha
7
+ Classifier: Intended Audience :: Developers
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Requires-Python: >=3.14,<3.16
10
+ License-File: LICENSE
11
+ Dynamic: classifier
12
+ Dynamic: home-page
13
+ Dynamic: license-file
14
+ Dynamic: requires-python
15
+ Dynamic: summary
@@ -0,0 +1,68 @@
1
+ _cinderx.so,sha256=HG6ruF2h6XQJPDVna4gFVBO2-1xO1G_Bfxb78RgI_Vo,86497032
2
+ __static__/__init__.py,sha256=0joSfJlfTXAsn2v32Mu1A6WHXOORtaKt1o0x805qzZQ,15255
3
+ __static__/compiler_flags.py,sha256=jtQ3-hAAzUPoz5Qa4gQoDz7tVjhhe1HS3RkTJo8HTPg,198
4
+ __static__/enum.py,sha256=_XgWKshipOcJa_JRX7JHSmGrlq_U4sZy0QN5BiEG8hc,4973
5
+ __static__/native_utils.py,sha256=BImkLhZOL4lIH0J2d3F6z2_9nm7rIn-xSNz6Kon8N0c,1914
6
+ __static__/type_code.py,sha256=vdBKmTtsIEH6I2Mtvo_JGRzBVPKj8zuve5RYN93IacA,924
7
+ __strict__/__init__.py,sha256=n2VcZf_XT_NszlvjITc8sdtJYi9ILklaK39EsaS02TI,790
8
+ cinderx/__init__.py,sha256=5FNOK3vcxaN2-Isu-COoJU-OTdwc9Ujv_1dhq36W_tI,19493
9
+ cinderx/_asyncio.py,sha256=Msix3WILwFrubkq2zcMEZTK8WJyl-zBy3Fvxxm1_E94,6371
10
+ cinderx/compileall.py,sha256=9reYsJEOncT-Td0-8pFIN7Rcs9GeLTPftXBX3qrJ0g8,23963
11
+ cinderx/jit.py,sha256=QDj-xrsHY_6a7sRGN7zExVWugaoUI1rtPAXeB93g9Xc,6210
12
+ cinderx/opcode.py,sha256=NG2GwWI69WSVY-w9qA29KDEznw4hZdpE3otvMjeSYKI,6450
13
+ cinderx/static.py,sha256=TTY6wMakkSZvlMUYcz6bBMEZ26W19CXYQV3PzpvVhIU,2493
14
+ cinderx/strictmodule.py,sha256=Rcc1GNs3N77mh-LvHT-JJo06QdMMaBxnOL-YjtOnQzc,140
15
+ cinderx/test_support.py,sha256=2kZdc73BLCMjs_02VYTGg36abc1N9QTKm2_t0l9oghk,10245
16
+ cinderx/__pycache__/__init__.cpython-314.pyc,sha256=V-mJJtuh05PQvOJG2QlAMlGLI8B0GP8E33T0HBLS5Pc,29602
17
+ cinderx/compiler/__init__.py,sha256=3nlRsYnqRzsPhjVC1FOvj59POUbyUvKFqq4ifpNGavg,1092
18
+ cinderx/compiler/__main__.py,sha256=tEy0RbdRXw_APOD09ubatLx79u4uHnnu_zGMa9rEZcU,4111
19
+ cinderx/compiler/config.py,sha256=gcnTNYbS7XEDUI4uR6Jd3YuTL19HcT7dNrCqpo9NWcs,173
20
+ cinderx/compiler/consts.py,sha256=5C_3Wl5TkuHSmOQjqRNhJyrM9Kv-SeUXgoioj7lWIow,1669
21
+ cinderx/compiler/debug.py,sha256=m91yJOzIyzWZDh-bqLCAtSXCyzZuqk5Rt_iib2ZMSw8,1975
22
+ cinderx/compiler/dis_stable.py,sha256=1Sd_rz0LeTEyT_Z1VJ8TxWI33l7qEkVeihMYHSjP5QM,9161
23
+ cinderx/compiler/errors.py,sha256=ylueSJp1HNejcjo1Aqv0WvQfenP7v3cxrMI0fXpUYr4,4310
24
+ cinderx/compiler/flow_graph_optimizer.py,sha256=ESxwzFQS_KzUOFhrxcVJYQuO-QSw_JCJnirfwVROT8k,45916
25
+ cinderx/compiler/future.py,sha256=3YPXN1bxzyIYApkFTps_nT2CQy5X9IDmM8-ON467Vxg,2704
26
+ cinderx/compiler/misc.py,sha256=0GpxepYUvQ54LLGIGCE2E0tDfYYB3Sx9nkdRE38g79Q,763
27
+ cinderx/compiler/opcode_cinder.py,sha256=VJ1Q5-lDML6Kr5MiCqplcowAX0eOBaJp-xK6L7Nl2-4,421
28
+ cinderx/compiler/opcode_static.py,sha256=GCalp3_hqwb4NdstcIo5eoZ9lHvfdvgEc8-GfEn5iRM,3168
29
+ cinderx/compiler/opcodebase.py,sha256=ub9A7uSIBy8MfRUsk306iwzv50kSowpV1l5k0FBCgpI,5331
30
+ cinderx/compiler/opcodes.py,sha256=Z9YnH4YhhrM75I5PX99945VVPS9jMRVo8P75qIb3bK0,29976
31
+ cinderx/compiler/optimizer.py,sha256=VnWI8amCzJsJcPHSytYF4lVylB4sFxiPZU0Q2YnHcno,17841
32
+ cinderx/compiler/pyassem.py,sha256=MPpvqSjIct66jrR6cck8QYvfRJtNEv1n_DOC26wsgg0,135073
33
+ cinderx/compiler/pycodegen.py,sha256=YRKXA00OTmU31ukb7f8YeduLwAZKCiPBTzMdrShzGso,264017
34
+ cinderx/compiler/pysourceloader.py,sha256=L4Ia95fOojKFuzdaARWAqa4Fk-zjXMoqvU-NcPFnS4k,1746
35
+ cinderx/compiler/symbols.py,sha256=FtulDpVlF7gi0P9dSZQGEu01e43LECvIWQwczQP6v9s,63316
36
+ cinderx/compiler/unparse.py,sha256=tFAWVzBgnQoWg660m7OgQXh80kcbo-z1K5ErdjPbdsU,11700
37
+ cinderx/compiler/visitor.py,sha256=zQqiLPBhKvYBTi4xXGH_6S4Hdqsoc6CB2aBHLXtkoTk,6329
38
+ cinderx/compiler/static/__init__.py,sha256=ULUkEhzO_JxQZUwyh8sum-BaZnRqV2_Ws4zvn9ijRdU,49041
39
+ cinderx/compiler/static/compiler.py,sha256=fzw5ODUlIbuSSql4guUBry0nV8qAZPVr32JgGJM-sxY,27652
40
+ cinderx/compiler/static/declaration_visitor.py,sha256=8f1g4OmFiZlMsagntK_l0g2U13aHxf6I-KNC4rfZwgU,11147
41
+ cinderx/compiler/static/definite_assignment_checker.py,sha256=IBrjuNgPuUqWJ-0XO9chbdGSV2CTsLNXhzr9xEsepQo,8713
42
+ cinderx/compiler/static/effects.py,sha256=3STt2F3fDbeDSokWff9M-Cw02DVLe8SnuCVdHlMmxW8,4598
43
+ cinderx/compiler/static/module_table.py,sha256=-Tzh-aB8-l188R-OaLELxMvBv8jUgbt7ouUGn0rN76U,26724
44
+ cinderx/compiler/static/type_binder.py,sha256=CvLy7sSBTgM_ZjHBWbevKXTVCbs8WErBUG4qspsibfI,82060
45
+ cinderx/compiler/static/types.py,sha256=vLzWyKZoGeXWzNVsDj1f3vrRFPJfcIQXe1yG_p9lim0,368080
46
+ cinderx/compiler/static/util.py,sha256=0MQlvH1QVW7N08ebbNTqrWA8fgKqsvSzdedUBHXEInA,2281
47
+ cinderx/compiler/static/visitor.py,sha256=ifyMWlSh69I1foJ5vYsvXMDoFR0rMQQYsS-f-4FRE30,3382
48
+ cinderx/compiler/strict/__init__.py,sha256=NnZOPAPJzIJ1im0yseDWP4GDJEtTF0qBjojP_nVVb54,1695
49
+ cinderx/compiler/strict/class_conflict_checker.py,sha256=bGujlDKAp2-g_oaA3vWXhXbci81dOvJ9lzpxgBW-ZXE,7594
50
+ cinderx/compiler/strict/code_gen_base.py,sha256=ynmYmhW4SPby6L9Yq1EtfkexsPgocMLtiu5FkOjQ7N4,13938
51
+ cinderx/compiler/strict/common.py,sha256=GI0kcNM7iKdefrVHRxeC5Nsn6eSvw4JMpj_6wo5EbZ8,15520
52
+ cinderx/compiler/strict/compiler.py,sha256=krOZdMOwRZgJILVdk9TXeQqLhZyQskfTYl4nYi0PhdY,11667
53
+ cinderx/compiler/strict/feature_extractor.py,sha256=JeSwupkhlwDUpllUjKuiv5B9AuJ_KlQq-2oGUJKQFiA,4077
54
+ cinderx/compiler/strict/flag_extractor.py,sha256=M6HQtp9LrFmrp8UeCfcpTJnW6RORIhWFfpCIfpGU36A,2803
55
+ cinderx/compiler/strict/loader.py,sha256=VQVa_jFAul6td4gx5ZH1P7ptBz_DZWvPpXIOe3iG1dM,30837
56
+ cinderx/compiler/strict/preprocessor.py,sha256=vwo3MrkPwbbsqv6vAWB_GONV8bh55NcEyo5glrD1Huk,227
57
+ cinderx/compiler/strict/runtime.py,sha256=wy8Pvqaym724eJpme9iriGcQNQPrbzNDi36g187OfK8,1796
58
+ cinderx/compiler/strict/rewriter/__init__.py,sha256=oUCv3Av8YqP6ciJMriVrLeOq55G8k9gHroCHhISCcbQ,218
59
+ cinderx/compiler/strict/rewriter/remove_annotations.py,sha256=oDC1xzzvaQMnwDcfQ5u2Vm65yzNjt9lcH3hcIaBIZes,3003
60
+ cinderx/compiler/strict/rewriter/rewriter.py,sha256=bs4SQcGVb3N1_IQeA-tMOajGrEitNZha0N2_VtyOcuA,31609
61
+ opcodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
+ opcodes/assign_opcode_numbers.py,sha256=BC7tsGBtiOLEkBMRRi6F3pNVW-ZGve3g9XaMZidi2X8,8161
63
+ opcodes/cinderx_opcodes.py,sha256=8-nTvPU-Y8p33W8iVLrC2vYvXj3jMMxeudxxFyB6QOM,3831
64
+ cinderx-2026.1.16.2.dist-info/METADATA,sha256=e50g5aIkdOY2QcPMk9yfU3y6bDXkEnalbNjh2ci4sbo,462
65
+ cinderx-2026.1.16.2.dist-info/WHEEL,sha256=W3HekPD1LPmaWNNpfLvJfkRKxErKmPGqCVkQ6jDfCSs,152
66
+ cinderx-2026.1.16.2.dist-info/top_level.txt,sha256=yMDseUEaBx2jxePsSz0RIcVQe4gqqpEiYKs2nO7Y20Q,47
67
+ cinderx-2026.1.16.2.dist-info/RECORD,,
68
+ cinderx-2026.1.16.2.dist-info/licenses/LICENSE,sha256=2m03A-0Ry-Qr0hLHJZV8mNojy_8ZmMBfpLPZdtGljpM,1088
@@ -0,0 +1,6 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp314-cp314-manylinux_2_24_x86_64
5
+ Tag: cp314-cp314-manylinux_2_28_x86_64
6
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) Meta Platforms, Inc. and affiliates.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,5 @@
1
+ __static__
2
+ __strict__
3
+ _cinderx
4
+ cinderx
5
+ opcodes
opcodes/__init__.py ADDED
File without changes