"""Point-cloud-only underframe beam deflection measurement. Public API (stable across patch releases — see USAGE.md): - :func:`compute_deflection` — pure, in-memory computation; returns a :class:`DeflectionResult`. - :func:`load_point_cloud` — read a PLY/XYZ/CSV file into a numpy array. - :class:`DeflectionResult`, :class:`SideDeflection`, :class:`DeflectionCurves` — the result schema. - :mod:`underframe_deflection.artifacts` — optional file writers (JSON / CSV / PNG plots / coloured PLY overlays). - :mod:`underframe_deflection.exceptions` — exception hierarchy. - :func:`run_measurement_pipeline` — convenience wrapper that does read + compute + write-all in one call. """ from ._version import ALGORITHM_VERSION, SCHEMA_VERSION, __version__ from .api import ( DeflectionCurves, DeflectionResult, ProgressCallback, SideDeflection, compute_deflection, load_point_cloud, ) from .cad_io import read_cad_reference from .exceptions import ( DeflectionError, FrameInferenceError, InsufficientPointsError, InvalidPointCloudError, UnsupportedFormatError, ) from .pipeline import run_measurement_pipeline from .preprocess import bilateral_filter_points from .registration import RegistrationResult, register_to_cad from .roi import apply_passthrough, load_roi_aabb from .single_beam import SingleBeamResult, measure_single_beam from .single_beam_pipeline import run_both_beams, run_single_beam_pipeline __all__ = [ "__version__", "ALGORITHM_VERSION", "SCHEMA_VERSION", "compute_deflection", "load_point_cloud", "DeflectionResult", "SideDeflection", "DeflectionCurves", "ProgressCallback", "run_measurement_pipeline", "DeflectionError", "InvalidPointCloudError", "InsufficientPointsError", "FrameInferenceError", "UnsupportedFormatError", "read_cad_reference", "load_roi_aabb", "apply_passthrough", "bilateral_filter_points", "register_to_cad", "RegistrationResult", "measure_single_beam", "SingleBeamResult", "run_single_beam_pipeline", "run_both_beams", ]