import collections.abc
import enum
import nanobind
import os
import pydrake.common
import pydrake.geometry
import pydrake.math
import pydrake.multibody.plant
import pydrake.multibody.tree
import pydrake.solvers
import pydrake.symbolic
from _typeshed import Incomplete
from pydrake.common.cpp_template import CSpaceSeparatingPlane_ as CSpaceSeparatingPlane_
from typing import Any, Callable, ClassVar, overload

CheckIfSatisfiesConvexityRadius: nanobind.nb_func
ComputePairwiseIntersections: nanobind.nb_func
Iris: nanobind.nb_func
IrisNp: nanobind.nb_func
LoadIrisRegionsYamlFile: nanobind.nb_func
MakeIrisObstacles: nanobind.nb_func
PartitionConvexSet: nanobind.nb_func
SaveIrisRegionsYamlFile: nanobind.nb_func

class AffineBall(ConvexSet):
    MakeAffineBallFromLineSegment: ClassVar[nanobind.nb_func] = ...
    MakeAxisAligned: ClassVar[nanobind.nb_func] = ...
    MakeHypersphere: ClassVar[nanobind.nb_func] = ...
    MakeUnitBall: ClassVar[nanobind.nb_func] = ...
    MinimumVolumeCircumscribedEllipsoid: ClassVar[nanobind.nb_func] = ...
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, B, center) -> None: ...
    @overload
    def __init__(self, ellipsoid: Hyperellipsoid) -> None: ...
    def B(self, *args, **kwargs): ...
    def Clone(self) -> ConvexSet: ...
    def center(self, *args, **kwargs): ...
    def __copy__(self) -> ConvexSet: ...
    def __deepcopy__(self, arg: dict) -> ConvexSet: ...

class AffineSubspace(ConvexSet):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, basis, translation) -> None: ...
    @overload
    def __init__(self, set: ConvexSet, tol: float = ...) -> None: ...
    def AffineDimension(self) -> int: ...
    def Clone(self) -> ConvexSet: ...
    def ContainedIn(self, other: AffineSubspace, tol: float = ...) -> bool: ...
    def IsNearlyEqualTo(self, other: AffineSubspace, tol: float = ...) -> bool: ...
    def OrthogonalComplementBasis(self, *args, **kwargs): ...
    def ToGlobalCoordinates(self, *args, **kwargs): ...
    def ToLocalCoordinates(self, x) -> Any: ...
    def basis(self, *args, **kwargs): ...
    def translation(self, *args, **kwargs): ...
    def __copy__(self) -> ConvexSet: ...
    def __deepcopy__(self, arg: dict) -> ConvexSet: ...

class CIrisCollisionGeometry:
    def __init__(self, *args, **kwargs) -> None: ...
    def X_BG(self) -> pydrake.math.RigidTransform: ...
    def body_index(self) -> pydrake.multibody.tree.BodyIndex: ...
    def geometry(self) -> pydrake.geometry.Shape: ...
    def id(self) -> pydrake.geometry.GeometryId: ...
    def num_rationals(self) -> int: ...
    def type(self) -> CIrisGeometryType: ...

class CIrisGeometryType(enum.Enum):
    __new__: ClassVar[Callable] = ...
    _generate_next_value_: ClassVar[Callable] = ...
    _hashable_values_: ClassVar[list] = ...
    _member_map_: ClassVar[dict] = ...
    _member_names_: ClassVar[list] = ...
    _member_type_: ClassVar[type[object]] = ...
    _unhashable_values_: ClassVar[list] = ...
    _unhashable_values_map_: ClassVar[dict] = ...
    _use_args_: ClassVar[bool] = ...
    _value2member_map_: ClassVar[dict] = ...
    _value_repr_: ClassVar[None] = ...
    kCapsule: ClassVar[CIrisGeometryType] = ...
    kCylinder: ClassVar[CIrisGeometryType] = ...
    kPolytope: ClassVar[CIrisGeometryType] = ...
    kSphere: ClassVar[CIrisGeometryType] = ...
    __nb_enum__: ClassVar[PyCapsule] = ...

class CSpaceSeparatingPlane:
    def __init__(self, *args, **kwargs) -> None: ...
    def __copy__(self) -> CSpaceSeparatingPlane: ...
    def __deepcopy__(self, arg: dict) -> CSpaceSeparatingPlane: ...
    @property
    def a(self): ...
    @property
    def b(self): ...
    @property
    def decision_variables(self): ...
    @property
    def expressed_body(self): ...
    @property
    def negative_side_geometry(self): ...
    @property
    def plane_degree(self): ...
    @property
    def positive_side_geometry(self): ...

