from __future__ import annotations from dataclasses import dataclass, field from typing import Any @dataclass class Call: name: str args: list[Any] = field(default_factory=list) line: int = 0 raw: str = "" @dataclass class FeatureIR: feature_id: str operation: str params: dict[str, Any] queries: list[Any] = field(default_factory=list) line_start: int = 0 line_end: int = 0 raw_source: str = "" @dataclass class SketchIR: feature_id: str workplane: Any entities: list[FeatureIR] = field(default_factory=list) @dataclass class ModelIR: sample_id: str features: list[FeatureIR] = field(default_factory=list) sketches: list[SketchIR] = field(default_factory=list) steps: list[Any] = field(default_factory=list) raw_source: str = "" # Source metadata is retained independently from the lowered CDSL so a # selector can be audited against the FeatureScript API contract it used. featurescript_version: str | None = None standard_library: str | None = None standard_library_version: str | None = None standard_library_imports: list[dict[str, str]] = field(default_factory=list)