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

import builtins
import numpy
import raygeo
import typing
__all__ = [
    "MaterialTestGridSpec",
    "generate_material_test_grid",
    "generate_material_test_grid_preview",
]

@typing.final
class MaterialTestGridSpec:
    r"""
    Parameters for the material-test-grid assembler.
    """
    @property
    def size_mm(self) -> tuple[builtins.float, builtins.float]:
        r"""
        ``(width_mm, height_mm)`` of the workpiece area to fill.
        """
    @property
    def cols(self) -> builtins.int: ...
    @property
    def rows(self) -> builtins.int: ...
    @property
    def min_speed(self) -> builtins.float: ...
    @property
    def max_speed(self) -> builtins.float: ...
    @property
    def min_power(self) -> builtins.float: ...
    @property
    def max_power(self) -> builtins.float: ...
    @property
    def min_passes(self) -> builtins.int: ...
    @property
    def max_passes(self) -> builtins.int: ...
    @property
    def fixed_speed(self) -> builtins.float: ...
    @property
    def fixed_power(self) -> builtins.float: ...
    @property
    def shape_size(self) -> builtins.float: ...
    @property
    def spacing(self) -> builtins.float: ...
    @property
    def line_interval_mm(self) -> builtins.float: ...
    @property
    def mode(self) -> builtins.str:
        r"""
        ``"engrave"`` or ``"cut"``.
        """
    @property
    def grid_mode(self) -> builtins.str:
        r"""
        ``"Power vs Speed"``, ``"Power vs Passes"``, ``"Speed vs Passes"``,
        or ``"Speed vs Offset"``.
        """
    @property
    def include_labels(self) -> builtins.bool: ...
    @property
    def label_power_percent(self) -> builtins.float:
        r"""
        Power for label engraving in percent (0–100).
        """
    @property
    def label_speed(self) -> builtins.float:
        r"""
        Feed rate for label engraving in mm/min.
        """
    @property
    def min_offset(self) -> builtins.float: ...
    @property
    def max_offset(self) -> builtins.float: ...
    def __eq__(self, other: builtins.object, /) -> builtins.bool: ...
    def __new__(cls, size_mm: tuple[builtins.float, builtins.float], cols: builtins.int = 5, rows: builtins.int = 5, min_speed: builtins.float = 100.0, max_speed: builtins.float = 500.0, min_power: builtins.float = 10.0, max_power: builtins.float = 100.0, min_passes: builtins.int = 1, max_passes: builtins.int = 5, fixed_speed: builtins.float = 1000.0, fixed_power: builtins.float = 50.0, shape_size: builtins.float = 10.0, spacing: builtins.float = 2.0, line_interval_mm: builtins.float = 0.1, mode: builtins.str = 'engrave', grid_mode: builtins.str = 'Power vs Speed', include_labels: builtins.bool = True, label_power_percent: builtins.float = 10.0, label_speed: builtins.float = 1000.0, min_offset: builtins.float = -0.5, max_offset: builtins.float = 0.5) -> MaterialTestGridSpec: ...

