# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501, F401, F403, F405
r"""
Core enumerations for the Ops command system.

CommandType — identifies each command in a sequence (MoveTo, LineTo,
ArcTo, BezierTo, SetPower, SetFeedRate, JobStart, etc.).

CommandCategory — classifies commands as MOVING (changes tool position),
STATE (changes machine parameters), or MARKER (structural job boundaries).

SectionType — distinguishes between VECTOR_OUTLINE and RASTER_FILL sections
when an Ops sequence is split into logical portions.

RasterMode — identifies the power-application strategy for raster sections:
VARIABLE_POWER (per-pixel 8-bit), CONSTANT_POWER (uniform / dither),
or DEPTH_MAP (stepped Z levels).
"""

import builtins
from raygeo import ops
import typing
__all__ = [
    "CommandCategory",
    "CommandType",
    "RasterMode",
    "SectionType",
    "StateBlock",
    "category",
]

@typing.final
class CommandCategory:
    r"""
    Represents the category of a command: ``MOVING``, ``STATE``, or ``MARKER``.
    
    - **MOVING**: Commands that change the tool position (MoveTo, LineTo, ArcTo, etc.)
    - **STATE**: Commands that change machine state (SetPower, SetCutSpeed, etc.)
    - **MARKER**: Structural markers (JobStart/End, LayerStart/End, etc.)
    """
    MOVING: CommandCategory = CommandCategory.MOVING
    STATE: CommandCategory = CommandCategory.STATE
    MARKER: CommandCategory = CommandCategory.MARKER
    @property
    def value(self) -> builtins.int:
        r"""
        The raw integer value of this category.
        
        :complexity: O(1)
        """
    @property
    def name(self) -> builtins.str:
        r"""
        The uppercase name of this category (``"MOVING"``, ``"STATE"``, or ``"MARKER"``).
        
        :complexity: O(1)
        """
    def __eq__(self, other: builtins.object, /) -> builtins.bool: ...
    def __repr__(self) -> builtins.str:
        r"""
        String representation like ``CommandCategory.MOVING``.
        
        :complexity: O(1)
        """

@typing.final
class CommandType:
    r"""
    Enumeration of all command types in an Ops sequence.
    
    Each constant represents a specific operation command such as
    ``MOVE_TO``, ``LINE_TO``, ``ARC_TO``, ``SET_POWER``, etc.
    """
    MOVE_TO: CommandType = CommandType.MOVE_TO
    LINE_TO: CommandType = CommandType.LINE_TO
    ARC_TO: CommandType = CommandType.ARC_TO
    SCAN_LINE: CommandType = CommandType.SCAN_LINE
    DWELL: CommandType = CommandType.DWELL
    BEZIER_TO: CommandType = CommandType.BEZIER_TO
    QUADRATIC_BEZIER_TO: CommandType = CommandType.QUADRATIC_BEZIER_TO
    SET_POWER: CommandType = CommandType.SET_POWER
    SET_FEED_RATE: CommandType = CommandType.SET_FEED_RATE
    SET_RAPID_RATE: CommandType = CommandType.SET_RAPID_RATE
    SET_HEAD: CommandType = CommandType.SET_HEAD
    SET_FREQUENCY: CommandType = CommandType.SET_FREQUENCY
    SET_PULSE_WIDTH: CommandType = CommandType.SET_PULSE_WIDTH
    SET_SPINDLE_RPM: CommandType = CommandType.SET_SPINDLE_RPM
    SET_COOLANT: CommandType = CommandType.SET_COOLANT
    SET_AIR_ASSIST: CommandType = CommandType.SET_AIR_ASSIST
    SET_HEAD_COOLANT: CommandType = CommandType.SET_HEAD_COOLANT
    JOB_START: CommandType = CommandType.JOB_START
    JOB_END: CommandType = CommandType.JOB_END
    LAYER_START: CommandType = CommandType.LAYER_START
    LAYER_END: CommandType = CommandType.LAYER_END
    WORKPIECE_START: CommandType = CommandType.WORKPIECE_START
    WORKPIECE_END: CommandType = CommandType.WORKPIECE_END
    OPS_SECTION_START: CommandType = CommandType.OPS_SECTION_START
    OPS_SECTION_END: CommandType = CommandType.OPS_SECTION_END
    STATE_BLOCK_START: CommandType = CommandType.STATE_BLOCK_START
    STATE_BLOCK_END: CommandType = CommandType.STATE_BLOCK_END
    @property
    def value(self) -> builtins.int:
        r"""
        The raw integer value of this command type.
        
        :complexity: O(1)
        """
    @property
    def name(self) -> builtins.str:
        r"""
        The uppercase name of this command type (e.g. ``"MOVE_TO"``, ``"LINE_TO"``).
        
        :complexity: O(1)
        """
    def __eq__(self, other: builtins.object, /) -> builtins.bool: ...
    def __repr__(self) -> builtins.str:
        r"""
        String representation like ``CommandType.MOVE_TO``.
        
        :complexity: O(1)
        """

