# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501, F401, F403, F405
r"""
Ramp entry path generation for milling.

Provides linear and zig-zag ramp generation for tool entry into material,
with automatic extension when the ramp angle exceeds the maximum.
"""

import collections.abc
import enum
from raygeo.geo import types
import typing
__all__ = [
    "RampStyle",
    "generate_ramp_3d",
]

@typing.final
class RampStyle(enum.Enum):
    Linear = ...
    ZigZag = ...

def generate_ramp_3d(start: tuple[float, float], end: tuple[float, float], z_start: float, z_end: float, max_ramp_angle_deg: float = 45, style: RampStyle = RampStyle.Linear, lateral_amplitude: float = 1) -> list[tuple[float, float, float]]:
    r"""
    Generate a ramp entry polyline.
    
    If the direct ramp angle exceeds max_ramp_angle_deg, the ramp is
    extended in both directions along the same line.
    
    :param start: Start XY position.
    :param end: End XY position.
    :param z_start: Starting Z height.
    :param z_end: Ending Z height (must be lower than z_start).
    :param max_ramp_angle_deg: Maximum allowed ramp angle in degrees (default 45).
    :param style: Ramp style — Linear or ZigZag (default Linear).
    :param lateral_amplitude: Lateral oscillation amplitude for ZigZag (default 1.0).
    :returns: List of (x, y, z) points along the ramp.
    :complexity: O(n) time, O(n) space where n is proportional to path length
    """

