from __future__ import annotations

from typing import Any, Optional

from typing_extensions import Literal

from ..._typing import Tensor
from ...tensor.math import tanh as tanh
from ...tensor.math import tanh_ as tanh_

def celu(x: Tensor, alpha: float = ..., name: Optional[str] = ...) -> Tensor: ...
def elu(x: Tensor, alpha: float = ..., name: Optional[str] = ...) -> Tensor: ...
def elu_(x: Tensor, alpha: float = ..., name: Optional[str] = ...) -> Tensor: ...
def gelu(x: Tensor, approximate: bool = ..., name: Optional[str] = ...) -> Tensor: ...
def hardshrink(x: Tensor, threshold: float = ..., name: Optional[str] = ...) -> Tensor: ...
def hardtanh(x: Tensor, min: float = ..., max: float = ..., name: Optional[str] = ...) -> Tensor: ...
def hardsigmoid(x: Tensor, slope: float = ..., offset: float = ..., name: Optional[str] = ...) -> Tensor: ...
def hardswish(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
def leaky_relu(x: Tensor, negative_slope: float = ..., name: Optional[str] = ...) -> Tensor: ...
def prelu(
    x: Tensor,
    weight: Tensor,
    data_format: Literal["NC", "NCL", "NCHW", "NCDHW", "NLC", "NHWC", "NDHWC"] = ...,
    name: Optional[str] = ...,
) -> Tensor: ...
def relu(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
def relu_(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
def log_sigmoid(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
def maxout(x: Tensor, groups: Any, axis: int = ..., name: Optional[str] = ...) -> Tensor: ...
def relu6(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
def selu(x: Tensor, scale: float = ..., alpha: float = ..., name: Optional[str] = ...) -> Tensor: ...
def silu(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
def softmax(x: Tensor, axis: int = ..., dtype: Optional[Any] = ..., name: Optional[str] = ...) -> Tensor: ...
def softmax_(x: Tensor, axis: int = ..., dtype: Optional[Any] = ..., name: Optional[str] = ...) -> Tensor: ...
def softplus(x: Tensor, beta: int = ..., threshold: int = ..., name: Optional[str] = ...) -> Tensor: ...
def softshrink(x: Tensor, threshold: float = ..., name: Optional[str] = ...) -> Tensor: ...
def softsign(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
def swish(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
def mish(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
def tanhshrink(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
def thresholded_relu(x: Tensor, threshold: float = ..., name: Optional[str] = ...) -> Tensor: ...
def log_softmax(x: Any, axis: int = ..., dtype: Optional[Any] = ..., name: Optional[str] = ...) -> Tensor: ...
def glu(x: Tensor, axis: int = ..., name: Optional[str] = ...) -> Tensor: ...
def gumbel_softmax(
    x: Tensor, temperature: float = ..., hard: bool = ..., axis: int = ..., name: Optional[str] = ...
) -> Tensor: ...
def sigmoid(x: Tensor, name: Optional[str] = ...) -> Tensor: ...
