# Licensed under a 3-clause BSD style license, see LICENSE.

# Convenient access to the version number
from typing import List

from . import constants, units
from ._version import version as __version__
from .constants.constants import (
    Avogadro,
    c_light,
    c_light_sq,
    e_sq,
    eminus,
    h_Planck,
    half_pi,
    hbar,
    hbar_Planck,
    hbarc,
    hbarc_sq,
    k_Boltzmann,
    pi,
    pi_sq,
    two_pi,
)
from .units.prefixes import (
    atto,
    centi,
    deca,
    deci,
    exa,
    exbi,
    femto,
    gibi,
    giga,
    googol,
    hecto,
    kibi,
    kilo,
    mebi,
    mega,
    micro,
    milli,
    nano,
    pebi,
    peta,
    pico,
    quecto,
    quetta,
    ronna,
    ronto,
    tebi,
    tera,
    yobi,
    yocto,
    yotta,
    zebi,
    zepto,
    zetta,
)
from .units.units import (
    GJ,
    GW,
    MJ,
    MV,
    MW,
    A,
    Bq,
    C,
    Ci,
    EeV,
    F,
    G,
    GBq,
    GeV,
    GHz,
    Gs,
    Gy,
    H,
    Hz,
    J,
    K,
    MBq,
    MeV,
    MGy,
    MHz,
    N,
    Pa,
    PeV,
    Qg,
    Rg,
    Sv,
    T,
    TeV,
    THz,
    V,
    W,
    Wb,
    ZeV,
    ab,
    ampere,
    angstrom,
    atm,
    atmosphere,
    attobarn,
    attosecond,
    bar,
    barn,
    becquerel,
    candela,
    cd,
    centimeter,
    centimeter2,
    centimeter3,
    cm,
    cm2,
    cm3,
    coulomb,
    curie,
    d,
    day,
    deg,
    degree,
    dyne,
    e_SI,
    electronvolt,
    electronvolt2,
    eplus,
    erg,
    eV,
    eV2,
    exaelectronvolt,
    farad,
    fb,
    femtobarn,
    femtometer,
    femtosecond,
    fermi,
    fm,
    fm2,
    fm3,
    fs,
    g,
    gauss,
    gigabecquerel,
    gigaelectronvolt,
    gigahertz,
    gigajoule,
    gigawatt,
    gram,
    gray,
    h,
    henry,
    hertz,
    hour,
    invab,
    invfb,
    invmb,
    invnb,
    invpb,
    invub,
    joule,
    kBq,
    kelvin,
    keV,
    kG,
    kg,
    kGs,
    kGy,
    kHz,
    kilobecquerel,
    kiloelectronvolt,
    kilogauss,
    kilogram,
    kilogray,
    kilohertz,
    kilojoule,
    kilometer,
    kilometer2,
    kilometer3,
    kilovolt,
    kilowatt,
    kJ,
    km,
    km2,
    km3,
    kV,
    kW,
    lm,
    lumen,
    lux,
    lx,
    m,
    m2,
    m3,
    mA,
    mb,
    mbar,
    mCi,
    megabecquerel,
    megaelectronvolt,
    megagray,
    megahertz,
    megajoule,
    megavolt,
    megawatt,
    meter,
    meter2,
    meter3,
    mF,
    mg,
    mGy,
    microampere,
    microbarn,
    microcurie,
    microfarad,
    microgray,
    micrometer,
    micron,
    microsecond,
    microweber,
    milliampere,
    millibar,
    millibarn,
    millicurie,
    millifarad,
    milligram,
    milligray,
    millimeter,
    millimeter2,
    millimeter3,
    milliradian,
    millisecond,
    milliweber,
    minute,
    mm,
    mm2,
    mm3,
    mol,
    mole,
    mrad,
    ms,
    mWb,
    nA,
    nanoampere,
    nanobarn,
    nanocurie,
    nanofarad,
    nanometer,
    nanosecond,
    nanoweber,
    nb,
    nCi,
    newton,
    nF,
    ns,
    nWb,
    ohm,
    pascal,
    pb,
    petaelectronvolt,
    pF,
    picobarn,
    picofarad,
    picosecond,
    ps,
    quettagram,
    rad,
    radian,
    rg,
    ronnagram,
    rontogram,
    s,
    second,
    sievert,
    sr,
    steradian,
    teraelectronvolt,
    terahertz,
    tesla,
    uA,
    ub,
    uCi,
    uF,
    uGy,
    us,
    uWb,
    volt,
    watt,
    weber,
    y,
    year,
    yoctosecond,
    ys,
    zeptosecond,
    zettaelectronvolt,
    zs,
)

# Units and constants directly available


