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

Provides functions for computing No-Fit Polygons (NFP) using Minkowski
sums, both for convex and general polygon pairs.
"""

import collections.abc
from raygeo.geo import types
__all__ = [
    "nfp_minkowski",
    "no_fit_polygon",
    "normalize_polygon",
    "polygon_to_key",
]

def nfp_minkowski(static_poly: collections.abc.Sequence[tuple[float, float]], orbiting: collections.abc.Sequence[tuple[float, float]]) -> list[list[tuple[float, float]]]:
    r"""
    General NFP using Minkowski sum with Clipper union.
    
    :param static_poly: Static polygon as points.
    :param orbiting: Orbiting polygon as points.
    :returns: List of NFP polygons.
    :complexity: O(n * m) where n, m = vertex counts.
    """

def no_fit_polygon(static_poly: collections.abc.Sequence[types.Point], orbiting: collections.abc.Sequence[types.Point]) -> list[types.Polygon]:
    r"""
    Compute the No-Fit Polygon (NFP) for two polygons.
    
    :param static_poly: Static polygon as (x, y) points.
    :param orbiting: Orbiting polygon as (x, y) points.
    :returns: List of NFP polygons.
    :complexity: O(n * m) where n, m = vertex counts of input polygons.
    """

def normalize_polygon(poly: collections.abc.Sequence[types.Point]) -> tuple[types.Polygon, float, float]:
    r"""
    Shift a polygon so its bounding box minimum is at (0, 0).
    
    :param poly: Input polygon as (x, y) points.
    :returns: (normalized_polygon, offset_x, offset_y).
    :complexity: O(n) where n = vertex count.
    """

def polygon_to_key(poly: collections.abc.Sequence[types.Point]) -> list[tuple[int, int]]:
    r"""
    Convert a polygon to a rounded integer key for caching.
    
    :param poly: Input polygon as (x, y) points.
    :returns: List of rounded (x, y) integer tuples.
    :complexity: O(n) where n = vertex count.
    """