class CSpaceSeparatingPlane_𝓣Variable𝓤:
    _original_name: ClassVar[str] = ...
    _original_qualname: ClassVar[str] = ...
    def __init__(self, *args, **kwargs) -> None: ...
    def __copy__(self) -> CSpaceSeparatingPlane_TVariableU: ...
    def __deepcopy__(self, arg: dict) -> CSpaceSeparatingPlane_TVariableU: ...
    @property
    def a(self): ...
    @property
    def b(self): ...
    @property
    def decision_variables(self): ...
    @property
    def expressed_body(self): ...
    @property
    def negative_side_geometry(self): ...
    @property
    def plane_degree(self): ...
    @property
    def positive_side_geometry(self): ...

class CartesianProduct(ConvexSet):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, sets: collections.abc.Sequence[ConvexSet]) -> None: ...
    @overload
    def __init__(self, setA: ConvexSet, setB: ConvexSet) -> None: ...
    @overload
    def __init__(self, sets: collections.abc.Sequence[ConvexSet], A, b) -> None: ...
    @overload
    def __init__(self, query_object: pydrake.geometry.QueryObject, geometry_id: pydrake.geometry.GeometryId, reference_frame: pydrake.geometry.FrameId | None = ...) -> None: ...
    def A(self, *args, **kwargs): ...
    def b(self, *args, **kwargs): ...
    def factor(self, index: int) -> ConvexSet: ...
    def num_factors(self) -> int: ...

class ConvexHull(ConvexSet):
    def __init__(self, sets: collections.abc.Sequence[ConvexSet], remove_empty_sets: bool = ...) -> None: ...
    def element(self, index: int) -> ConvexSet: ...
    def empty_sets_removed(self) -> bool: ...
    def num_elements(self) -> int: ...
    def participating_sets(self) -> object: ...
    def sets(self) -> object: ...

class ConvexSet:
    def __init__(self, *args, **kwargs) -> None: ...
    @overload
    def AddPointInNonnegativeScalingConstraints(self, prog: pydrake.solvers.MathematicalProgram, x, t: pydrake.symbolic.Variable) -> list[pydrake.solvers.BindingTConstraintU]: ...
    @overload
    def AddPointInNonnegativeScalingConstraints(self, prog: pydrake.solvers.MathematicalProgram, A, b, c, d: float, x, t) -> list[pydrake.solvers.BindingTConstraintU]: ...
    def AddPointInSetConstraints(self, *args, **kwargs): ...
    def CalcVolume(self) -> float: ...
    def CalcVolumeViaSampling(self, generator: pydrake.common.RandomGenerator, desired_rel_accuracy: float = ..., max_num_samples: int = ...) -> SampledVolume: ...
    def Clone(self) -> ConvexSet: ...
    def IntersectsWith(self, other: ConvexSet) -> bool: ...
    def IsBounded(self, parallelism: pydrake.common.Parallelism = ...) -> bool: ...
    def IsEmpty(self) -> bool: ...
    def MaybeGetFeasiblePoint(self, *args, **kwargs): ...
    def MaybeGetPoint(self, *args, **kwargs): ...
    def PointInSet(self, x, tol: float = ...) -> bool: ...
    def Projection(self, *args, **kwargs): ...
    def ToShapeWithPose(self) -> tuple[pydrake.geometry.Shape, pydrake.math.RigidTransform]: ...
    @overload
    def ambient_dimension(self) -> int: ...
    @overload
    def ambient_dimension(self) -> Any: ...

