Skip to content

Add Constraint Pydantic model #58

@jc-macdonald

Description

@jc-macdonald

Summary

Add a Pydantic BaseModel for constraint rules, replacing the current ConstraintRule NamedTuple.

Problem

The Pydantic milestone has models planned for every spec sub-structure — Axis (#23), Transition (#21), Mixing (#24), Chain (#26), StateAxes (#27), Operator (#28), ExpressionString (#22) — but not for constraints. ConstraintRule is a NamedTuple with loose types:

  • mode: str instead of Literal["allow", "exclude"]
  • rules: tuple[dict[str, list[str]], ...] with no validation that rule keys match declared axes

All validation currently lives downstream in ~120 lines of procedural code (_validate_constraint_axes(), _resolve_constraint_mode(), _validate_constraint_rule() in specs.py).

Scope

  • Define Constraint Pydantic model with:
    • axes: tuple[str, ...] — validated ≥2 unique entries
    • mode: Literal["allow", "exclude"]
    • rules with validated key→coordinate mappings
  • Absorb validation from _validate_constraint_axes(), _resolve_constraint_mode(), _validate_constraint_rule() into model validators
  • Update _normalize_constraints() to accept/return Pydantic models
  • Update tests

Related

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions