from .base import BaseTemplateExtension as BaseTemplateExtension, TemplateFunction as TemplateFunction
from _typeshed import Incomplete
from homeassistant.helpers.template import TemplateEnvironment as TemplateEnvironment
from homeassistant.helpers.template.helpers import raise_no_default as raise_no_default
from typing import Any, Literal

_SENTINEL: Incomplete

class MathExtension(BaseTemplateExtension):
    def __init__(self, environment: TemplateEnvironment) -> None: ...
    @staticmethod
    def logarithm(value: Any, base: Any = ..., default: Any = ...) -> Any: ...
    @staticmethod
    def sine(value: Any, default: Any = ...) -> Any: ...
    @staticmethod
    def cosine(value: Any, default: Any = ...) -> Any: ...
    @staticmethod
    def tangent(value: Any, default: Any = ...) -> Any: ...
    @staticmethod
    def arc_sine(value: Any, default: Any = ...) -> Any: ...
    @staticmethod
    def arc_cosine(value: Any, default: Any = ...) -> Any: ...
    @staticmethod
    def arc_tangent(value: Any, default: Any = ...) -> Any: ...
    @staticmethod
    def arc_tangent2(*args: Any, default: Any = ...) -> Any: ...
    @staticmethod
    def square_root(value: Any, default: Any = ...) -> Any: ...
    @staticmethod
    def average(*args: Any, default: Any = ...) -> Any: ...
    @staticmethod
    def median(*args: Any, default: Any = ...) -> Any: ...
    @staticmethod
    def statistical_mode(*args: Any, default: Any = ...) -> Any: ...
    def min_max_from_filter(self, builtin_filter: Any, name: str) -> Any: ...
    def min_max_min(self, *args: Any, **kwargs: Any) -> Any: ...
    def min_max_max(self, *args: Any, **kwargs: Any) -> Any: ...
    @staticmethod
    def bitwise_and(first_value: Any, second_value: Any) -> Any: ...
    @staticmethod
    def bitwise_or(first_value: Any, second_value: Any) -> Any: ...
    @staticmethod
    def bitwise_xor(first_value: Any, second_value: Any) -> Any: ...
    @staticmethod
    def clamp(value: Any, min_value: Any, max_value: Any) -> Any: ...
    @staticmethod
    def wrap(value: Any, min_value: Any, max_value: Any) -> Any: ...
    @staticmethod
    def remap(value: Any, in_min: Any, in_max: Any, out_min: Any, out_max: Any, *, steps: int = 0, edges: Literal['none', 'clamp', 'wrap', 'mirror'] = 'none') -> Any: ...