__all__ = (
    "GJ",
    "GW",
    "MJ",
    "MV",
    "MW",
    "A",
    "Avogadro",
    "Bq",
    "C",
    "Ci",
    "EeV",
    "F",
    "G",
    "GBq",
    "GHz",
    "GeV",
    "Gs",
    "Gy",
    "H",
    "Hz",
    "J",
    "K",
    "MBq",
    "MGy",
    "MHz",
    "MeV",
    "N",
    "Pa",
    "PeV",
    "Qg",
    "Rg",
    "Sv",
    "T",
    "THz",
    "TeV",
    "V",
    "W",
    "Wb",
    "ZeV",
    "__version__",
    "ab",
    "ampere",
    "angstrom",
    "atm",
    "atmosphere",
    "atto",
    "attobarn",
    "attosecond",
    "bar",
    "barn",
    "becquerel",
    "c_light",
    "c_light_sq",
    "candela",
    "cd",
    "centi",
    "centimeter",
    "centimeter2",
    "centimeter3",
    "cm",
    "cm2",
    "cm3",
    "constants",
    "coulomb",
    "curie",
    "d",
    "day",
    "deca",
    "deci",
    "deg",
    "degree",
    "dyne",
    "eV",
    "eV2",
    "e_SI",
    "e_sq",
    "electronvolt",
    "electronvolt2",
    "eminus",
    "eplus",
    "eplus",
    "erg",
    "exa",
    "exaelectronvolt",
    "exbi",
    "farad",
    "fb",
    "femto",
    "femtobarn",
    "femtometer",
    "femtosecond",
    "fermi",
    "fm",
    "fm2",
    "fm3",
    "fs",
    "g",
    "gauss",
    "gibi",
    "giga",
    "gigabecquerel",
    "gigaelectronvolt",
    "gigahertz",
    "gigajoule",
    "gigawatt",
    "googol",
    "gram",
    "gray",
    "h",
    "h_Planck",
    "half_pi",
    "hbar",
    "hbar_Planck",
    "hbarc",
    "hbarc_sq",
    "hecto",
    "henry",
    "hertz",
    "hour",
    "invab",
    "invfb",
    "invmb",
    "invnb",
    "invpb",
    "invub",
    "joule",
    "joule",
    "kBq",
    "kG",
    "kGs",
    "kGy",
    "kHz",
    "kJ",
    "kV",
    "kW",
    "k_Boltzmann",
    "keV",
    "kelvin",
    "kelvin",
    "kg",
    "kibi",
    "kilo",
    "kilobecquerel",
    "kiloelectronvolt",
    "kilogauss",
    "kilogram",
    "kilogray",
    "kilohertz",
    "kilojoule",
    "kilometer",
    "kilometer2",
    "kilometer3",
    "kilovolt",
    "kilowatt",
    "km",
    "km2",
    "km3",
    "lm",
    "lumen",
    "lux",
    "lx",
    "m",
    "m",
    "m2",
    "m3",
    "mA",
    "mCi",
    "mF",
    "mGy",
    "mWb",
    "mb",
    "mbar",
    "mebi",
    "mega",
    "megabecquerel",
    "megaelectronvolt",
    "megagray",
    "megahertz",
    "megajoule",
    "megavolt",
    "megawatt",
    "meter",
    "meter2",
    "meter3",
    "mg",
    "micro",
    "microampere",
    "microbarn",
    "microcurie",
    "microfarad",
    "microgray",
    "micrometer",
    "micron",
    "microsecond",
    "microweber",
    "milli",
    "milliampere",
    "millibar",
    "millibarn",
    "millicurie",
    "millifarad",
    "milligram",
    "milligray",
    "millimeter",
    "millimeter2",
    "millimeter3",
    "milliradian",
    "millisecond",
    "milliweber",
    "minute",
    "mm",
    "mm2",
    "mm3",
    "mol",
    "mole",
    "mole",
    "mrad",
    "ms",
    "nA",
    "nCi",
    "nF",
    "nWb",
    "nano",
    "nanoampere",
    "nanobarn",
    "nanocurie",
    "nanofarad",
    "nanometer",
    "nanosecond",
    "nanoweber",
    "nb",
    "newton",
    "ns",
    "ohm",
    "pF",
    "pascal",
    "pb",
    "pebi",
    "peta",
    "petaelectronvolt",
    "pi",
    "pi_sq",
    "pico",
    "picobarn",
    "picofarad",
    "picosecond",
    "ps",
    "quecto",
    "quetta",
    "quettagram",
    "rad",
    "radian",
    "rg",
    "ronna",
    "ronnagram",
    "ronto",
    "rontogram",
    "s",
    "s",
    "second",
    "sievert",
    "sr",
    "steradian",
    "tebi",
    "tera",
    "teraelectronvolt",
    "terahertz",
    "tesla",
    "two_pi",
    "uA",
    "uCi",
    "uF",
    "uGy",
    "uWb",
    "ub",
    "units",
    "us",
    "volt",
    "watt",
    "weber",
    "y",
    "year",
    "yobi",
    "yocto",
    "yoctosecond",
    "yotta",
    "ys",
    "zebi",
    "zepto",
    "zeptosecond",
    "zetta",
    "zettaelectronvolt",
    "zs",
)


def __dir__() -> List[str]:
    return list(__all__)
