from __future__ import annotations

from typing import Any, Optional

__version__: str
__author__: str

# timing
def time() -> float: ...
def sleep(seconds: float) -> float: ...
def elapsed(time1: float, time2: Optional[float] = ...) -> float: ...
class Sktimer: ...
class TimeThis: ...
def timethis(*args: Any, **kwargs: Any) -> Any: ...
def clear_global_timers() -> None: ...

# paths
class Skpath: ...
AnyPath = Any
def autopath(*args: Any, **kwargs: Any) -> Any: ...
class PathDetectionError(Exception): ...
class NotAFileError(IsADirectoryError): ...
class CustomRoot: ...
def set_custom_root(path: Any) -> None: ...
def get_custom_root() -> Any: ...
def clear_custom_root() -> None: ...
def get_project_root() -> Any: ...
def get_caller_path(*args: Any, **kwargs: Any) -> Any: ...
def get_current_dir() -> Any: ...
def get_cwd() -> Any: ...
def get_module_path(*args: Any, **kwargs: Any) -> Any: ...
def get_id(*args: Any, **kwargs: Any) -> Any: ...
def get_project_paths(*args: Any, **kwargs: Any) -> Any: ...
def get_project_structure(*args: Any, **kwargs: Any) -> Any: ...
def get_formatted_project_tree(*args: Any, **kwargs: Any) -> Any: ...
def is_valid_filename(*args: Any, **kwargs: Any) -> bool: ...
def streamline_path(*args: Any, **kwargs: Any) -> Any: ...

# circuits
class Circuit: ...
class BreakingCircuit: ...

# cucumber
def serialize(obj: Any, *args: Any, **kwargs: Any) -> Any: ...
def serialize_ir(obj: Any, *args: Any, **kwargs: Any) -> Any: ...
def deserialize(data: Any, *args: Any, **kwargs: Any) -> Any: ...
def reconnect_all(obj: Any, **kwargs: Any) -> Any: ...
def ir_to_jsonable(ir: Any) -> Any: ...
def ir_to_json(ir: Any) -> str: ...
def to_jsonable(obj: Any) -> Any: ...
def to_json(obj: Any) -> str: ...
class SerializationError(Exception): ...
class DeserializationError(Exception): ...

# processing
class Skprocess: ...
class Pool: ...
class Share: ...
class Pipe: ...
class ProcessTimers: ...
def autoreconnect(*args: Any, **kwargs: Any) -> Any: ...
class ProcessError(Exception): ...
class PreRunError(ProcessError): ...
class RunError(ProcessError): ...
class PostRunError(ProcessError): ...
class OnFinishError(ProcessError): ...
class ResultError(ProcessError): ...
class ErrorHandlerError(ProcessError): ...
class ProcessTimeoutError(ProcessError): ...
class ResultTimeoutError(ProcessError): ...

# sk
def sk(*args: Any, **kwargs: Any) -> Any: ...
def blocking(func: Any) -> Any: ...
class SkModifierError(Exception): ...
class FunctionTimeoutError(Exception): ...

__all__: list[str]
