# Auto-generated type stubs for ucon.dimension
# Generated by: scripts/generate_dimension_stubs.py
# Regenerate with: make stubs
# DO NOT EDIT MANUALLY

from dataclasses import dataclass
from fractions import Fraction
from typing import ClassVar

from ucon.basis import Basis, BasisTransform, Vector


# Registry and resolution
def resolve(vector: Vector) -> Dimension: ...
def basis() -> tuple[Dimension, ...]: ...
def all_dimensions() -> tuple[Dimension, ...]: ...

@dataclass(frozen=True)
class Dimension:
    """A physical dimension represented by an exponent vector over a basis."""

    vector: Vector
    name: str | None = None
    symbol: str | None = None
    tag: str | None = None

    # Class attributes for IDE completion (from _DIMENSION_ATTRS)
    acceleration: ClassVar[Dimension]
    amount_of_substance: ClassVar[Dimension]
    angle: ClassVar[Dimension]
    angular_momentum: ClassVar[Dimension]
    area: ClassVar[Dimension]
    capacitance: ClassVar[Dimension]
    catalytic_activity: ClassVar[Dimension]
    charge: ClassVar[Dimension]
    conductance: ClassVar[Dimension]
    conductivity: ClassVar[Dimension]
    count: ClassVar[Dimension]
    current: ClassVar[Dimension]
    density: ClassVar[Dimension]
    dynamic_viscosity: ClassVar[Dimension]
    electric_field_strength: ClassVar[Dimension]
    energy: ClassVar[Dimension]
    entropy: ClassVar[Dimension]
    force: ClassVar[Dimension]
    frequency: ClassVar[Dimension]
    gravitation: ClassVar[Dimension]
    illuminance: ClassVar[Dimension]
    inductance: ClassVar[Dimension]
    information: ClassVar[Dimension]
    kinematic_viscosity: ClassVar[Dimension]
    length: ClassVar[Dimension]
    luminous_intensity: ClassVar[Dimension]
    magnetic_flux: ClassVar[Dimension]
    magnetic_flux_density: ClassVar[Dimension]
    magnetic_permeability: ClassVar[Dimension]
    mass: ClassVar[Dimension]
    molar_mass: ClassVar[Dimension]
    molar_volume: ClassVar[Dimension]
    momentum: ClassVar[Dimension]
    none: ClassVar[Dimension]
    permittivity: ClassVar[Dimension]
    power: ClassVar[Dimension]
    pressure: ClassVar[Dimension]
    ratio: ClassVar[Dimension]
    resistance: ClassVar[Dimension]
    resistivity: ClassVar[Dimension]
    solid_angle: ClassVar[Dimension]
    specific_heat_capacity: ClassVar[Dimension]
    temperature: ClassVar[Dimension]
    thermal_conductivity: ClassVar[Dimension]
    time: ClassVar[Dimension]
    velocity: ClassVar[Dimension]
    voltage: ClassVar[Dimension]
    volume: ClassVar[Dimension]

    @classmethod
    def from_components(
        cls,
        basis: Basis | None = None,
        *,
        name: str | None = None,
        symbol: str | None = None,
        **components: int | float | Fraction,
    ) -> Dimension: ...

    @classmethod
    def pseudo(
        cls,
        tag: str,
        *,
        name: str | None = None,
        symbol: str | None = None,
        basis: Basis | None = None,
    ) -> Dimension: ...

    def in_basis(self, transform: BasisTransform) -> Dimension: ...

    @property
    def basis(self) -> Basis: ...
    @property
    def value(self) -> Vector: ...
    @property
    def is_pseudo(self) -> bool: ...
    @property
    def is_dimensionless(self) -> bool: ...

    def is_base(self) -> bool: ...
    def base_expansion(self) -> dict[Dimension, Fraction]: ...

    def __mul__(self, other: Dimension) -> Dimension: ...
    def __truediv__(self, other: Dimension) -> Dimension: ...
    def __pow__(self, power: int | float | Fraction) -> Dimension: ...
    def __eq__(self, other: object) -> bool: ...
    def __hash__(self) -> int: ...
    def __bool__(self) -> bool: ...
    def __repr__(self) -> str: ...

# Module constants
SI: Basis
NONE: Dimension
TIME: Dimension
LENGTH: Dimension
MASS: Dimension
CURRENT: Dimension
TEMPERATURE: Dimension
LUMINOUS_INTENSITY: Dimension
AMOUNT_OF_SUBSTANCE: Dimension
INFORMATION: Dimension
ANGLE: Dimension
SOLID_ANGLE: Dimension
RATIO: Dimension
COUNT: Dimension
VELOCITY: Dimension
ACCELERATION: Dimension
FORCE: Dimension
ENERGY: Dimension
POWER: Dimension
MOMENTUM: Dimension
ANGULAR_MOMENTUM: Dimension
AREA: Dimension
VOLUME: Dimension
DENSITY: Dimension
PRESSURE: Dimension
FREQUENCY: Dimension
DYNAMIC_VISCOSITY: Dimension
KINEMATIC_VISCOSITY: Dimension
GRAVITATION: Dimension
CHARGE: Dimension
VOLTAGE: Dimension
RESISTANCE: Dimension
RESISTIVITY: Dimension
CONDUCTANCE: Dimension
CONDUCTIVITY: Dimension
CAPACITANCE: Dimension
INDUCTANCE: Dimension
MAGNETIC_FLUX: Dimension
MAGNETIC_FLUX_DENSITY: Dimension
MAGNETIC_PERMEABILITY: Dimension
PERMITTIVITY: Dimension
ELECTRIC_FIELD_STRENGTH: Dimension
ENTROPY: Dimension
SPECIFIC_HEAT_CAPACITY: Dimension
THERMAL_CONDUCTIVITY: Dimension
ILLUMINANCE: Dimension
CATALYTIC_ACTIVITY: Dimension
MOLAR_MASS: Dimension
MOLAR_VOLUME: Dimension