@typing.final
class RasterMode:
    r"""
    Raster engrave mode: how power is applied during raster scanning.
    
    - ``VARIABLE_POWER``: per-pixel 8-bit power (from power-modulated image)
    - ``CONSTANT_POWER``: uniform power (from mask scans / dither lines)
    - ``DEPTH_MAP``: stepped Z levels (from multi-pass image)
    """
    VARIABLE_POWER: RasterMode = RasterMode.VARIABLE_POWER
    CONSTANT_POWER: RasterMode = RasterMode.CONSTANT_POWER
    DEPTH_MAP: RasterMode = RasterMode.DEPTH_MAP
    @property
    def value(self) -> builtins.int:
        r"""
        The raw integer value of this raster mode.
        """
    @property
    def name(self) -> builtins.str:
        r"""
        The uppercase name (``"VARIABLE_POWER"``, ``"CONSTANT_POWER"``, or ``"DEPTH_MAP"``).
        """
    def __eq__(self, other: builtins.object, /) -> builtins.bool: ...
    def __repr__(self) -> builtins.str:
        r"""
        String representation like ``RasterMode.VARIABLE_POWER``.
        """

@typing.final
class SectionType:
    r"""
    The type of an operations section: ``VECTOR_OUTLINE`` or ``RASTER_FILL``.
    
    Sections divide an Ops sequence into vector and raster portions.
    """
    VECTOR_OUTLINE: SectionType = SectionType.VECTOR_OUTLINE
    RASTER_FILL: SectionType = SectionType.RASTER_FILL
    @property
    def value(self) -> builtins.int:
        r"""
        The raw integer value of this section type.
        
        :complexity: O(1)
        """
    @property
    def name(self) -> builtins.str:
        r"""
        The uppercase name (``"VECTOR_OUTLINE"`` or ``"RASTER_FILL"``).
        
        :complexity: O(1)
        """
    def __eq__(self, other: builtins.object, /) -> builtins.bool: ...
    def __repr__(self) -> builtins.str:
        r"""
        String representation like ``SectionType.VECTOR_OUTLINE``.
        
        :complexity: O(1)
        """

@typing.final
class StateBlock:
    r"""
    A state block within an Ops section — delimits parameter-regime changes.
    
    Produced by :meth:`OpsSection.state_blocks`.
    """
    @property
    def name(self) -> typing.Optional[builtins.str]:
        r"""
        Optional block name.
        """
    @property
    def marker_indices(self) -> builtins.list[builtins.int]:
        r"""
        Indices of the marker commands (start/end) for this block.
        """
    @property
    def content_indices(self) -> builtins.list[builtins.int]:
        r"""
        Indices of the content commands belonging to this block.
        """
    def content(self, ops: ops.Ops) -> ops.Ops:
        r"""
        Extract the content commands of this block from an Ops sequence.
        
        :param ops: The Ops sequence containing this block.
        :returns: A new Ops containing only the content of this block.
        :complexity: O(n) time, O(n) space
        """
    def __repr__(self) -> builtins.str: ...

def category(ct: CommandType) -> CommandCategory:
    r"""
    Get the category of a command type.
    
    :param ct: ``CommandType`` variant.
    :returns: ``CommandCategory`` for the given type.
    :complexity: O(1)
    """

