import maya.OpenMayaMPx as mpx
from pymel.util.py2to3 import RePattern as RePattern
from typing import Any, Optional

class PluginError(Exception): ...
class PluginRegistryError(PluginError): ...
class AlreadyRegisteredError(PluginRegistryError): ...
class NotRegisteredError(PluginRegistryError): ...

mpxNamesToEnumNames: Any
mpxNamesToApiEnumNames: Any
mpxNamesToMayaNodes: Any
mayaNodesToMpxNames: Any
existingMpxName: Any
msg: Any
mpxClassesToMpxEnums: Any
missingMPx: Any
pluginMayaTypes: Any
NON_CREATABLE: Any

def enumToStr(): ...
def allMPx(): ...

registered: Any
pyNodeMethods: Any

def initializePlugin(mobject: Any) -> None: ...
def uninitializePlugin(mobject: Any) -> None: ...

class BasePluginMixin:
    @classmethod
    def mayaName(cls): ...
    @classmethod
    def getTypeId(cls, nodeName: Optional[Any] = ...): ...
    @classmethod
    def create(cls): ...
    @classmethod
    def register(cls, plugin: Optional[Any] = ...) -> None: ...
    @classmethod
    def deregister(cls, plugin: Optional[Any] = ...) -> None: ...
    @classmethod
    def isRegistered(cls): ...

class Command(BasePluginMixin, mpx.MPxCommand):
    @classmethod
    def createSyntax(cls): ...

class TransformationMatrix(BasePluginMixin, mpx.MPxTransformationMatrix):
    @classmethod
    def register(cls, plugin: Optional[Any] = ...) -> None: ...
    @classmethod
    def deregister(cls, plugin: Optional[Any] = ...) -> None: ...

class FileTranslator(BasePluginMixin, mpx.MPxFileTranslator):
    def filter(self): ...
    def defaultExtension(self): ...
    def identifyFile(self, mfile: Any, buffer: Any, size: Any): ...

class DependNode(BasePluginMixin, mpx.MPxNode):
    @classmethod
    def getMpxType(cls): ...
    @classmethod
    def getTypeEnum(cls): ...
    @classmethod
    def initialize(cls) -> None: ...
    @classmethod
    def isAbstractClass(cls): ...

class Assembly(DependNode, mpx.MPxAssembly): ...
class BlendShape(DependNode, mpx.MPxBlendShape): ...
class CameraSet(DependNode, mpx.MPxCameraSet): ...
class Constraint(DependNode, mpx.MPxConstraint): ...
class DeformerNode(DependNode, mpx.MPxDeformerNode): ...
class EmitterNode(DependNode, mpx.MPxEmitterNode): ...
class FluidEmitterNode(EmitterNode, mpx.MPxFluidEmitterNode): ...
class FieldNode(DependNode, mpx.MPxFieldNode): ...
class GeometryFilter(DependNode, mpx.MPxGeometryFilter): ...
class HardwareShader(DependNode, mpx.MPxHardwareShader): ...
class HwShaderNode(DependNode, mpx.MPxHwShaderNode): ...
class IkSolverNode(DependNode, mpx.MPxIkSolverNode): ...
class ImagePlane(DependNode, mpx.MPxImagePlane): ...
class LocatorNode(DependNode, mpx.MPxLocatorNode): ...
class ManipContainer(DependNode, mpx.MPxManipContainer): ...
class ManipulatorNode(DependNode, mpx.MPxManipulatorNode): ...
class MotionPathNode(DependNode, mpx.MPxMotionPathNode): ...
class ObjectSet(DependNode, mpx.MPxObjectSet): ...
class ParticleAttributeMapperNode(DependNode, mpx.MPxParticleAttributeMapperNode): ...
class PolyTrg(DependNode, mpx.MPxPolyTrg): ...
class SpringNode(DependNode, mpx.MPxSpringNode): ...
class SkinCluster(DependNode, mpx.MPxSkinCluster): ...
class SurfaceShape(DependNode, mpx.MPxSurfaceShape): ...
class ComponentShape(SurfaceShape, mpx.MPxComponentShape): ...
class Transform(DependNode, mpx.MPxTransform): ...

class PyNodeMethod:
    func: Any = ...
    name: Any = ...
    def __init__(self, func: Any, name: Optional[Any] = ...) -> None: ...

class _DummyPluginNodesMaker:
    dummyClasses: Any = ...
    toUnregister: Any = ...
    nodes: Any = ...
    alreadyCreated: Any = ...
    toDelete: Any = ...
    def __init__(self, dummyClasses: Optional[Any] = ..., alreadyCreated: Optional[Any] = ...) -> None: ...
    def __enter__(self): ...
    def __exit__(self, type: Any, value: Any, traceback: Any) -> None: ...

def filterPlugins(plugins: Iterable[str], filters: Iterable[Union[str, RePattern, Callable[[str], bool]]]) -> [str]: ...
def mayaPlugins(filters: Iterable[Union[str, RePattern, Callable[[str], bool]]]=..., loaded: Optional[bool]=...) -> [str]: ...
def loadAllMayaPlugins(filters: Iterable[Union[str, RePattern, Callable[[str], bool]]]=...) -> None: ...
def unloadAllPlugins(skipErrors: bool = ..., exclude: Any = ...) -> None: ...

UNREPORTED_COMMANDS: Any

def pluginCommands(pluginName: Any, reportedOnly: bool = ...): ...
