fixpoints 0.7.0.post2.dev0__tar.gz → 0.7.0.post9.dev0__tar.gz
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.
- {fixpoints-0.7.0.post2.dev0 → fixpoints-0.7.0.post9.dev0}/PKG-INFO +1 -1
- {fixpoints-0.7.0.post2.dev0 → fixpoints-0.7.0.post9.dev0}/src/fixpoints/_core.py +14 -0
- {fixpoints-0.7.0.post2.dev0 → fixpoints-0.7.0.post9.dev0}/.gitignore +0 -0
- {fixpoints-0.7.0.post2.dev0 → fixpoints-0.7.0.post9.dev0}/README.md +0 -0
- {fixpoints-0.7.0.post2.dev0 → fixpoints-0.7.0.post9.dev0}/pyproject.toml +0 -0
- {fixpoints-0.7.0.post2.dev0 → fixpoints-0.7.0.post9.dev0}/src/fixpoints/__init__.py +0 -0
- {fixpoints-0.7.0.post2.dev0 → fixpoints-0.7.0.post9.dev0}/tests/test_fixpoint.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fixpoints
|
|
3
|
-
Version: 0.7.0.
|
|
3
|
+
Version: 0.7.0.post9.dev0
|
|
4
4
|
Summary: Least-fixpoint cached-property infrastructure for mutual recursion
|
|
5
5
|
Project-URL: Repository, https://github.com/Atry/MIXINv2
|
|
6
6
|
Author-email: "Yang, Bo" <yang-bo@yang-bo.com>
|
|
@@ -235,6 +235,20 @@ class fixpoint_cached_property:
|
|
|
235
235
|
fixpoint_cached_property.max_fixpoint_iterations.set(0) # single-pass
|
|
236
236
|
fixpoint_cached_property.max_fixpoint_iterations.set(100) # bounded multi-pass
|
|
237
237
|
fixpoint_cached_property.max_fixpoint_iterations.set(FixpointIterationSentinel.UNLIMITED) # unbounded (default)
|
|
238
|
+
|
|
239
|
+
TODO (trampoline to lift the Python 3.12+ recursion ceiling): when a property's body accesses the
|
|
240
|
+
same property on child nodes, the descent recurses through ``__get__`` once per level, and each
|
|
241
|
+
level goes through the descriptor protocol (the C ``__getattribute__`` -> ``__get__`` call). Those C
|
|
242
|
+
frames count toward CPython 3.12+'s fixed ``Py_C_RECURSION_LIMIT``, which ``sys.setrecursionlimit``
|
|
243
|
+
and a larger thread stack do NOT lift, so a deep term overflows at ~5,000 levels even inside
|
|
244
|
+
``run_in_large_stack``. This is the sole blocker that makes the deep ``input_quote_defun`` artifact
|
|
245
|
+
(and the self-compilation bootstrap) buildable on CPython 3.11 / PyPy 3.11 only; plain Python
|
|
246
|
+
recursion and ``ast.unparse`` are pure Python and stay liftable. Measured on CPython 3.13: a
|
|
247
|
+
recursive ``loose_bound`` over a 50,000-deep term fails at ~4,998 levels, while the same computation
|
|
248
|
+
on an explicit stack succeeds at the default recursion limit. Driving the descent from an explicit
|
|
249
|
+
work-stack (e.g. a generator-driven trampoline: the property body yields each child-property request
|
|
250
|
+
and this driver resolves dependencies bottom-up, preserving ``bottom``/``merge``/``accumulate`` and
|
|
251
|
+
the reentry digest loop) would remove the C-stack frames per level and lift the ceiling.
|
|
238
252
|
"""
|
|
239
253
|
|
|
240
254
|
max_fixpoint_iterations: ClassVar[ContextVar[int | FixpointIterationSentinel]] = ContextVar(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|