# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501, F401, F403, F405

import builtins
import raygeo
import typing
__all__ = [
    "FrameSpec",
    "frame",
]

@typing.final
class FrameSpec:
    r"""
    Parameters for the ``frame`` assembler.
    
    Construct with ``FrameSpec(kerf_mm, path_offset_mm, cut_side)``.
    Wrap in an :class:`~raygeo.ops.assembly.Assembler` instance to
    drive the `Assembler` trait.
    """
    @property
    def kerf_mm(self) -> builtins.float:
        r"""
        Tool kerf width in mm.
        """
    @property
    def path_offset_mm(self) -> builtins.float:
        r"""
        Additional offset distance in mm.
        """
    @property
    def cut_side(self) -> builtins.str:
        r"""
        ``"centerline"``, ``"outside"``, or ``"inside"``.
        """
    def __eq__(self, other: builtins.object, /) -> builtins.bool: ...
    def __new__(cls, kerf_mm: builtins.float = 0.0, path_offset_mm: builtins.float = 0.0, cut_side: builtins.str = 'centerline') -> FrameSpec: ...

def frame(part: raygeo.ops.part.Part, kerf_mm: float = 0, path_offset_mm: float = 0, cut_side: str = 'centerline') -> raygeo.ops.assembly.AssemblyResult:
    r"""
    Generate a rectangular frame around the part boundary.
    
    Creates a rectangle matching ``part.size_mm``, computes the
    total offset from kerf / path-offset / cut-side, applies it,
    and returns the frame as an :class:`AssemblyResult`.
    
    :param part: The part whose size defines the frame.
    :param kerf_mm: Tool kerf width in mm (default 0.0).
    :param path_offset_mm: Additional offset distance in mm
        (default 0.0).
    :param cut_side: ``"centerline"``, ``"outside"``, or
        ``"inside"`` (default ``"centerline"``).
    :returns: An :class:`AssemblyResult` with the frame path.
    :raises ValueError: If the part has no size information.
    """

