# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501, F401, F403, F405
r"""
RayGeo — 2D/3D geometry engine for CAD/CAM applications.

Layered architecture
--------------------

The crate is split into layers that depend only downward::

    geo  →  ops  →  cnc   →  pipeline  (runtime)

``geo`` — Pure geometry.
    Primitives & geometric algorithms: points, paths, offsets,
    medial axes, clearing-state tracking, adaptive entry/wavefront
    generation.  Knows nothing about machining, motion commands,
    tools, or feed rates.

``ops`` — Motion assembly.
    Turns geometric primitives into ``Ops`` command sequences.
    Linking, classification (cut vs travel), lead-in/out, overscan,
    raster fill, peeling strategy.  Holds the generic ``State``
    representation (feed_rate, rapid_rate, …) but does NOT decide
    what values to use — those are passed in by the caller.

``cnc`` — Orchestration.
    Builds workplans, drives assemblers through the pipeline.

``pipeline`` — Generic runtime.
    Runs an intent tree of nodes on a thread pool. Knows nothing
    about CNC or ops — purely generic Compute/Aggregate dispatch.

Key constraint: ops-layer assemblers always produce/consume ``Ops``
objects, never raw polygon or polyline lists.  Motion classification
is encoded as ``MoveTo`` (travel) vs ``LineTo`` (cut) at the command
level.

Core features
-------------
- Geometry types: points, lines, arcs, circles, beziers, polygons
- Path analysis: length, area, bounding box, containment, intersection
- Path manipulation: offset, clipping, fitting, simplification, smoothing
- Minkowski sums for toolpath generation
- Command sequence (Ops) for CNC motion control
- Serialization to/from industry formats
- Generic intent-tree pipeline (rayon-threadpool execution)

Submodules
----------
- raygeo.geo — Geometry and path/shape/algo operations
- raygeo.ops — Command sequence (Ops) manipulation and motion assembly
- raygeo.cnc — CNC orchestration (workplans, pipeline glue)
- raygeo.pipeline — Generic runtime intent-tree executor

Examples
--------
    Creating and inspecting geometry:

    >>> from raygeo.geo import Geometry
    >>> geom = Geometry()
    >>> geom.add_rect(0, 0, 100, 50)
    >>> geom.add_circle(50, 25, 10)
    >>> geom.area()
    5000.0 - 314.159...
    >>> len(geom)
    2

    Manipulating command sequences:

    >>> from raygeo.ops import Ops
    >>> ops = Ops()
    >>> ops.set_power(1.0)
    >>> ops.move_to(0, 0, 0)
    >>> ops.line_to(100, 0, 0)
    >>> ops.distance()
    100.0
"""

from . import cnc
from . import fstring
from . import geo
from . import image
from . import mesh
from . import ops
from . import pipeline
from . import svg
from . import trace
__all__ = [
    "cnc",
    "fstring",
    "geo",
    "image",
    "mesh",
    "ops",
    "pipeline",
    "svg",
    "trace",
]