class CspaceFreePolytope(CspaceFreePolytopeBase):
    class BilinearAlternationOptions:
        convergence_tol: float
        ellipsoid_scaling: float
        find_polytope_options: Incomplete
        max_iter: int
        def __init__(self) -> None: ...
        @property
        def find_lagrangian_options(self): ...

    class BinarySearchOptions:
        convergence_tol: Incomplete
        max_iter: Incomplete
        scale_max: Incomplete
        scale_min: Incomplete
        def __init__(self) -> None: ...
        @property
        def find_lagrangian_options(self): ...

    class EllipsoidMarginCost(enum.Enum):
        __new__: ClassVar[Callable] = ...
        _generate_next_value_: ClassVar[Callable] = ...
        _hashable_values_: ClassVar[list] = ...
        _member_map_: ClassVar[dict] = ...
        _member_names_: ClassVar[list] = ...
        _member_type_: ClassVar[type[object]] = ...
        _unhashable_values_: ClassVar[list] = ...
        _unhashable_values_map_: ClassVar[dict] = ...
        _use_args_: ClassVar[bool] = ...
        _value2member_map_: ClassVar[dict] = ...
        _value_repr_: ClassVar[None] = ...
        kGeometricMean: ClassVar[CspaceFreePolytope.EllipsoidMarginCost] = ...
        kSum: ClassVar[CspaceFreePolytope.EllipsoidMarginCost] = ...
        __nb_enum__: ClassVar[PyCapsule] = ...

    class FindPolytopeGivenLagrangianOptions:
        backoff_scale: Incomplete
        ellipsoid_margin_cost: Incomplete
        ellipsoid_margin_epsilon: Incomplete
        s_inner_pts: Incomplete
        search_s_bounds_lagrangians: Incomplete
        solver_id: Incomplete
        solver_options: Incomplete
        def __init__(self) -> None: ...

    class FindSeparationCertificateGivenPolytopeOptions(FindSeparationCertificateOptions):
        ignore_redundant_C: Incomplete
        def __init__(self) -> None: ...

    class SearchResult:
        def __init__(self) -> None: ...
        def C(self, *args, **kwargs): ...
        def a(self, *args, **kwargs): ...
        def b(self) -> dict[int, pydrake.symbolic.Polynomial]: ...
        def certified_polytope(self) -> HPolyhedron: ...
        def d(self, *args, **kwargs): ...
        def num_iter(self) -> int: ...

    class SeparatingPlaneLagrangians:
        def __init__(self, C_rows: int, s_size: int) -> None: ...
        def GetSolution(self, result: pydrake.solvers.MathematicalProgramResult) -> CspaceFreePolytope.SeparatingPlaneLagrangians: ...
        def polytope(self, *args, **kwargs): ...
        def s_lower(self, *args, **kwargs): ...
        def s_upper(self, *args, **kwargs): ...

    class SeparationCertificate:
        negative_side_rational_lagrangians: Incomplete
        positive_side_rational_lagrangians: Incomplete
        def __init__(self, *args, **kwargs) -> None: ...
        def GetSolution(self, plane_index: int, a, b: pydrake.symbolic.Polynomial, plane_decision_vars, result: pydrake.solvers.MathematicalProgramResult) -> CspaceFreePolytope.SeparationCertificateResult: ...

    class SeparationCertificateProgram(SeparationCertificateProgramBase):
        def __init__(self) -> None: ...
        @property
        def certificate(self): ...
        @property
        def plane_index(self): ...

    class SeparationCertificateResult:
        def __init__(self, *args, **kwargs) -> None: ...
        @property
        def a(self): ...
        @property
        def b(self): ...
        @property
        def negative_side_rational_lagrangians(self): ...
        @property
        def plane_decision_var_vals(self): ...
        @property
        def plane_index(self): ...
        @property
        def positive_side_rational_lagrangians(self): ...
        @property
        def result(self): ...
    def __init__(self, plant: pydrake.multibody.plant.MultibodyPlant, scene_graph: pydrake.geometry.SceneGraph, plane_order: SeparatingPlaneOrder, q_star, options: CspaceFreePolytopeBase.Options = ...) -> None: ...
    def BinarySearch(self, ignored_collision_pairs: collections.abc.Set[tuple[pydrake.geometry.GeometryId, pydrake.geometry.GeometryId]], C, d, s_center, options: CspaceFreePolytope.BinarySearchOptions) -> CspaceFreePolytope.SearchResult | None: ...
    def FindSeparationCertificateGivenPolytope(self, C, d, ignored_collision_pairs: collections.abc.Set[tuple[pydrake.geometry.GeometryId, pydrake.geometry.GeometryId]], options: CspaceFreePolytope.FindSeparationCertificateGivenPolytopeOptions) -> tuple[bool, dict[tuple[pydrake.geometry.GeometryId, pydrake.geometry.GeometryId], CspaceFreePolytope.SeparationCertificateResult]]: ...
    def MakeIsGeometrySeparableProgram(self, geometry_pair: tuple[pydrake.geometry.GeometryId, pydrake.geometry.GeometryId], C, d) -> CspaceFreePolytope.SeparationCertificateProgram: ...
    def SearchWithBilinearAlternation(self, ignored_collision_pairs: collections.abc.Set[tuple[pydrake.geometry.GeometryId, pydrake.geometry.GeometryId]], C_init, d_init, options: CspaceFreePolytope.BilinearAlternationOptions) -> list[CspaceFreePolytope.SearchResult]: ...
    def SolveSeparationCertificateProgram(self, certificate_program: CspaceFreePolytope.SeparationCertificateProgram, options: CspaceFreePolytope.FindSeparationCertificateGivenPolytopeOptions) -> CspaceFreePolytope.SeparationCertificateResult | None: ...

