fixpoints 0.7.0__tar.gz → 0.7.0.post8.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fixpoints
3
- Version: 0.7.0
3
+ Version: 0.7.0.post8.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(