import collections.abc as collections
import typing

from _typeshed import Incomplete
from typing_extensions import Self

@typing.final
class MaybeUninit[T]:
    __slots__: Incomplete
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, value: T) -> None: ...
    @classmethod
    def uninit(cls) -> Self: ...
    @classmethod
    def uninit_array(cls, n: int) -> collections.Sequence[Self]: ...
    def assume_init(self) -> T: ...
    @staticmethod
    def array_assume_init[I](  # need a separate type to satisfy the type checker
        array: collections.Sequence[MaybeUninit[I]],
    ) -> collections.Sequence[I]: ...
    @staticmethod
    def array_assume_init_mut[I](
        array: collections.Sequence[MaybeUninit[I]],
    ) -> collections.MutableSequence[I]: ...
    def write(self, value: T) -> T: ...
    def __repr__(self) -> str: ...
    def __str__(self) -> str: ...
    def __bool__(self) -> bool: ...
    def __eq__(self, value: object) -> bool: ...
    def __ne__(self, value: object) -> bool: ...
    def __hash__(self) -> int: ...
