Source code for buffalo_wings.airfoil.internal.conversion.cst_to_spline

"""Exact canonical CST-to-spline conversion helpers."""

from __future__ import annotations

from dataclasses import asdict

from buffalo_wings.airfoil.internal.analytic import CstAirfoil
from buffalo_wings.airfoil.internal.base import Airfoil
from buffalo_wings.airfoil.internal.schema import SplineAirfoilSpec
from buffalo_wings.airfoil.internal.spline import SplineAirfoil


[docs] def cst_airfoil_to_spline( airfoil: Airfoil, *, include_source_spec: bool = False, ) -> SplineAirfoil: """ Convert one canonical CST airfoil into an exact Bezier spline airfoil. Parameters ---------- airfoil : Airfoil Airfoil to convert. This exact conversion path requires a canonical ``CstAirfoil``. include_source_spec : bool, default=False Whether to embed a serializable snapshot of the source CST schema in the spline provenance metadata. Returns ------- SplineAirfoil Bezier-backed spline airfoil built from the exact canonical CST side curves. Raises ------ TypeError If ``airfoil`` is not a canonical :class:`CstAirfoil`. """ if not isinstance(airfoil, CstAirfoil): msg = "cst_airfoil_to_spline requires a canonical CstAirfoil." raise TypeError(msg) provenance: dict[str, object] = { "source_type": "cst", "construction": "exact_conversion", "exact": True, } if include_source_spec: provenance["source_spec"] = asdict(airfoil.spec) return SplineAirfoil( upper=airfoil.upper.exact_curve, lower=airfoil.lower.exact_curve, provenance=provenance, )
[docs] def cst_airfoil_to_spline_spec( airfoil: Airfoil, *, include_source_spec: bool = False, ) -> SplineAirfoilSpec: """ Export one canonical CST airfoil as an exact spline schema definition. Parameters ---------- airfoil : Airfoil Airfoil to convert. This exact conversion path requires a canonical ``CstAirfoil``. include_source_spec : bool, default=False Whether to embed a serializable snapshot of the source CST schema in the spline provenance metadata. Returns ------- SplineAirfoilSpec Bezier-backed spline schema definition built from the exact canonical CST side curves. Raises ------ TypeError If ``airfoil`` is not a canonical :class:`CstAirfoil`. """ return cst_airfoil_to_spline( airfoil, include_source_spec=include_source_spec, ).spec