from __future__ import annotations

from typing import Any, Optional

from .. import Tensor
from .._typing import DTypeLike, ShapeLike
from ..fluid.data_feeder import check_dtype as check_dtype
from ..fluid.data_feeder import check_shape as check_shape
from ..fluid.data_feeder import check_type as check_type
from ..fluid.data_feeder import check_variable_and_dtype as check_variable_and_dtype
from ..fluid.layer_helper import LayerHelper as LayerHelper
from ..fluid.layers import utils as utils
from ..framework import convert_np_dtype_to_dtype_ as convert_np_dtype_to_dtype_
from ..framework import core as core
from ..framework import dygraph_only as dygraph_only

def bernoulli(x: Any, name: Optional[Any] = ...): ...
def poisson(x: Any, name: Optional[Any] = ...): ...
def multinomial(x: Any, num_samples: int = ..., replacement: bool = ..., name: Optional[Any] = ...): ...
def gaussian(
    shape: Any, mean: float = ..., std: float = ..., dtype: Optional[Any] = ..., name: Optional[Any] = ...
): ...
def standard_normal(shape: Any, dtype: Optional[Any] = ..., name: Optional[Any] = ...): ...
def randn(
    shape: Any,
    dtype: Optional[DTypeLike] = ...,
    name: Optional[Any] = ...,
) -> Tensor: ...
def normal(mean: float = ..., std: float = ..., shape: Optional[Any] = ..., name: Optional[Any] = ...): ...
def uniform(
    shape: Any, dtype: Optional[Any] = ..., min: Any = ..., max: float = ..., seed: int = ..., name: Optional[Any] = ...
): ...
def uniform_(x: Any, min: Any = ..., max: float = ..., seed: int = ..., name: Optional[Any] = ...): ...
def randint(
    low: int = ..., high: Optional[Any] = ..., shape: Any = ..., dtype: Optional[Any] = ..., name: Optional[Any] = ...
): ...
def randint_like(
    x: Any, low: int = ..., high: Optional[Any] = ..., dtype: Optional[Any] = ..., name: Optional[Any] = ...
): ...
def randperm(n: Any, dtype: str = ..., name: Optional[Any] = ...): ...
def rand(
    shape: ShapeLike,
    dtype: Optional[DTypeLike] = ...,
    name: Optional[str] = ...,
) -> Tensor: ...
def exponential_(x: Any, lam: float = ..., name: Optional[Any] = ...): ...
