Limitations
Some Python patterns do not translate cleanly to Chelis. These patterns fall to Tier 2 (bridge) or Tier 3 (agentic) translation, or are rejected outright.
Dynamic typing without annotations
Section titled “Dynamic typing without annotations”Python code that relies on duck typing, untyped containers (list without a type parameter), or Any-typed values gives Calcify no concrete type to emit. Without type annotations from the typing pass, translation cannot proceed at Tier 1.
Mitigation: add type annotations and re-run the typing pass before invoking Calcify.
Mutation-heavy imperative code
Section titled “Mutation-heavy imperative code”Chelis is a functional language. Python code that mutates shared state, relies on in-place updates to data structures, or uses mutable global variables requires restructuring to translate at Tier 1.
Patterns that trigger this limitation:
- In-place list or dictionary mutation across function boundaries.
- Class-level mutable state shared between methods.
- Global variables modified at runtime.
Calcify can sometimes lift local mutation into functional updates (Tier 1), but cross-boundary mutation falls to Tier 2 or Tier 3.
C extensions and ctypes
Section titled “C extensions and ctypes”Python modules that call into C shared libraries via ctypes, cffi, or CPython C extensions have no Chelis equivalent at the source level. These calls remain in Python at Tier 2.
Libraries without a Chelis equivalent
Section titled “Libraries without a Chelis equivalent”If a Python library has no entry in the library mapping table and no Reef mapping package, calls to that library stay in Python. The translated output uses the bridge for those call sites.