def generate_material_test_grid(size_mm: tuple[float, float], cols: int = 5, rows: int = 5, min_speed: float = 100, max_speed: float = 500, min_power: float = 10, max_power: float = 100, min_passes: int = 1, max_passes: int = 5, fixed_speed: float = 1000, fixed_power: float = 50, shape_size: float = 10, spacing: float = 2, line_interval_mm: float = 0.1, mode: str = 'engrave', grid_mode: str = 'Power vs Speed', include_labels: bool = True, label_power_percent: float = 10, label_speed: float = 1000, min_offset: float = -0.5, max_offset: float = 0.5) -> raygeo.ops.assembly.AssemblyResult:
    r"""
    Generate a material test grid with varying speed and power.
    
    Creates grid cells in rows x cols arrangement, each with baked-in
    power, speed, and pass count. When *include_labels* is True (default),
    column headers, row labels, and axis titles are generated using
    raygeo's built-in text-to-geometry (swash/fontdb).
    
    :param size_mm: The (width, height) of the workpiece in mm.
    :param cols: Number of columns (default 5).
    :param rows: Number of rows (default 5).
    :param min_speed: Minimum speed in mm/min (default 100.0).
    :param max_speed: Maximum speed in mm/min (default 500.0).
    :param min_power: Minimum power in percent (default 10.0).
    :param max_power: Maximum power in percent (default 100.0).
    :param min_passes: Minimum number of passes (default 1).
    :param max_passes: Maximum number of passes (default 5).
    :param fixed_speed: Fixed speed for Power vs Passes mode (default 1000.0).
    :param fixed_power: Fixed power for Speed vs Passes mode (default 50.0).
    :param shape_size: Size of each grid cell in mm (default 10.0).
    :param spacing: Spacing between cells in mm (default 2.0).
    :param line_interval_mm: Line spacing for engrave mode (default 0.1).
    :param mode: "engrave" or "cut" (default "engrave").
    :param grid_mode: "Power vs Speed", "Power vs Passes", "Speed vs Passes",
                     or "Speed vs Offset" (default "Power vs Speed").
    :param include_labels: Generate text labels (default True).
    :param label_power_percent: Power for label engraving in percent (default 10.0).
    :param label_speed: Feed rate for label engraving in mm/min (default 1000.0).
    :param min_offset: Minimum bidirectional scan offset in mm for
                     Speed vs Offset mode (default -0.5).
    :param max_offset: Maximum bidirectional scan offset in mm for
                     Speed vs Offset mode (default 0.5).
    :returns: An :class:`AssemblyResult` with grid cell paths and labels.
    """

def generate_material_test_grid_preview(size_mm: tuple[float, float], dpi: float = 96, cols: int = 5, rows: int = 5, min_speed: float = 100, max_speed: float = 500, min_power: float = 10, max_power: float = 100, min_passes: int = 1, max_passes: int = 5, fixed_speed: float = 1000, fixed_power: float = 50, shape_size: float = 10, spacing: float = 2, line_interval_mm: float = 0.1, mode: str = 'engrave', grid_mode: str = 'Power vs Speed', include_labels: bool = True, label_power_percent: float = 10, label_speed: float = 1000, min_offset: float = -0.5, max_offset: float = 0.5) -> numpy.ndarray:
    r"""
    Generate a raster preview of the material test grid.
    
    Creates the same grid as :func:`generate_material_test_grid` but
    renders it to an RGBA numpy array instead of returning Ops.
    
    :param size_mm: The (width, height) of the workpiece in mm.
    :param dpi: Output resolution in dots per inch (default 96.0).
    :param cols: Number of columns (default 5).
    :param rows: Number of rows (default 5).
    :param min_speed: Minimum speed in mm/min (default 100.0).
    :param max_speed: Maximum speed in mm/min (default 500.0).
    :param min_power: Minimum power in percent (default 10.0).
    :param max_power: Maximum power in percent (default 100.0).
    :param min_passes: Minimum number of passes (default 1).
    :param max_passes: Maximum number of passes (default 5).
    :param fixed_speed: Fixed speed for Power vs Passes mode (default 1000.0).
    :param fixed_power: Fixed power for Speed vs Passes mode (default 50.0).
    :param shape_size: Size of each grid cell in mm (default 10.0).
    :param spacing: Spacing between cells in mm (default 2.0).
    :param line_interval_mm: Line spacing for engrave mode (default 0.1).
    :param mode: "engrave" or "cut" (default "engrave").
    :param grid_mode: "Power vs Speed", "Power vs Passes", "Speed vs Passes",
                     or "Speed vs Offset" (default "Power vs Speed").
    :param include_labels: Generate text labels (default True).
    :param label_power_percent: Power for label engraving in percent (default 10.0).
    :param label_speed: Feed rate for label engraving in mm/min (default 1000.0).
    :param min_offset: Minimum bidirectional scan offset in mm for
                     Speed vs Offset mode (default -0.5).
    :param max_offset: Maximum bidirectional scan offset in mm for
                     Speed vs Offset mode (default 0.5).
    :returns: A (H, W, 4) RGBA uint8 numpy array.
    """

