125 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import abc
 | 
						|
from collections.abc import Callable, Mapping, Sequence
 | 
						|
from threading import Lock
 | 
						|
from typing import (
 | 
						|
    Any,
 | 
						|
    ClassVar,
 | 
						|
    Literal,
 | 
						|
    NamedTuple,
 | 
						|
    Self,
 | 
						|
    TypeAlias,
 | 
						|
    TypedDict,
 | 
						|
    overload,
 | 
						|
    type_check_only,
 | 
						|
)
 | 
						|
 | 
						|
from _typeshed import Incomplete
 | 
						|
from typing_extensions import CapsuleType
 | 
						|
 | 
						|
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: ...
 |