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

import builtins
import raygeo
import typing
__all__ = [
    "ProfileSpec",
    "profile_inner",
    "profile_outer",
]

@typing.final
class ProfileSpec:
    r"""
    Parameters for the adaptive-profile assembler.
    """
    @property
    def kind(self) -> builtins.str:
        r"""
        ``"inner"`` or ``"outer"``.
        """
    @property
    def tool_radius(self) -> builtins.float: ...
    @property
    def step_over(self) -> builtins.float: ...
    @property
    def step_length(self) -> builtins.float: ...
    @property
    def target_z(self) -> builtins.float: ...
    @property
    def safe_z(self) -> builtins.float: ...
    @property
    def wall_margin(self) -> builtins.float: ...
    @property
    def stock_to_leave(self) -> builtins.float: ...
    @property
    def cut_direction(self) -> builtins.str:
        r"""
        ``"cw"`` or ``"ccw"``.
        """
    @property
    def start_pos(self) -> typing.Optional[tuple[builtins.float, builtins.float]]:
        r"""
        Optional override start ``(x, y)``.
        """
    @property
    def tolerance(self) -> builtins.float: ...
    @property
    def expansion_batch_size(self) -> builtins.int: ...
    @property
    def engagement_area_threshold(self) -> builtins.float: ...
    @property
    def engagement_angle_threshold(self) -> builtins.float: ...
    @property
    def trace_path(self) -> typing.Optional[builtins.str]:
        r"""
        Optional path to write a binary trace file.
        """
    def __eq__(self, other: builtins.object, /) -> builtins.bool: ...

def profile_inner(part: raygeo.ops.part.Part, tool_radius: float = 3, step_over: float = 1.5, step_length: float = 0.6, target_z: float = -5, safe_z: float = 2, wall_margin: float = 0, stock_to_leave: float = 0, cut_feed_rate: int = 1000, cut_power: float = 0, start_pos: tuple[float, float] | None = None, cut_direction: str = 'ccw', engagement_area_threshold: float = 0, engagement_angle_threshold: float = 3.141592653589793, trace_path: str | None = None) -> raygeo.ops.assembly.AssemblyResult:
    r"""
    Profile the inner boundary of a pocket, around islands.
    
    Walks a tool around the inset boundary (offset inward by tool
    radius) and around accessible islands, so that the tool clears
    the material along the pocket walls and around each island.
    Returns an :class:`AssemblyResult` with the profiling move
    sequence.
    
    :param part: The part whose ``cleared`` field tracks accumulated
                 workpiece state and whose geometry defines the
                 pocket boundary and islands.
    :param tool_radius: Tool radius in mm.
    :param step_over: Radial step-over between passes (mm).
    :param step_length: Forward step length in mm.
    :param target_z: Cutting depth (Z).
    :param safe_z: Safe (rapid) Z height.
    :param wall_margin: Extra distance to keep from the wall (mm).
    :param stock_to_leave: Stock left on wall for rough pass (mm, default 0.0).
    :param cut_feed_rate: Feed rate in mm/min.
    :param cut_power: Spindle power (0.0–1.0).
    :param start_pos: Optional override start ``(x, y)`` (default: first boundary vertex).
    :param cut_direction: ``"cw"`` or ``"ccw"`` (default ``"ccw"``).
    :param engagement_area_threshold: Overengagement area threshold (mm², 0 = auto).
    :param engagement_angle_threshold: Overengagement angle threshold (rad, default π).
    :param trace_path: Optional path to write a binary trace file (default None).
    :returns: An :class:`AssemblyResult` with the profiling path.
    """

def profile_outer(part: raygeo.ops.part.Part, tool_radius: float, step_over: float, step_length: float, target_z: float, safe_z: float, wall_margin: float, cut_feed_rate: int, cut_power: float, start_pos: tuple[float, float] | None = None, cut_direction: str = 'ccw', stock_to_leave: float = 0, engagement_area_threshold: float = 0, engagement_angle_threshold: float = 3.141592653589793, trace_path: str | None = None) -> raygeo.ops.assembly.AssemblyResult:
    r"""
    Profile the outer boundary of a pocket.
    
    Walks a tool around the grown boundary (offset outward by tool
    radius).  The path stays approximately one tool radius outside
    the original boundary, removing any excess stock on the outer
    side.  Returns an :class:`AssemblyResult` with the profiling
    move sequence.
    
    :param part: The part whose ``cleared`` field tracks accumulated
                 workpiece state and whose geometry defines the
                 pocket boundary.
    :param tool_radius: Tool radius in mm.
    :param step_over: Radial step-over between passes (mm).
    :param step_length: Forward step length in mm.
    :param target_z: Cutting depth (Z).
    :param safe_z: Safe (rapid) Z height.
    :param wall_margin: Extra distance to keep from the wall (mm).
    :param cut_feed_rate: Feed rate in mm/min.
    :param cut_power: Spindle power (0.0–1.0).
    :param start_pos: Optional override start ``(x, y)`` (default: first boundary vertex).
    :param cut_direction: ``"cw"`` or ``"ccw"`` (default ``"ccw"``).
    :param stock_to_leave: Stock left on wall for rough pass (mm, default 0.0).
    :param engagement_area_threshold: Overengagement area threshold (mm², 0 = auto).
    :param engagement_angle_threshold: Overengagement angle threshold (rad, default π).
    :param trace_path: Optional path to write a binary trace file (default None).
    :returns: An :class:`AssemblyResult` with the profiling path.
    """

