import ompl as _ompl
from collections.abc import Callable, Sequence
from typing import overload




class PathGeometric(_ompl.base.Path):
    @overload
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

    @overload
    def __init__(self, arg: PathGeometric) -> None: ...

    @overload
    def __init__(self, si: _ompl.base.SpaceInformation, state: _ompl.base.State) -> None: ...

    @overload
    def __init__(self, si: _ompl.base.SpaceInformation, state1: _ompl.base.State, state2: _ompl.base.State) -> None: ...

    @overload
    def __init__(self, si: _ompl.base.SpaceInformation, states: Sequence[_ompl.base.State]) -> None: ...

    def assign(self, arg: PathGeometric, /) -> PathGeometric:
        """Assign another PathGeometric to this one"""

    def cost(self, obj: _ompl.base.OptimizationObjective) -> _ompl.base.Cost: ...

    def length(self) -> float: ...

    def check(self) -> bool: ...

    def smoothness(self) -> float: ...

    def clearance(self) -> float: ...

    def print(self) -> None: ...

    @overload
    def __repr__(self) -> str: ...

    @overload
    def __repr__(self) -> str: ...

    def printAsMatrix(self) -> None: ...

    @overload
    def interpolate(self, count: int) -> None: ...

    @overload
    def interpolate(self) -> None: ...

    def subdivide(self) -> None: ...

    def reverse(self) -> None: ...

    def checkAndRepair(self, attempts: int) -> "std::__1::pair<bool, bool>": ...

    def overlay(self, over: PathGeometric, startIndex: int = 0) -> None: ...

    @overload
    def append(self, state: _ompl.base.State) -> None: ...

    @overload
    def append(self, path: PathGeometric) -> None: ...

    def prepend(self, state: _ompl.base.State) -> None: ...

    def keepAfter(self, state: _ompl.base.State) -> None: ...

    def keepBefore(self, state: _ompl.base.State) -> None: ...

    def random(self) -> None: ...

    def randomValid(self, attempts: int) -> bool: ...

    def getClosestIndex(self, state: _ompl.base.State) -> int: ...

    def getStates(self) -> list[_ompl.base.State]: ...

    def getState(self, index: int) -> _ompl.base.State: ...

    def getStateCount(self) -> int: ...

    def clear(self) -> None: ...

class PathSimplifier:
    def __init__(self, si: _ompl.base.SpaceInformation, goal: _ompl.base.Goal | None = None, obj: _ompl.base.OptimizationObjective | None = None) -> None: ...

    def reduceVertices(self, path: PathGeometric, maxSteps: int = 0, maxEmptySteps: int = 0, rangeRatio: float = 0.33) -> bool: ...

    def ropeShortcutPath(self, path: PathGeometric, delta: float = 1.0, equivalenceTolerance: float = 0.1) -> bool: ...

    def partialShortcutPath(self, path: PathGeometric, maxSteps: int = 0, maxEmptySteps: int = 0, rangeRatio: float = 0.33, snapToVertex: float = 0.005) -> bool: ...

    def perturbPath(self, path: PathGeometric, stepSize: float, maxSteps: int = 0, maxEmptySteps: int = 0, snapToVertex: float = 0.005) -> bool: ...

    def collapseCloseVertices(self, path: PathGeometric, maxSteps: int = 0, maxEmptySteps: int = 0) -> bool: ...

    def smoothBSpline(self, path: PathGeometric, maxSteps: int = 5, minChange: float = 2.220446049250313e-16) -> None: ...

    def simplifyMax(self, path: PathGeometric) -> bool: ...

    @overload
    def simplify(self, path: PathGeometric, maxTime: float, atLeastOnce: bool = True) -> bool: ...

    @overload
    def simplify(self, path: PathGeometric, ptc: _ompl.base.PlannerTerminationCondition, atLeastOnce: bool = True) -> bool: ...

    @overload
    def findBetterGoal(self, path: PathGeometric, maxTime: float, samplingAttempts: int = 10, rangeRatio: float = 0.33, snapToVertex: float = 0.005) -> bool: ...

    @overload
    def findBetterGoal(self, path: PathGeometric, ptc: _ompl.base.PlannerTerminationCondition, samplingAttempts: int = 10, rangeRatio: float = 0.33, snapToVertex: float = 0.005) -> bool: ...

    @overload
    def freeStates(self, flag: bool) -> None: ...

    @overload
    def freeStates(self) -> bool: ...

