# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501, F401, F403, F405
r"""
Inner-Fit Polygon (IFP) calculation for nesting algorithms.

Provides functions for computing Inner-Fit Polygons, which define the valid
placement region for a part inside a bin.
"""

import collections.abc
from raygeo.geo import types
__all__ = [
    "build_no_go_zones",
    "inner_fit_polygon",
    "sweep_hull_for_edge",
]

def build_no_go_zones(bin: collections.abc.Sequence[types.Point], part_neg: collections.abc.Sequence[types.Point]) -> list[types.Polygon]:
    r"""
    Build the no-go zones for a bin-part pair.
    
    :param bin: Bin polygon as (x, y) points.
    :param part_neg: Orbiting polygon negated as (x, y) points.
    :returns: List of no-go zone polygons.
    :complexity: O(n * m) where n, m = vertex counts.
    """

def inner_fit_polygon(bin: collections.abc.Sequence[types.Point], part: collections.abc.Sequence[types.Point]) -> list[types.Polygon]:
    r"""
    Compute the Inner-Fit Polygon (IFP) for a part inside a bin.
    
    :param bin: Bin polygon as (x, y) points.
    :param part: Part polygon as (x, y) points.
    :returns: List of IFP polygons.
    :complexity: O(n * m) where n, m = vertex counts of bin and part.
    """

def sweep_hull_for_edge(p1: types.Point, p2: types.Point, part_neg: collections.abc.Sequence[types.Point]) -> types.Polygon:
    r"""
    Compute the convex hull sweep of part_neg along the edge p1->p2.
    
    :param p1: First edge endpoint.
    :param p2: Second edge endpoint.
    :param part_neg: Orbiting polygon negated as (x, y) points.
    :returns: Convex hull polygon.
    :complexity: O(n log n) for convex hull computation.
    """

