import collections.abc
import nanobind
import os
import pydrake.common.schema
import pydrake.geometry
import pydrake.multibody.plant
import pydrake.multibody.tree
import pydrake.systems.framework
from _typeshed import Incomplete
from typing import ClassVar, overload

FlattenModelDirectives: nanobind.nb_func
GetScopedFrameByName: nanobind.nb_func
GetScopedFrameByNameMaybe: nanobind.nb_func
LoadModelDirectives: nanobind.nb_func
LoadModelDirectivesFromString: nanobind.nb_func
ProcessModelDirectives: nanobind.nb_func

class AddCollisionFilterGroup:
    ignored_collision_filter_groups: list[str]
    member_groups: list[str]
    members: list[str]
    model_namespace: str | None
    name: str
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> AddCollisionFilterGroup: ...
    def __deepcopy__(self, arg: dict) -> AddCollisionFilterGroup: ...
    @property
    def __fields__(self): ...

class AddDirectives:
    file: str
    model_namespace: str | None
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> AddDirectives: ...
    def __deepcopy__(self, arg: dict) -> AddDirectives: ...
    @property
    def __fields__(self): ...

class AddFrame:
    X_PF: pydrake.common.schema.Transform
    name: str
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> AddFrame: ...
    def __deepcopy__(self, arg: dict) -> AddFrame: ...
    @property
    def __fields__(self): ...

class AddModel:
    default_free_body_pose: dict[str, pydrake.common.schema.Transform]
    default_joint_positions: Incomplete
    file: str
    name: str
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> AddModel: ...
    def __deepcopy__(self, arg: dict) -> AddModel: ...
    @property
    def __fields__(self): ...

class AddModelInstance:
    name: str
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> AddModelInstance: ...
    def __deepcopy__(self, arg: dict) -> AddModelInstance: ...
    @property
    def __fields__(self): ...

class AddWeld:
    X_PC: pydrake.common.schema.Transform | None
    child: str
    parent: str
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> AddWeld: ...
    def __deepcopy__(self, arg: dict) -> AddWeld: ...
    @property
    def __fields__(self): ...

class CollisionFilterGroups:
    def __init__(self) -> None: ...
    def AddExclusionPair(self, pair: tuple[str, str]) -> None: ...
    def AddGroup(self, name: str, members: collections.abc.Set[str]) -> None: ...
    def empty(self) -> bool: ...
    def exclusion_pairs(self) -> set[tuple[str, str]]: ...
    def groups(self) -> dict[str, set[str]]: ...

class ModelDirective:
    add_collision_filter_group: Incomplete
    add_directives: Incomplete
    add_frame: Incomplete
    add_model: Incomplete
    add_model_instance: Incomplete
    add_weld: Incomplete
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> ModelDirective: ...
    def __deepcopy__(self, arg: dict) -> ModelDirective: ...
    @property
    def __fields__(self): ...

class ModelDirectives:
    directives: Incomplete
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> ModelDirectives: ...
    def __deepcopy__(self, arg: dict) -> ModelDirectives: ...
    @property
    def __fields__(self): ...

class ModelInstanceInfo:
    def __init__(self, *args, **kwargs) -> None: ...
    @property
    def X_PC(self): ...
    @property
    def child_frame_name(self) -> str: ...
    @property
    def model_instance(self): ...
    @property
    def model_name(self) -> str: ...
    @property
    def model_path(self) -> str: ...
    @property
    def parent_frame_name(self) -> str: ...

class PackageMap:
    class RemoteParams:
        archive_type: Incomplete
        sha256: str
        strip_prefix: Incomplete
        urls: list[str]
        def __init__(self, **kwargs) -> None: ...
        def ToJson(self) -> str: ...
        def __copy__(self) -> PackageMap.RemoteParams: ...
        def __deepcopy__(self, arg: dict) -> PackageMap.RemoteParams: ...
        @property
        def __fields__(self): ...
    MakeEmpty: ClassVar[nanobind.nb_func] = ...
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, other: PackageMap) -> None: ...
    def Add(self, package_name: str, package_path: str | os.PathLike) -> None: ...
    def AddMap(self, other_map: PackageMap) -> None: ...
    def AddPackageXml(self, filename: str | os.PathLike) -> None: ...
    def AddRemote(self, package_name: str, params: PackageMap.RemoteParams) -> None: ...
    def Contains(self, package_name: str) -> bool: ...
    def GetPackageNames(self) -> list[str]: ...
    def GetPath(self, package_name: str) -> str: ...
    def PopulateFromEnvironment(self, environment_variable: str) -> None: ...
    def PopulateFromFolder(self, path: str | os.PathLike) -> None: ...
    def PopulateFromRosPackagePath(self) -> None: ...
    def Remove(self, package_name: str) -> None: ...
    def ResolveUrl(self, url: str) -> str: ...
    def size(self) -> int: ...
    def __copy__(self) -> PackageMap: ...
    def __deepcopy__(self, arg: dict) -> PackageMap: ...

class Parser:
    @overload
    def __init__(self, plant: pydrake.multibody.plant.MultibodyPlant, scene_graph: pydrake.geometry.SceneGraph | None = ..., model_name_prefix: str = ...) -> None: ...
    @overload
    def __init__(self, plant: pydrake.multibody.plant.MultibodyPlant, model_name_prefix: str) -> None: ...
    @overload
    def __init__(self, builder: pydrake.systems.framework.DiagramBuilder | None, plant: pydrake.multibody.plant.MultibodyPlant | None = ..., scene_graph: pydrake.geometry.SceneGraph | None = ..., model_name_prefix: str = ...) -> None: ...
    @overload
    def AddModels(self, file_name: str | os.PathLike) -> list[pydrake.multibody.tree.ModelInstanceIndex]: ...
    @overload
    def AddModels(self, url: str) -> list[pydrake.multibody.tree.ModelInstanceIndex]: ...
    def AddModelsFromString(self, file_contents: str, file_type: str) -> list[pydrake.multibody.tree.ModelInstanceIndex]: ...
    def AddModelsFromUrl(self, url: str) -> list[pydrake.multibody.tree.ModelInstanceIndex]: ...
    def GetAutoRenaming(self) -> bool: ...
    def GetCollisionFilterGroups(self) -> CollisionFilterGroups: ...
    def SetAutoRenaming(self, value: bool) -> None: ...
    def SetStrictParsing(self) -> None: ...
    def builder(self) -> pydrake.systems.framework.DiagramBuilder: ...
    def package_map(self) -> PackageMap: ...
    def plant(self) -> pydrake.multibody.plant.MultibodyPlant: ...
    def scene_graph(self) -> pydrake.geometry.SceneGraph: ...