class SimpleSetup:
    @overload
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

    @overload
    def __init__(self, space: _ompl.base.StateSpace) -> None: ...

    def getSpaceInformation(self) -> _ompl.base.SpaceInformation: ...

    def getProblemDefinition(self) -> _ompl.base.ProblemDefinition: ...

    def getProblemDefinitionConst(self) -> _ompl.base.ProblemDefinition: ...

    def getStateSpace(self) -> _ompl.base.StateSpace: ...

    def getStateValidityChecker(self) -> _ompl.base.StateValidityChecker: ...

    def getGoal(self) -> _ompl.base.Goal: ...

    def getPlanner(self) -> _ompl.base.Planner: ...

    def getPlannerAllocator(self) -> Callable[[_ompl.base.SpaceInformation], _ompl.base.Planner]: ...

    def getPathSimplifier(self) -> PathSimplifier: ...

    def getPathSimplifierConst(self) -> PathSimplifier: ...

    def getOptimizationObjective(self) -> _ompl.base.OptimizationObjective: ...

    def haveExactSolutionPath(self) -> bool: ...

    def haveSolutionPath(self) -> bool: ...

    def getSolutionPlannerName(self) -> str: ...

    def getSolutionPath(self) -> PathGeometric: ...

    def getPlannerData(self, plannerData: _ompl.base.PlannerData) -> None: ...

    @overload
    def setStateValidityChecker(self, svc: Callable[[_ompl.base.State], bool]) -> None: ...

    @overload
    def setStateValidityChecker(self, svc: _ompl.base.StateValidityChecker) -> None: ...

    def setOptimizationObjective(self, objective: _ompl.base.OptimizationObjective) -> None: ...

    def setStartAndGoalStates(self, start: _ompl.base.State, goal: _ompl.base.State, threshold: float = 2.220446049250313e-16) -> None: ...

    def clearStartStates(self) -> None: ...

    def addStartState(self, state: _ompl.base.State) -> None: ...

    def setStartState(self, state: _ompl.base.State) -> None: ...

    def setGoalState(self, goal: _ompl.base.State, threshold: float = 2.220446049250313e-16) -> None: ...

    def setGoal(self, goal: _ompl.base.Goal) -> None: ...

    def setPlanner(self, planner: _ompl.base.Planner) -> None:
        """Set a planner for this setup."""

    def setPlannerAllocator(self, allocator: Callable[[_ompl.base.SpaceInformation], _ompl.base.Planner]) -> None: ...

    @overload
    def solve(self, time: float = 1.0) -> _ompl.base.PlannerStatus: ...

    @overload
    def solve(self, ptc: _ompl.base.PlannerTerminationCondition) -> _ompl.base.PlannerStatus: ...

    def getLastPlannerStatus(self) -> _ompl.base.PlannerStatus: ...

    def getLastPlanComputationTime(self) -> float: ...

    def getLastSimplificationTime(self) -> float: ...

    @overload
    def simplifySolution(self, duration: float = 0.0) -> None: ...

    @overload
    def simplifySolution(self, ptc: _ompl.base.PlannerTerminationCondition) -> None: ...

    def clear(self) -> None: ...

    def print(self) -> str: ...

    def __repr__(self) -> str: ...

    def setup(self) -> None: ...

class PRM(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation, starStrategy: bool = False) -> None: ...

    def setMaxNearestNeighbors(self, k: int) -> None: ...

    def getMaxNearestNeighbors(self) -> int: ...

    def setDefaultConnectionStrategy(self) -> None: ...

    def constructRoadmap(self, arg: object, /) -> None: ...

    def growRoadmap(self, growTime: float) -> None: ...

    def growRoadmapPtc(self, ptc: _ompl.base.PlannerTerminationCondition) -> None: ...

    def expandRoadmap(self, expandTime: float) -> None: ...

    def expandRoadmapPtc(self, ptc: _ompl.base.PlannerTerminationCondition) -> None: ...

    def setup(self) -> None: ...

    def clear(self) -> None: ...

    def clearQuery(self) -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

    def milestoneCount(self) -> int: ...

    def edgeCount(self) -> int: ...

class PRMstar(PRM):
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

class RRT(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation, addIntermediateStates: bool = False) -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

    def clear(self) -> None: ...

    def setGoalBias(self, goalBias: float) -> None: ...

    def getGoalBias(self) -> float: ...

    def setIntermediateStates(self, addIntermediateStates: bool) -> None: ...

    def getIntermediateStates(self) -> bool: ...

    def setRange(self, distance: float) -> None: ...

    def getRange(self) -> float: ...

    def setup(self) -> None: ...

class RRTConnect(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation, addIntermediateStates: bool = False) -> None: ...

    def getIntermediateStates(self) -> bool: ...

    def setIntermediateStates(self, addIntermediateStates: bool) -> None: ...

    def setRange(self, distance: float) -> None: ...

    def getRange(self) -> float: ...

    def setup(self) -> None: ...

    def clear(self) -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

