import abc from collections.abc import Callable, Mapping, Sequence from threading import Lock from typing import Any, ClassVar, Literal, NamedTuple, TypeAlias, TypedDict, overload, type_check_only from _typeshed import Incomplete from typing_extensions import CapsuleType, Self import numpy as np from numpy._typing import NDArray, _ArrayLikeInt_co, _DTypeLike, _ShapeLike, _UInt32Codes, _UInt64Codes __all__ = ["BitGenerator", "SeedSequence"] ### _DTypeLikeUint_: TypeAlias = _DTypeLike[np.uint32 | np.uint64] | _UInt32Codes | _UInt64Codes @type_check_only class _SeedSeqState(TypedDict): entropy: int | Sequence[int] | None spawn_key: tuple[int, ...] pool_size: int n_children_spawned: int @type_check_only class _Interface(NamedTuple): state_address: Incomplete state: Incomplete next_uint64: Incomplete next_uint32: Incomplete next_double: Incomplete bit_generator: Incomplete @type_check_only class _CythonMixin: def __setstate_cython__(self, pyx_state: object, /) -> None: ... def __reduce_cython__(self) -> Any: ... # noqa: ANN401 @type_check_only class _GenerateStateMixin(_CythonMixin): def generate_state(self, /, n_words: int, dtype: _DTypeLikeUint_ = ...) -> NDArray[np.uint32 | np.uint64]: ... ### class ISeedSequence(abc.ABC): @abc.abstractmethod def generate_state(self, /, n_words: int, dtype: _DTypeLikeUint_ = ...) -> NDArray[np.uint32 | np.uint64]: ... class ISpawnableSeedSequence(ISeedSequence, abc.ABC): @abc.abstractmethod def spawn(self, /, n_children: int) -> list[Self]: ... class SeedlessSeedSequence(_GenerateStateMixin, ISpawnableSeedSequence): def spawn(self, /, n_children: int) -> list[Self]: ... class SeedSequence(_GenerateStateMixin, ISpawnableSeedSequence): __pyx_vtable__: ClassVar[CapsuleType] = ... entropy: int | Sequence[int] | None spawn_key: tuple[int, ...] pool_size: int n_children_spawned: int pool: NDArray[np.uint32] def __init__( self, /, entropy: _ArrayLikeInt_co | None = None, *, spawn_key: Sequence[int] = (), pool_size: int = 4, n_children_spawned: int = ..., ) -> None: ... def spawn(self, /, n_children: int) -> list[Self]: ... @property def state(self) -> _SeedSeqState: ... class BitGenerator(_CythonMixin, abc.ABC): lock: Lock @property def state(self) -> Mapping[str, Any]: ... @state.setter def state(self, value: Mapping[str, Any], /) -> None: ... @property def seed_seq(self) -> ISeedSequence: ... @property def ctypes(self) -> _Interface: ... @property def cffi(self) -> _Interface: ... @property def capsule(self) -> CapsuleType: ... # def __init__(self, /, seed: _ArrayLikeInt_co | SeedSequence | None = None) -> None: ... def __reduce__(self) -> tuple[Callable[[str], Self], tuple[str], tuple[Mapping[str, Any], ISeedSequence]]: ... def spawn(self, /, n_children: int) -> list[Self]: ... def _benchmark(self, /, cnt: int, method: str = "uint64") -> None: ... # @overload def random_raw(self, /, size: None = None, output: Literal[True] = True) -> int: ... @overload def random_raw(self, /, size: _ShapeLike, output: Literal[True] = True) -> NDArray[np.uint64]: ... @overload def random_raw(self, /, size: _ShapeLike | None, output: Literal[False]) -> None: ... @overload def random_raw(self, /, size: _ShapeLike | None = None, *, output: Literal[False]) -> None: ...