import pprint
from . import plogging as plogging
from _typeshed import Incomplete
from pymel.util import picklezip as picklezip, universalmethod as universalmethod
from typing import Dict, List, NamedTuple, Optional, Tuple, Type

TYPE_CHECKING: bool
PY_CACHE_FORMAT_VERSION: Incomplete

class NoStringWrappingPrettyPrinter(pprint.PrettyPrinter): ...

py_pformat: Incomplete

class CacheFormat(NamedTuple):
    ext: Incomplete
    reader: Incomplete
    writer: Incomplete

class PymelCache:
    NAME: str
    DESC: str
    FORMATS: Incomplete
    EXTENSIONS: Incomplete
    DEFAULT_EXT: str
    USE_VERSION: bool
    def fromRawData(self, rawData): ...
    def toRawData(self, data): ...
    def read(self, path: Incomplete | None = ..., ext: Incomplete | None = ..., ignoreError: bool = ...): ...
    def write(self, data: T, path: Optional[str] = ..., ext: Optional[str] = ..., ignoreError: bool = ...) -> None: ...
    def path(self, version: Optional[str] = ..., ext: Optional[str] = ...) -> str: ...
    @classmethod
    def allVersions(cls, allowEmpty: bool = ...) -> List[str]: ...

class SubItemCache(PymelCache):
    ITEM_TYPES: Dict[str, Type]
    DEFAULT_TYPE: Type
    AUTO_SAVE: bool
    def __init__(self) -> None: ...
    @classmethod
    def cacheNames(cls) -> Tuple[str, ...]: ...
    @classmethod
    def itemType(cls, name: str) -> Type: ...
    @classmethod
    def itemIndex(cls, name: str) -> int: ...
    def initVal(self, name: str) -> None: ...
    def build(self) -> None: ...
    def rebuild(self) -> None: ...
    def update(self, obj, cacheNames: Incomplete | None = ...) -> None: ...
    def load(self) -> T: ...
    def save(self, obj: Incomplete | None = ..., ext: Incomplete | None = ...) -> None: ...
    def contents(self) -> T: ...