class RRTstar(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

    def clear(self) -> None: ...

    def setup(self) -> None: ...

    def setGoalBias(self, goalBias: float) -> None: ...

    def getGoalBias(self) -> float: ...

    def setRange(self, distance: float) -> None: ...

    def getRange(self) -> float: ...

    def setRewireFactor(self, rewireFactor: float) -> None: ...

    def getRewireFactor(self) -> float: ...

    def setDelayCC(self, delayCC: bool) -> None: ...

    def getDelayCC(self) -> bool: ...

    def setTreePruning(self, prune: bool) -> None: ...

    def getTreePruning(self) -> bool: ...

    def setPruneThreshold(self, pp: float) -> None: ...

    def getPruneThreshold(self) -> float: ...

    def setPrunedMeasure(self, informedMeasure: bool) -> None: ...

    def getPrunedMeasure(self) -> bool: ...

    def setInformedSampling(self, informedSampling: bool) -> None: ...

    def getInformedSampling(self) -> bool: ...

    def setSampleRejection(self, reject: bool) -> None: ...

    def getSampleRejection(self) -> bool: ...

    def setNewStateRejection(self, reject: bool) -> None: ...

    def getNewStateRejection(self) -> bool: ...

    def setAdmissibleCostToCome(self, admissible: bool) -> None: ...

    def getAdmissibleCostToCome(self) -> bool: ...

    def setOrderedSampling(self, orderSamples: bool) -> None: ...

    def getOrderedSampling(self) -> bool: ...

    def setBatchSize(self, batchSize: int) -> None: ...

    def getBatchSize(self) -> int: ...

    def setFocusSearch(self, focus: bool) -> None: ...

    def getFocusSearch(self) -> bool: ...

    def setKNearest(self, useKNearest: bool) -> None: ...

    def getKNearest(self) -> bool: ...

    def setNumSamplingAttempts(self, numAttempts: int) -> None: ...

    def getNumSamplingAttempts(self) -> int: ...

    def numIterations(self) -> int: ...

    def bestCost(self) -> _ompl.base.Cost: ...

class InformedRRTstar(RRTstar):
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

class SORRTstar(InformedRRTstar):
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

class AORRTC(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

    def clear(self) -> None: ...

    def setup(self) -> None: ...

    def setRange(self, distance: float) -> None: ...

    def getRange(self) -> float: ...

    def bestCost(self) -> _ompl.base.Cost: ...

class BITstar(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation, name: str = 'kBITstar') -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

    def clear(self) -> None: ...

    def setup(self) -> None: ...

    def numIterations(self) -> int: ...

    def bestCost(self) -> _ompl.base.Cost: ...

    def numBatches(self) -> int: ...

    def setRewireFactor(self, rewireFactor: float) -> None: ...

    def getRewireFactor(self) -> float: ...

    def setSamplesPerBatch(self, n: int) -> None: ...

    def getSamplesPerBatch(self) -> int: ...

    def setUseKNearest(self, useKNearest: bool) -> None: ...

    def getUseKNearest(self) -> bool: ...

    def setStrictQueueOrdering(self, beStrict: bool) -> None: ...

    def getStrictQueueOrdering(self) -> bool: ...

    def setPruning(self, prune: bool) -> None: ...

    def getPruning(self) -> bool: ...

    def setPruneThresholdFraction(self, fractionalChange: float) -> None: ...

    def getPruneThresholdFraction(self) -> float: ...

    def setDelayRewiringUntilInitialSolution(self, delayRewiring: bool) -> None: ...

    def getDelayRewiringUntilInitialSolution(self) -> bool: ...

    def setJustInTimeSampling(self, useJit: bool) -> None: ...

    def getJustInTimeSampling(self) -> bool: ...

    def setDropSamplesOnPrune(self, dropSamples: bool) -> None: ...

    def getDropSamplesOnPrune(self) -> bool: ...

    def setStopOnSolnImprovement(self, stopOnChange: bool) -> None: ...

    def getStopOnSolnImprovement(self) -> bool: ...

    def setConsiderApproximateSolutions(self, findApproximate: bool) -> None: ...

    def getConsiderApproximateSolutions(self) -> bool: ...

class FMT(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

    def clear(self) -> None: ...

    def setup(self) -> None: ...

    def setNumSamples(self, numSamples: int) -> None: ...

    def getNumSamples(self) -> int: ...

    def setNearestK(self, nearestK: bool) -> None: ...

    def getNearestK(self) -> bool: ...

    def setRadiusMultiplier(self, radiusMultiplier: float) -> None: ...

    def getRadiusMultiplier(self) -> float: ...

    def setFreeSpaceVolume(self, freeSpaceVolume: float) -> None: ...

    def getFreeSpaceVolume(self) -> float: ...

    def setCacheCC(self, ccc: bool) -> None: ...

    def getCacheCC(self) -> bool: ...

    def setHeuristics(self, h: bool) -> None: ...

    def getHeuristics(self) -> bool: ...

    def setExtendedFMT(self, e: bool) -> None: ...

    def getExtendedFMT(self) -> bool: ...

class BFMT(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

    def clear(self) -> None: ...

    def setup(self) -> None: ...

    def setNumSamples(self, numSamples: int) -> None: ...

    def getNumSamples(self) -> int: ...

    def setNearestK(self, nearestK: bool) -> None: ...

    def getNearestK(self) -> bool: ...

    def setRadiusMultiplier(self, radiusMultiplier: float) -> None: ...

    def getRadiusMultiplier(self) -> float: ...

    @overload
    def setFreeSpaceVolume(self, freeSpaceVolume: float) -> None: ...

    @overload
    def setFreeSpaceVolume(self, freeSpaceVolume: float) -> None: ...

    @overload
    def getFreeSpaceVolume(self) -> float: ...

    @overload
    def getFreeSpaceVolume(self) -> float: ...

    def setCacheCC(self, ccc: bool) -> None: ...

    def getCacheCC(self) -> bool: ...

    def setHeuristics(self, h: bool) -> None: ...

    def getHeuristics(self) -> bool: ...

    def setExtendedFMT(self, e: bool) -> None: ...

    def getExtendedFMT(self) -> bool: ...

class KPIECE1(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

    def clear(self) -> None: ...

    def setup(self) -> None: ...

    def setGoalBias(self, goalBias: float) -> None: ...

    def getGoalBias(self) -> float: ...

    def setRange(self, distance: float) -> None: ...

    def getRange(self) -> float: ...

    def setBorderFraction(self, bp: float) -> None: ...

    def getBorderFraction(self) -> float: ...

    def setMinValidPathFraction(self, fraction: float) -> None: ...

    def getMinValidPathFraction(self) -> float: ...

    def setFailedExpansionCellScoreFactor(self, factor: float) -> None: ...

    def getFailedExpansionCellScoreFactor(self) -> float: ...

    @overload
    def setProjectionEvaluator(self, projectionEvaluator: _ompl.base.ProjectionEvaluator) -> None: ...

    @overload
    def setProjectionEvaluator(self, name: str) -> None: ...

    def getProjectionEvaluator(self) -> _ompl.base.ProjectionEvaluator: ...

class BKPIECE1(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

    def clear(self) -> None: ...

    def setup(self) -> None: ...

    def setRange(self, distance: float) -> None: ...

    def getRange(self) -> float: ...

    def setBorderFraction(self, bp: float) -> None: ...

    def getBorderFraction(self) -> float: ...

    def setMinValidPathFraction(self, fraction: float) -> None: ...

    def getMinValidPathFraction(self) -> float: ...

    def setFailedExpansionCellScoreFactor(self, factor: float) -> None: ...

    def getFailedExpansionCellScoreFactor(self) -> float: ...

    @overload
    def setProjectionEvaluator(self, projectionEvaluator: _ompl.base.ProjectionEvaluator) -> None: ...

    @overload
    def setProjectionEvaluator(self, name: str) -> None: ...

    def getProjectionEvaluator(self) -> _ompl.base.ProjectionEvaluator: ...

class LBKPIECE1(_ompl.base.Planner):
    def __init__(self, si: _ompl.base.SpaceInformation) -> None: ...

    def solve(self, arg: object, /) -> _ompl.base.PlannerStatus: ...

    def getPlannerData(self, data: _ompl.base.PlannerData) -> None: ...

    def clear(self) -> None: ...

    def setup(self) -> None: ...

    def setRange(self, distance: float) -> None: ...

    def getRange(self) -> float: ...

    def setBorderFraction(self, bp: float) -> None: ...

    def getBorderFraction(self) -> float: ...

    def setMinValidPathFraction(self, fraction: float) -> None: ...

    def getMinValidPathFraction(self) -> float: ...

    @overload
    def setProjectionEvaluator(self, projectionEvaluator: _ompl.base.ProjectionEvaluator) -> None: ...

    @overload
    def setProjectionEvaluator(self, name: str) -> None: ...

    def getProjectionEvaluator(self) -> _ompl.base.ProjectionEvaluator: ...

class DiscretizationCellData:
    def __init__(self) -> None: ...

    @property
    def coverage(self) -> float: ...

    @property
    def selections(self) -> int: ...

    @property
    def score(self) -> float: ...

    @property
    def iteration(self) -> int: ...

    @property
    def importance(self) -> float: ...

class Discretization:
    def __init__(self) -> None: ...

    def setBorderFraction(self, bp: float) -> None: ...

    def getBorderFraction(self) -> float: ...

    def setDimension(self, dim: int) -> None: ...

    def clear(self) -> None: ...

    def countIteration(self) -> None: ...

    def getMotionCount(self) -> int: ...

    def getCellCount(self) -> int: ...

    def freeMemory(self) -> None: ...
