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

import builtins
from raygeo.ops import part
from raygeo.ops.part import cleared_area
import typing
__all__ = [
    "ToolPose",
    "search_frontier_engagement",
]

@typing.final
class ToolPose:
    @property
    def pos(self) -> tuple[builtins.float, builtins.float, builtins.float]: ...
    @property
    def heading(self) -> builtins.float: ...
    def __new__(cls, pos: tuple[builtins.float, builtins.float, builtins.float], heading: builtins.float) -> ToolPose: ...
    def __repr__(self) -> builtins.str: ...

def search_frontier_engagement(cleared: cleared_area.ClearedArea, region: part.StockRegion, start: ToolPose, radius: builtins.float, step_length: builtins.float, advance: builtins.float, min_cut_area: builtins.float, max_cut_area: builtins.float) -> typing.Optional[ToolPose]:
    r"""
    Walk the frontier forward from ``start_pos``, skipping the closest
    vertex.  Returns the first vertex whose outward cut-area probe
    falls in ``[min, max]``.
    
    The returned position is offset inward (into the cleared area)
    by ``radius - advance`` so the tool starts at the correct
    engagement depth.
    
    :param cleared: ``ClearedArea`` instance.
    :param region: ``StockRegion`` defining the boundary and islands.
    :param start: ``ToolPose`` seed.
    :param radius: Disk radius (mm).
    :param step_length: Forward step distance (mm) for the probe.
    :param advance: Stepover distance (mm) for inward offset.
    :param min_cut_area: Minimum cut area (mm2).
    :param max_cut_area: Maximum cut area (mm2), e.g. ``float("inf")``.
    :returns: ``ToolPose`` or ``None``.
    """

