| title | Language Feature Matrix |
|---|---|
| audience | users, developers |
| prerequisites | user guide |
| related | ../guide/index.md, ../reference/fortran-wrapper.md |
| status | maintained |
| publication | draft |
This matrix is the user-facing support index for native-language features. It does not replace the detailed Fortran wrapper reference; it points each feature to the owning docs, implementation route, evidence, and limitations.
A row may claim support only when the linked evidence proves that behavior in the current repository. Runtime wrapper support requires compiled, imported, and called wrapper tests. Parser or semantic support alone is listed as inspection-only or partial support.
| Status | Meaning |
|---|---|
| Supported | The documented subset has current runtime or inspection evidence. |
| Partially supported | A useful subset is implemented and tested, but important related forms are blocked or deferred. |
| Unsupported | prik intentionally blocks the form or has no safe wrapper contract for it yet. |
| Planned | The feature has a reserved documentation or roadmap entry but no support claim. |
| Not implemented | The feature is explicitly outside the current implemented surface. |
| Feature | Status | User docs | Source owner | Evidence | Limitations |
|---|---|---|---|---|---|
| Scalar functions, subroutines, and baseline arrays | Supported | Functions, subroutines | Wrapper pipeline | Verified baseline tests | Native scalar arguments require exact NumPy dtypes where documented. |
| Generic procedure interfaces | Supported | Generic interfaces | Feature route | Generic interface tests | Defined operators and assignment are tracked separately. |
| Defined operators and assignment overloads | Supported | Defined operators | Bridge and binding generation | Defined operator tests | Supported operators are those covered by the wrapper guide and runtime tests. |
| Output arguments and multiple results | Supported | Subroutine projection | Ownership and lowering | Calls and results tests, function result tests | Tuple ordering and caller-provided array behavior follow the wrapper guide. |
| Optional arguments | Supported | Optional arguments | Binding generation | Optional argument tests | Unsupported optional combinations fail during wrapper planning. |
| Allocatable array handles, descriptor arguments, and owned results | Supported | Allocatables | Ownership policy | Allocatable runtime tests, scalar-derived matrix tests | Array module/field handles borrow their owner; result handles own persistent descriptor storage. Wrapper-owned scalar-derived allocatables use typed holders; module scalar allocatables use reversible move_alloc transactions for compatible dummies. |
| Pointer scalar projections and array handles | Partially supported | Pointers | Ownership policy | Pointer handle tests, pointer policy tests, scalar-derived matrix tests | Descriptor arguments, module/field handles, strided views, wrapper-owned pointer-array results and outputs, scalar-derived pointer holders, and module pointer reassociation transactions are supported. Target deallocation and writable reassociation remain policy-gated. |
| Array-valued function results | Supported | Array results | Array lowering | Array result tests | Ownership and dtype/shape behavior are limited to documented array result forms. |
| NumPy array argument contracts | Supported | Arrays | Bridge and binding generation | Array contract tests, multidimensional tests | Wrong dtype, rank, shape, contiguity, alignment, or mutability is rejected. |
| Derived-type scalar boundaries and methods | Supported | Derived types | Class lowering | Derived boundary tests, method tests | Derived-type arrays and some polymorphic forms are not included. |
| Default and keyword constructors with finalizers | Supported | Constructors and finalizers | Ownership policy | Constructor/finalizer tests, borrowed finalizer tests | Construction commits ownership only after initialization; borrowed wrappers never run an owning finalizer. |
| Generic constructor interfaces and overloaded runtime initialization | Supported | Constructors | Class policy and lowering | Edited class surface tests, class policy tests | Candidates require distinguishable completed Python signatures; incomplete or ambiguous sets are blocked before emission. |
| Module variables, constants, saved state, and common-block procedure state | Supported | Wrapping modules | Module state route | Module state tests, scalar-derived matrix tests, common-block tests | Common-block storage is not exported as Python variables. Rank-zero derived module objects use direct, scoped, allocation-transaction, or pointer-transaction handoff selected before lowering. |
| Fortran enum constants | Supported | Enumerations | Semantic constants route | Enum runtime tests, enum semantic tests, enum diagnostics | No Python Enum or IntEnum classes are generated. |
| Scalar character arguments, results, and fields | Supported | Strings | Character bridge route | Character argument tests, edge-case tests | Character arrays use fixed-width NumPy bytes dtype; mutable scalar deferred-length storage is blocked. |
| Scalar kind coverage | Supported | Data types | Fortran type probe | Scalar kind tests | Wider real, complex, and explicit logical storage is blocked without portable NumPy mapping. |
| Caller-ordered multi-source builds, Makefiles, verbose mode, and output placement | Supported | Building the shared library | Wrapper orchestration | Multi-source tests, compiler verbose tests | prik does not discover, reorder, or resolve all external source dependencies. |
| Visibility, naming, keyword escaping, and collision policy | Supported | Visibility and naming | Naming policy | Visibility/naming tests | Strict mode rejects names that default mode can normalize. |
| Immediate call-scoped Python callbacks | Supported | Callbacks | Callback bridge route | Callback plan tests, scalar callback tests, array callback tests, combined shape tests | Direct wrapper-plan generation supports entering-thread callbacks only. Stored, optional, asynchronous, or cross-thread callbacks are unsupported. |
| Runtime error projection, GIL policy, recursion, OpenMP path, and GNU ABI checks | Supported | Error handling | Runtime route | Status projection runtime, status and GIL lowering, recursion tests, OpenMP tests, ABI tests | OpenMP and ABI evidence is compiler/platform-specific; callers still own native synchronization. |
| Fortran source wrapper builds | Supported | Building the shared library | Wrapper orchestration | Build modes, runtime ABI | Implemented for ordered Fortran source inputs. |
| Feature | Status | User docs | Source owner | Evidence | Limitations |
|---|---|---|---|---|---|
Fortran parse, semantic IR, and .pyi inspection |
Supported | Fortran inspection recipe, semantic IR | Fortran parser route | Fortran parser fixtures, Fortran semantic tests | Inspection support does not by itself prove runtime wrapper support. |
Semantic .pyi wrapper builds from explicit native artifacts |
Partially supported | Semantic .pyi contracts, .pyi format |
.pyi build route |
format and authoritative-input tests, multi-source contract tests, native build plan tests | Current runtime parity is limited; source/generated/modified multi-source package parity is covered, and broader parity remains tracked in the checklist. |
| Scalar inheritance and polymorphic dispatch | Partially supported | Inheritance and polymorphism | Class lowering route | Inheritance tests | Polymorphic results, mutable dummies, arrays, allocatable/pointer scalars, and class(*) are blocked. |
| Assumed-size, assumed-rank, and lower-bound array contracts | Partially supported | Arrays | Array bridge route | Assumed-rank tests | Assumed type and derived-type arrays remain blocked. Character arrays require fixed-width NumPy bytes dtype. |
| Generated reference pages for modules, functions, and classes | Partially supported | Reference index | Source map | Documentation structure checks, semantic contract tests | Maintained manual references exist for generated functions, modules, classes, and generated file contracts; automated reference inventory generation has not been selected. |
| Feature | Status | User docs | Source owner | Evidence | Limitations |
|---|---|---|---|---|---|
| Unproved pointer lifetime and ownership-changing operations | Unsupported | Pointer safety | Ownership policy | Pointer policy tests, pointer runtime tests | Native targets must outlive every handle use; allocation, target deallocation, resize, and writable reassociation require explicit completed policy. |
| Persistent callbacks and procedure pointers | Unsupported | Callback limitations | Callback route | Callback policy tests, scalar callback tests | Callbacks are valid only during the wrapped call. |
| Advanced multi-source dependency discovery and external-library integration | Unsupported | Multiple source files | Build orchestration | Multi-source tests | prik does not infer dependency graphs, prebuilt module paths, or external library discovery. |
| Blocked array forms | Unsupported | Unsupported array forms | Array policy route | Array semantic tests, diagnostics | Assumed type type(*), arrays of derived types, and character arrays not representable as fixed-width bytes need missing runtime contracts. |
| Unsupported polymorphic forms | Unsupported | Inheritance limits | Class policy route | Inheritance tests | Results, mutable dummies, arrays, polymorphic allocatable/pointer scalars, and class(*) are blocked. |
| Ambiguous or incomplete constructor overload sets | Unsupported | Constructor limitations | Constructor route | Constructor semantic tests, class-plan validation tests | Candidates must have distinguishable exact runtime signatures and compatible native-owner lifecycles. |
| Character arrays and mutable deferred-length character storage | Partially supported | Strings | Character bridge route | Character edge tests | Character arrays use fixed-width NumPy bytes dtype. Fixed and allocatable deferred element length maps to dtype itemsize; Unicode/object arrays and mutable scalar deferred-length storage are unsupported. |
| Wider-than-supported real, complex, and logical storage | Unsupported | Datatype limits | Type probing | Scalar kind tests | prik blocks rather than silently losing precision or Boolean storage semantics. |
| Feature | Status | User docs | Source owner | Evidence | Limitations |
|---|---|---|---|---|---|
Full semantic .pyi parity across all wrapper scenarios |
Planned | Semantic .pyi format |
.pyi route |
semantic .pyi feature tests |
Only the documented implemented subset is supported. |
| MPI examples and distribution constraints | Not implemented | MPI example | Planned examples | Documentation structure checks | No support contract or runnable evidence exists yet. |