class CspaceFreePolytopeBase:
    class Options:
        with_cross_y: bool
        def __init__(self) -> None: ...
    def __init__(self, *args, **kwargs) -> None: ...
    def map_geometries_to_separating_planes(self) -> dict[tuple[pydrake.geometry.GeometryId, pydrake.geometry.GeometryId], int]: ...
    def separating_planes(self) -> list[CSpaceSeparatingPlane_TVariableU]: ...
    def y_slack(self, *args, **kwargs): ...

class FindSeparationCertificateOptions:
    parallelism: Incomplete
    solver_id: Incomplete
    solver_options: Incomplete
    terminate_at_failure: Incomplete
    verbose: Incomplete
    def __init__(self) -> None: ...

class GcsGraphvizOptions:
    precision: int
    scientific: Any
    show_costs: bool
    show_flows: bool
    show_slacks: bool
    show_vars: bool
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> GcsGraphvizOptions: ...
    def __deepcopy__(self, arg: dict) -> GcsGraphvizOptions: ...
    @property
    def __fields__(self): ...

class GraphOfConvexSets:
    class Edge:
        def __init__(self, *args, **kwargs) -> None: ...
        @overload
        def AddConstraint(self, f: pydrake.symbolic.Formula, use_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> pydrake.solvers.BindingTConstraintU: ...
        @overload
        def AddConstraint(self, binding: pydrake.solvers.BindingTConstraintU, use_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> pydrake.solvers.BindingTConstraintU: ...
        @overload
        def AddCost(self, e: pydrake.symbolic.Expression, use_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> pydrake.solvers.BindingTCostU: ...
        @overload
        def AddCost(self, binding: pydrake.solvers.BindingTCostU, use_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> pydrake.solvers.BindingTCostU: ...
        def AddPhiConstraint(self, phi_value: bool) -> None: ...
        def ClearPhiConstraints(self) -> None: ...
        def GetConstraints(self, used_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> list[pydrake.solvers.BindingTConstraintU]: ...
        def GetCosts(self, used_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> list[pydrake.solvers.BindingTCostU]: ...
        @overload
        def GetSolutionCost(self, result: pydrake.solvers.MathematicalProgramResult) -> float | None: ...
        @overload
        def GetSolutionCost(self, result: pydrake.solvers.MathematicalProgramResult, cost: pydrake.solvers.BindingTCostU) -> float | None: ...
        def GetSolutionPhiXu(self, *args, **kwargs): ...
        def GetSolutionPhiXv(self, *args, **kwargs): ...
        def id(self) -> GraphOfConvexSets.EdgeId: ...
        def name(self) -> str: ...
        @overload
        def phi(self) -> pydrake.symbolic.Variable: ...
        @overload
        def phi(self) -> Any: ...
        def u(self) -> GraphOfConvexSets.Vertex: ...
        def v(self) -> GraphOfConvexSets.Vertex: ...
        def xu(self) -> Any: ...
        def xv(self) -> Any: ...

    class EdgeId:
        get_new_id: ClassVar[nanobind.nb_func] = ...
        def __init__(self, *args, **kwargs) -> None: ...
        def get_value(self) -> int: ...
        def is_valid(self) -> bool: ...
        def __eq__(self, arg: GraphOfConvexSets.EdgeId) -> bool: ...
        def __hash__(self) -> int: ...
        def __lt__(self, arg: GraphOfConvexSets.EdgeId) -> bool: ...
        def __ne__(self, arg: GraphOfConvexSets.EdgeId) -> bool: ...

    class Transcription(enum.Enum):
        __new__: ClassVar[Callable] = ...
        _generate_next_value_: ClassVar[Callable] = ...
        _hashable_values_: ClassVar[list] = ...
        _member_map_: ClassVar[dict] = ...
        _member_names_: ClassVar[list] = ...
        _member_type_: ClassVar[type[object]] = ...
        _unhashable_values_: ClassVar[list] = ...
        _unhashable_values_map_: ClassVar[dict] = ...
        _use_args_: ClassVar[bool] = ...
        _value2member_map_: ClassVar[dict] = ...
        _value_repr_: ClassVar[None] = ...
        kMIP: ClassVar[GraphOfConvexSets.Transcription] = ...
        kRelaxation: ClassVar[GraphOfConvexSets.Transcription] = ...
        kRestriction: ClassVar[GraphOfConvexSets.Transcription] = ...
        __nb_enum__: ClassVar[PyCapsule] = ...

    class Vertex:
        def __init__(self, *args, **kwargs) -> None: ...
        @overload
        def AddConstraint(self, f: pydrake.symbolic.Formula, use_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> pydrake.solvers.BindingTConstraintU: ...
        @overload
        def AddConstraint(self, binding: pydrake.solvers.BindingTConstraintU, use_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> pydrake.solvers.BindingTConstraintU: ...
        @overload
        def AddCost(self, e: pydrake.symbolic.Expression, use_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> pydrake.solvers.BindingTCostU: ...
        @overload
        def AddCost(self, binding: pydrake.solvers.BindingTCostU, use_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> pydrake.solvers.BindingTCostU: ...
        def GetConstraints(self, used_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> list[pydrake.solvers.BindingTConstraintU]: ...
        def GetCosts(self, used_in_transcription: collections.abc.Set[GraphOfConvexSets.Transcription] = ...) -> list[pydrake.solvers.BindingTCostU]: ...
        def GetSolution(self, *args, **kwargs): ...
        @overload
        def GetSolutionCost(self, result: pydrake.solvers.MathematicalProgramResult) -> float | None: ...
        @overload
        def GetSolutionCost(self, result: pydrake.solvers.MathematicalProgramResult, cost: pydrake.solvers.BindingTCostU) -> float | None: ...
        def ambient_dimension(self) -> int: ...
        def id(self) -> GraphOfConvexSets.VertexId: ...
        def incoming_edges(self) -> list[GraphOfConvexSets.Edge]: ...
        def name(self) -> str: ...
        def outgoing_edges(self) -> list[GraphOfConvexSets.Edge]: ...
        def set(self) -> ConvexSet: ...
        def x(self, *args, **kwargs): ...

    class VertexId:
        get_new_id: ClassVar[nanobind.nb_func] = ...
        def __init__(self, *args, **kwargs) -> None: ...
        def get_value(self) -> int: ...
        def is_valid(self) -> bool: ...
        def __eq__(self, arg: GraphOfConvexSets.VertexId) -> bool: ...
        def __hash__(self) -> int: ...
        def __lt__(self, arg: GraphOfConvexSets.VertexId) -> bool: ...
        def __ne__(self, arg: GraphOfConvexSets.VertexId) -> bool: ...
    def __init__(self) -> None: ...
    def AddEdge(self, u: GraphOfConvexSets.Vertex, v: GraphOfConvexSets.Vertex, name: str = ...) -> GraphOfConvexSets.Edge: ...
    def AddEdgeFromTemplate(self, u: GraphOfConvexSets.Vertex, v: GraphOfConvexSets.Vertex, template_edge: GraphOfConvexSets.Edge) -> GraphOfConvexSets.Edge: ...
    def AddVertex(self, set: ConvexSet, name: str = ...) -> GraphOfConvexSets.Vertex: ...
    def AddVertexFromTemplate(self, template_vertex: GraphOfConvexSets.Vertex) -> GraphOfConvexSets.Vertex: ...
    def ClearAllPhiConstraints(self) -> None: ...
    def Clone(self) -> GraphOfConvexSets: ...
    def Edges(self) -> list[GraphOfConvexSets.Edge]: ...
    def GetEdgeByName(self, name: str) -> GraphOfConvexSets.Edge: ...
    @overload
    def GetGraphvizString(self, result: pydrake.solvers.MathematicalProgramResult | None = ..., options: GcsGraphvizOptions = ..., active_path: collections.abc.Sequence[GraphOfConvexSets.Edge] = ...) -> str: ...
    @overload
    def GetGraphvizString(self, result: pydrake.solvers.MathematicalProgramResult | None = ..., show_slacks: bool = ..., show_vars: bool = ..., show_flows: bool = ..., show_costs: bool = ..., scientific: bool = ..., precision: int = ..., active_path: collections.abc.Sequence[GraphOfConvexSets.Edge] = ...) -> str: ...
    def GetMutableEdgeByName(self, name: str) -> GraphOfConvexSets.Edge: ...
    def GetMutableVertexByName(self, name: str) -> GraphOfConvexSets.Vertex: ...
    def GetSolutionPath(self, source: GraphOfConvexSets.Vertex, target: GraphOfConvexSets.Vertex, result: pydrake.solvers.MathematicalProgramResult, tolerance: float = ...) -> list[GraphOfConvexSets.Edge]: ...
    def GetVertexByName(self, name: str) -> GraphOfConvexSets.Vertex: ...
    @overload
    def IsValid(self, v: GraphOfConvexSets.Vertex) -> bool: ...
    @overload
    def IsValid(self, e: GraphOfConvexSets.Edge) -> bool: ...
    def RemoveEdge(self, edge: GraphOfConvexSets.Edge) -> None: ...
    def RemoveVertex(self, vertex: GraphOfConvexSets.Vertex) -> None: ...
    @overload
    def SamplePaths(self, source: GraphOfConvexSets.Vertex, target: GraphOfConvexSets.Vertex, flows: collections.abc.Mapping[GraphOfConvexSets.Edge, float], options: GraphOfConvexSetsOptions) -> list[list[GraphOfConvexSets.Edge]]: ...
    @overload
    def SamplePaths(self, source: GraphOfConvexSets.Vertex, target: GraphOfConvexSets.Vertex, result: pydrake.solvers.MathematicalProgramResult, options: GraphOfConvexSetsOptions) -> list[list[GraphOfConvexSets.Edge]]: ...
    def SolveConvexRestriction(self, active_edges: collections.abc.Sequence[GraphOfConvexSets.Edge], options: GraphOfConvexSetsOptions = ..., initial_guess: pydrake.solvers.MathematicalProgramResult | None = ...) -> pydrake.solvers.MathematicalProgramResult: ...
    def SolveShortestPath(self, source: GraphOfConvexSets.Vertex, target: GraphOfConvexSets.Vertex, options: GraphOfConvexSetsOptions = ...) -> pydrake.solvers.MathematicalProgramResult: ...
    def Vertices(self) -> list[GraphOfConvexSets.Vertex]: ...
    def num_edges(self) -> int: ...
    def num_vertices(self) -> int: ...
    def __copy__(self) -> GraphOfConvexSets: ...
    def __deepcopy__(self, arg: dict) -> GraphOfConvexSets: ...

class GraphOfConvexSetsOptions:
    convex_relaxation: bool | None
    flow_tolerance: float
    max_rounded_paths: int | None
    max_rounding_trials: int
    parallelism: Incomplete
    preprocessing: bool | None
    preprocessing_solver: pydrake.solvers.SolverInterface
    preprocessing_solver_options: pydrake.solvers.SolverOptions | None
    restriction_solver: pydrake.solvers.SolverInterface
    restriction_solver_options: pydrake.solvers.SolverOptions | None
    rounding_seed: int
    solver: pydrake.solvers.SolverInterface
    solver_options: pydrake.solvers.SolverOptions
    def __init__(self) -> None: ...

class HPolyhedron(ConvexSet):
    MakeBox: ClassVar[nanobind.nb_func] = ...
    MakeL1Ball: ClassVar[nanobind.nb_func] = ...
    MakeUnitBox: ClassVar[nanobind.nb_func] = ...
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, A, b) -> None: ...
    @overload
    def __init__(self, query_object: pydrake.geometry.QueryObject, geometry_id: pydrake.geometry.GeometryId, reference_frame: pydrake.geometry.FrameId | None = ...) -> None: ...
    @overload
    def __init__(self, vpoly: VPolytope, tol: float = ...) -> None: ...
    @overload
    def __init__(self, prog: pydrake.solvers.MathematicalProgram) -> None: ...
    def A(self, *args, **kwargs): ...
    def CartesianPower(self, n: int) -> HPolyhedron: ...
    def CartesianProduct(self, other: HPolyhedron) -> HPolyhedron: ...
    def ChebyshevCenter(self, *args, **kwargs): ...
    def ContainedIn(self, other: HPolyhedron, tol: float = ...) -> bool: ...
    def FindRedundant(self, tol: float = ...) -> set[int]: ...
    def Intersection(self, other: HPolyhedron, check_for_redundancy: bool = ..., tol: float = ...) -> HPolyhedron: ...
    def MaximumVolumeInscribedAffineTransformation(self, circumbody: HPolyhedron, check_bounded: bool = ...) -> HPolyhedron: ...
    def MaximumVolumeInscribedEllipsoid(self) -> Hyperellipsoid: ...
    def PontryaginDifference(self, other: HPolyhedron) -> HPolyhedron: ...
    def ReduceInequalities(self, tol: float = ...) -> HPolyhedron: ...
    def Scale(self, scale: float, center=...) -> HPolyhedron: ...
    def SimplifyByIncrementalFaceTranslation(self, min_volume_ratio: float = ..., do_affine_transformation: bool = ..., max_iterations: int = ..., points_to_contain=..., intersecting_polytopes: collections.abc.Sequence[HPolyhedron] = ..., keep_whole_intersection: bool = ..., intersection_padding: float = ..., random_seed: int = ...) -> HPolyhedron: ...
    def UniformSample(self, *args, **kwargs): ...
    def b(self, *args, **kwargs): ...

class Hyperellipsoid(ConvexSet):
    MakeAxisAligned: ClassVar[nanobind.nb_func] = ...
    MakeHypersphere: ClassVar[nanobind.nb_func] = ...
    MakeUnitBall: ClassVar[nanobind.nb_func] = ...
    MinimumVolumeCircumscribedEllipsoid: ClassVar[nanobind.nb_func] = ...
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, A, center) -> None: ...
    @overload
    def __init__(self, query_object: pydrake.geometry.QueryObject, geometry_id: pydrake.geometry.GeometryId, reference_frame: pydrake.geometry.FrameId | None = ...) -> None: ...
    @overload
    def __init__(self, ellipsoid: AffineBall) -> None: ...
    def A(self, *args, **kwargs): ...
    def MinimumUniformScalingToTouch(self, *args, **kwargs): ...
    def center(self, *args, **kwargs): ...

class Hyperrectangle(ConvexSet):
    MaybeCalcAxisAlignedBoundingBox: ClassVar[nanobind.nb_func] = ...
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, lb, ub) -> None: ...
    def Center(self, *args, **kwargs): ...
    def MakeHPolyhedron(self) -> HPolyhedron: ...
    def MaybeGetIntersection(self, arg: Hyperrectangle) -> Hyperrectangle | None: ...
    def UniformSample(self, *args, **kwargs): ...
    def lb(self, *args, **kwargs): ...
    def ub(self, *args, **kwargs): ...

class ImplicitGraphOfConvexSets:
    def __init__(self) -> None: ...
    def ExpandRecursively(self, start: GraphOfConvexSets.Vertex, max_successor_calls: int = ...) -> None: ...
    def Successors(self, v: GraphOfConvexSets.Vertex) -> list[GraphOfConvexSets.Edge]: ...
    def gcs(self) -> GraphOfConvexSets: ...
    def mutable_gcs(self) -> GraphOfConvexSets: ...

class ImplicitGraphOfConvexSetsFromExplicit(ImplicitGraphOfConvexSets):
    def __init__(self, gcs: GraphOfConvexSets) -> None: ...
    def ImplicitVertexFromExplicit(self, v_explicit: GraphOfConvexSets.Vertex) -> GraphOfConvexSets.Vertex: ...

class Intersection(ConvexSet):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, sets: collections.abc.Sequence[ConvexSet]) -> None: ...
    @overload
    def __init__(self, setA: ConvexSet, setB: ConvexSet) -> None: ...
    def element(self, index: int) -> ConvexSet: ...
    def num_elements(self) -> int: ...

class IrisOptions:
    bounding_region: HPolyhedron | None
    configuration_obstacles: object
    configuration_space_margin: float
    iteration_limit: int
    mixing_steps: int
    num_additional_constraint_infeasible_samples: int
    num_collision_infeasible_samples: int
    prog_with_additional_constraints: pydrake.solvers.MathematicalProgram
    random_seed: int
    relative_termination_threshold: float
    require_sample_point_is_contained: bool
    solver_options: pydrake.solvers.SolverOptions | None
    starting_ellipse: Hyperellipsoid | None
    termination_threshold: float
    verify_domain_boundedness: Incomplete
    def __init__(self, **kwargs) -> None: ...

class MinkowskiSum(ConvexSet):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, sets: collections.abc.Sequence[ConvexSet]) -> None: ...
    @overload
    def __init__(self, setA: ConvexSet, setB: ConvexSet) -> None: ...
    @overload
    def __init__(self, query_object: pydrake.geometry.QueryObject, geometry_id: pydrake.geometry.GeometryId, reference_frame: pydrake.geometry.FrameId | None = ...) -> None: ...
    def num_terms(self) -> int: ...
    def term(self, index: int) -> ConvexSet: ...

class PlaneSide(enum.Enum):
    __new__: ClassVar[Callable] = ...
    _generate_next_value_: ClassVar[Callable] = ...
    _hashable_values_: ClassVar[list] = ...
    _member_map_: ClassVar[dict] = ...
    _member_names_: ClassVar[list] = ...
    _member_type_: ClassVar[type[object]] = ...
    _unhashable_values_: ClassVar[list] = ...
    _unhashable_values_map_: ClassVar[dict] = ...
    _use_args_: ClassVar[bool] = ...
    _value2member_map_: ClassVar[dict] = ...
    _value_repr_: ClassVar[None] = ...
    kNegative: ClassVar[PlaneSide] = ...
    kPositive: ClassVar[PlaneSide] = ...
    __nb_enum__: ClassVar[PyCapsule] = ...

class Point(ConvexSet):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, x) -> None: ...
    @overload
    def __init__(self, query_object: pydrake.geometry.QueryObject, geometry_id: pydrake.geometry.GeometryId, reference_frame: pydrake.geometry.FrameId | None = ..., maximum_allowable_radius: float = ...) -> None: ...
    def set_x(self, x) -> None: ...
    def x(self, *args, **kwargs): ...

class SampledVolume:
    num_samples: int
    rel_accuracy: float
    volume: float
    def __init__(self, *args, **kwargs) -> None: ...

class SeparatingPlaneOrder(enum.Enum):
    __new__: ClassVar[Callable] = ...
    _generate_next_value_: ClassVar[Callable] = ...
    _hashable_values_: ClassVar[list] = ...
    _member_map_: ClassVar[dict] = ...
    _member_names_: ClassVar[list] = ...
    _member_type_: ClassVar[type[object]] = ...
    _unhashable_values_: ClassVar[list] = ...
    _unhashable_values_map_: ClassVar[dict] = ...
    _use_args_: ClassVar[bool] = ...
    _value2member_map_: ClassVar[dict] = ...
    _value_repr_: ClassVar[None] = ...
    kAffine: ClassVar[SeparatingPlaneOrder] = ...
    __nb_enum__: ClassVar[PyCapsule] = ...

class SeparationCertificateProgramBase:
    def __init__(self, *args, **kwargs) -> None: ...
    def prog(self) -> pydrake.solvers.MathematicalProgram: ...
    @property
    def plane_index(self): ...

class SeparationCertificateResultBase:
    def __init__(self, *args, **kwargs) -> None: ...
    @property
    def a(self): ...
    @property
    def b(self): ...
    @property
    def plane_decision_var_vals(self): ...
    @property
    def result(self): ...

class Spectrahedron(ConvexSet):
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, prog: pydrake.solvers.MathematicalProgram) -> None: ...

class VPolytope(ConvexSet):
    MakeBox: ClassVar[nanobind.nb_func] = ...
    MakeUnitBox: ClassVar[nanobind.nb_func] = ...
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, vertices) -> None: ...
    @overload
    def __init__(self, H: HPolyhedron, tol: float = ...) -> None: ...
    @overload
    def __init__(self, query_object: pydrake.geometry.QueryObject, geometry_id: pydrake.geometry.GeometryId, reference_frame: pydrake.geometry.FrameId | None = ...) -> None: ...
    def GetMinimalRepresentation(self, tol: float = ...) -> VPolytope: ...
    def ToShapeConvex(self, convex_label: str = ...) -> pydrake.geometry.Convex: ...
    def WriteObj(self, filename: str | os.PathLike) -> None: ...
    def vertices(self, *args, **kwargs): ...

class _TemporaryName_N5drake8geometry12optimization21CSpaceSeparatingPlaneINS_8symbolic8VariableEEE:
    _original_name: ClassVar[str] = ...
    _original_qualname: ClassVar[str] = ...
    def __init__(self, *args, **kwargs) -> None: ...
    def __copy__(self) -> CSpaceSeparatingPlane_TVariableU: ...
    def __deepcopy__(self, arg: dict) -> CSpaceSeparatingPlane_TVariableU: ...
    @property
    def a(self): ...
    @property
    def b(self): ...
    @property
    def decision_variables(self): ...
    @property
    def expressed_body(self): ...
    @property
    def negative_side_geometry(self): ...
    @property
    def plane_degree(self): ...
    @property
    def positive_side_geometry(self): ...
