/*
Copyright (c) 2019-2025,
Lawrence Livermore National Security, LLC;
See the top-level NOTICE for additional details. All rights reserved.
SPDX-License-Identifier: BSD-3-Clause
*/
#pragma once

#include "units.hpp"
#include <array>
#include <limits>
#include <utility>

namespace UNITS_NAMESPACE {

UNITS_CPP14_CONSTEXPR_OBJECT std::array<std::pair<unit, const char*>, 113>
    defined_unit_names_si{
        {{m, "m"},
         {m * m, "m^2"},
         {m * m * m, "m^3"},
         {kg, "kg"},
         {mol, "mol"},
         {unit(0.1, m), "dm"},  // don't want to use deci in most conversion
                                // contexts but for meter and liter it is fine
         {unit(0.1, L), "dL"},
         {A, "A"},
         {A * h, "Ah"},
         {V, "V"},
         {s, "s"},
         // this is so Gs doesn't get used which can cause issues
         {giga * s, "Bs"},  // B is for billion
         {cd, "cd"},
         {K, "K"},
         {N, "N"},
         {Pa, "Pa"},
         {J, "J"},
         {C, "C"},
         {F, "F"},
         // because GF is gram force not giga Farad which is a ridiculous unit
         // otherwise generates confusion
         {giga * F, "(1000MF)"},

         // some of these are just dumb units but here to avoid round trip
         // errors
         {unit_cast(precise::ronna) * T, "(1000YT)"},
         {unit_cast(precise::quetta) * T, "(1000000YT)"},
         {S, "S"},
         {Wb, "Wb"},
         {T, "T"},
         {H, "H"},
         // deal with pico henry which is interpreted as acidity (pH)
         {pico * H, "(A^-2*pJ)"},
         {lm, "lm"},
         {lx, "lux"},
         // remove Bq since it is often confusing in other contexts 1/s
         // {Bq, "Bq"},
         {unit(2.58e-4, C / kg), "R"},

         {unit_cast(precise::cgs::curie), "Ci"},
         {(mega * m).pow(3),
          "ZL"},  // another one of those units that can be confused
         {bar, "bar"},
         {minute, "min"},
         {ms, "ms"},
         {h, "h"},
         {unit_cast(precise::time::day), "day"},
         {unit_cast(precise::time::week), "week"},
         {unit_cast(precise::time::yr), "yr"},
         {deg, "deg"},
         {rad, "rad"},
         {degC, u8"\u00B0C"},
         {degC.pow(2), "degC^2"},
         {cm, "cm"},
         {km, "km"},
         {km * km, "km^2"},
         {mm, "mm"},
         {nm, "nm"},
         {pu * m, "strain"},
         {unit_cast(precise::distance::ly), "ly"},
         {unit_cast(precise::distance::au), "au"},
         {percent, "%"},
         {unit_cast(precise::special::ASD), "ASD"},
         {unit_cast(precise::special::rootHertz), "rootHertz"},
         {currency, "$"},
         {count, "count"},
         {ratio, ""},
         {error, "ERROR"},
         {defunit, "defunit"},
         {iflag, "flag"},
         {eflag, "eflag"},
         {pu, "pu"},
         {Gy, "Gy"},
         {Sv, "Sv"},
         {Hz, "Hz"},
         {kilo * Hz, "kHz"},
         {rpm, "rpm"},
         {kat, "kat"},
         {sr, "sr"},
         {W, "W"},
         {VAR, "VAR"},
         {MVAR, "MVAR"},
         {MW, "MW"},
         {kW, "kW"},
         {mW, "mW"},
         {puMW, "puMW"},
         {puMW / mega, "puW"},
         {puV, "puV"},
         {puA, "puA"},
         {mA, "mA"},
         {kV, "kV"},
         {unit_cast(precise::area::are), "are"},
         {unit_cast(precise::area::hectare), "hectare"},
         {unit_cast(precise::area::barn), "barn"},
         {pu * ohm, "puOhm"},
         {puHz, "puHz"},
         {unit_cast(precise::energy::eV), "eV"},
         {unit_cast(precise::pressure::atm), "atm"},
         {unit_cast(precise::pressure::mmHg), "mmHg"},
         {unit_cast(precise::pressure::mmH2O), "mmH2O"},
         {unit_cast(precise::laboratory::arbU), "arb. unit"},
         {unit_cast(precise::laboratory::IU), "[IU]"},
         {kWh, "kWh"},
         {MWh, "MWh"},
         {unit_cast(precise::other::MegaBuck), "M$"},
         {unit_cast(precise::other::GigaBuck), "B$"},
         {L, "L"},
         {unit_cast(precise::mL), "mL"},
         {unit_cast(precise::micro * precise::L), "uL"},
         {tonne, "t"},  // metric ton
         {unit_cast(precise::mass::u), "u"},
         {kB, "kB"},
         {MB, "MB"},
         {GB, "GB"},
         {unit_cast(precise::data::KiB), "KiB"},
         {unit_cast(precise::data::MiB), "MiB"},
         {unit_cast(precise::distance::angstrom), u8"\u00C5"},
         {g, "g"},
         {mg, "mg"},
         {unit_cast(precise::energy::eV / (constants::c.as_unit().pow(2))),
          "(eV*[c]^-2)"},
         {unit_cast(precise::data::GiB), "GiB"},
         {unit_cast(precise::other::ppm), "ppm"},
         {unit_cast(precise::other::ppb), "ppb"}}};

UNITS_CPP14_CONSTEXPR_OBJECT std::array<std::pair<unit, const char*>, 55>
    defined_unit_names_customary{{
        {in, "in"},
        {unit_cast(precise::in.pow(2)), "in^2"},
        {unit_cast(precise::in.pow(3)), "in^3"},
        {ft, "ft"},
        {unit_cast(precise::imp::foot), "ft_br"},
        {unit_cast(precise::imp::inch), "in_br"},
        {unit_cast(precise::imp::yard), "yd_br"},
        {unit_cast(precise::imp::rod), "rd_br"},
        {unit_cast(precise::imp::mile), "mi_br"},
        {unit_cast(precise::imp::pace), "pc_br"},
        {unit_cast(precise::imp::link), "lk_br"},
        {unit_cast(precise::imp::chain), "ch_br"},
        {unit_cast(precise::imp::nautical_mile), "nmi_br"},
        {unit_cast(precise::imp::knot), "kn_br"},
        {unit_cast(precise::nautical::knot), "knot"},
        {unit_cast(precise::ft.pow(2)), "ft^2"},
        {unit_cast(precise::ft.pow(3)), "ft^3"},
        {degF, u8"\u00B0F"},
        {yd, "yd"},
        {unit_cast(precise::us::rod), "rd"},
        {unit_cast(precise::yd.pow(2)), "yd^2"},
        {unit_cast(precise::yd.pow(3)), "yd^3"},
        {unit_cast(precise::time::syr), "syr"},
        {unit_cast(precise::time::ag), "a_g"},
        {unit_cast(precise::time::at), "a_t"},
        {unit_cast(precise::time::aj), "a_j"},
        {unit_cast(precise::angle::grad), "grad"},
        {mile, "mi"},
        {unit_cast(precise::mile.pow(2)), "mi^2"},
        {acre, "acre"},
        {unit_cast(precise::energy::therm_ec), "therm"},
        {unit_cast(precise::energy::tonc), "tonc"},
        {hp, "hp"},
        {mph, "mph"},
        {kcal, "kcal"},
        {btu, "btu"},
        {unit_cast(precise::other::CFM), "CFM"},
        {unit_cast(precise::pressure::psi), "psi"},
        {unit_cast(precise::pressure::psig), "psig"},
        {unit_cast(precise::pressure::inHg), "inHg"},
        {unit_cast(precise::pressure::inH2O), "inH2O"},
        {unit_cast(precise::pressure::torr), "torr"},
        {unit_cast(precise::energy::EER), "EER"},
        {gal, "gal"},
        {unit_cast(precise::us::barrel), "bbl"},
        {lb, "lb"},
        {ton, "ton"},
        {unit_cast(precise::us::dry::bushel), "bu"},
        {unit_cast(precise::us::floz), "floz"},
        {oz, "oz"},
        {unit_cast(precise::us::cup), "cup"},
        {unit_cast(precise::us::tsp), "tsp"},
        {unit_cast(precise::us::tbsp), "tbsp"},
        {unit_cast(precise::us::quart), "qt"},
        {unit_cast(precise::lbf), "lbf"},
    }};

/// definitions for the default units for specific types of measurmeents
UNITS_CPP14_CONSTEXPR_OBJECT std::array<
    std::pair<const char*, precise_unit>,
    1213>
    defined_unit_strings_si{
        {{"", precise::defunit},
         {"[]", precise::defunit},
         {"def", precise::defunit},
         {"default", precise::defunit},
         {"defunit", precise::defunit},
         {"*", precise::defunit},
         {"**", precise::defunit},
         {"***", precise::defunit},
         {"****", precise::defunit},
         {"*****", precise::defunit},
         {"******", precise::defunit},
         {"^^^", precise::defunit},
         {"1", precise::one},
         {"one", precise::one},
         {"inf", precise::infinite},
         {".inf", precise::infinite},
         {"INF", precise::infinite},
         {"infinity", precise::infinite},
         {"INFINITY", precise::infinite},
         {"-inf", precise::neginfinite},
         {"-.inf", precise::neginfinite},
         {"-.Inf", precise::neginfinite},
         {"-*inf",
          precise::neginfinite},  // this is to handle internal string cleaning
         {"-*Inf", precise::neginfinite},
         {"-INF", precise::neginfinite},
         {"-infinity", precise::neginfinite},
         {"-INFINITY", precise::neginfinite},
         {"infinite", precise::infinite},
         {u8"\u221e", precise::infinite},
         {u8"-\u221e", precise::neginfinite},
         {"nan", precise::nan},
         {"NaN", precise::nan},
         {"NaN%", precise::nan},
         {"NAN", precise::nan},
         {".NAN", precise::nan},
         {"NaNQ",
          precise_unit(
              std::numeric_limits<double>::quiet_NaN(),
              detail::unit_data(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))},
         {"NaNS", precise::nan},
         {"qNaN",
          precise_unit(
              std::numeric_limits<double>::quiet_NaN(),
              detail::unit_data(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))},
         {"sNaN", precise::nan},
         {"1.#SNAN", precise::nan},
         {"#SNAN", precise::nan},
         {"1.#QNAN",
          precise_unit(
              std::numeric_limits<double>::quiet_NaN(),
              detail::unit_data(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))},
         {"#QNAN",
          precise_unit(
              std::numeric_limits<double>::quiet_NaN(),
              detail::unit_data(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))},
         {"1.#IND", precise::nan},
         {"#IND", precise::nan},
         {"0.1", precise_unit(0.1, precise::one)},
         {".1", precise_unit(0.1, precise::one)},
         {"deci", precise_unit(0.1, precise::one)},
         {"0.01", precise_unit(0.01, precise::one)},
         {".01", precise_unit(0.01, precise::one)},
         {"centi", precise_unit(0.01, precise::one)},
         {"0.001", precise::milli},
         {".001", precise::milli},
         {"milli", precise::milli},
         {"1e-3", precise::milli},
         {"1e-6", precise::micro},
         {"micro", precise::micro},
         {"1e-9", precise::nano},
         {"1e-12", precise::pico},
         {"1e-15", precise::femto},
         {"1e-18", precise::atto},
         {"nano", precise::nano},
         {"pico", precise::pico},
         {"femto", precise::femto},
         {"atto", precise::atto},
         {"yocto", precise::yocto},
         {"zepto", precise::zepto},
         {"ronto", precise::ronto},
         {"quecto", precise::quecto},
         {"10", precise_unit(10.0, precise::one)},
         {"ten", precise_unit(10.0, precise::one)},
         {"two", precise_unit(2.0, precise::one)},
         {"twenty", precise_unit(20.0, precise::one)},
         {"twelve", precise_unit(12.0, precise::one)},
         {"eight", precise_unit(8.0, precise::one)},
         {"100", precise_unit(100, precise::one)},
         {"hundred", precise_unit(100, precise::one)},
         {"fifty", precise_unit(50, precise::one)},
         {"centum", precise_unit(100, precise::one)},
         {"1000", precise::kilo},
         {"thousand", precise::kilo},
         {"1000000", precise::mega},
         {"million", precise::mega},
         {"1000000000", precise::giga},
         {"billion", precise::giga},
         {"billion_US", precise::giga},
         {"milliard", precise::giga},
         {"billion_br", precise::tera},
         {"trillion", precise::tera},
         {"trillion_US", precise::tera},
         {"trillion_br", precise::exa},
         {"quadrillion", precise::peta},
         {"1e3", precise::kilo},
         {"1e6", precise::mega},
         {"1e9", precise::giga},
         {"1e12", precise::tera},
         {"1e15", precise::peta},
         {"1e18", precise::exa},
         {"kilo", precise::kilo},
         {"k", precise::kilo},
         {"mega", precise::mega},
         {"giga", precise::giga},
         {"tera", precise::tera},
         {"peta", precise::peta},
         {"exa", precise::exa},
         {"yotta", precise::yotta},
         {"zetta", precise::zetta},
         {"ronna", precise::ronna},
         {"quetta", precise::quetta},
         {"%", precise::percent},
         {"%age", precise::percent},
         {"permille", precise::milli},
         {u8"\u2030", precise::milli},  // per mille symbol
         {"bp", precise_unit(0.1, precise::milli)},
         {"basispoint", precise_unit(0.1, precise::milli)},
         {u8"\u2031",
          precise_unit(0.1, precise::milli)},  // per ten thousand symbol
         {"pct", precise::percent},
         {"pi", precise_unit(constants::pi, one)},
         {"PI", precise_unit(constants::pi, one)},
         {"[pi]", precise_unit(constants::pi, one)},
         {"thenumberpi", precise_unit(constants::pi, one)},
         {"[PI]", precise_unit(constants::pi, one)},
         {"Pi", precise_unit(constants::pi, one)},
         {u8"\u03C0", precise_unit(constants::pi, one)},
         {u8"\U0001D70B", precise_unit(constants::pi, one)},
         {u8"\U0001D745", precise_unit(constants::pi, one)},
         {u8"\U0001D6D1", precise_unit(constants::pi, one)},
         {u8"\u03B5", precise::pu* precise::m},  // strain
         {u8"\u0190", precise::pu* precise::m},  // strain
         {"strain", precise::pu* precise::m},  // strain
         {"m", precise::m},
         {"Sm", precise::m},  // standard meter used in oil and gas usually Sm^3
         {"meter", precise::m},
         {"metre", precise::m},
         {"squaremeter",
          precise::m.pow(2)},  // to simplify some things later in the chain
         {"cubicmeter", precise::m.pow(3)},
         {"micron", precise::micro* precise::m},
         {"fermi", precise::femto* precise::m},
         {"xunit", precise::distance::xu},
         {"xu", precise::distance::xu},
         {"X", precise::distance::xu},
         {"cc", precise::cm.pow(3)},
         {"cubiccentimeter", precise::cm.pow(3)},
         {"m/s^2", precise::m / precise::s.pow(2)},
         {"kg/m^3", precise::kg / precise::m.pow(3)},
         {"kg", precise::kg},
         {"KG", precise::kg},
         {"kilogram", precise::kg},
         {"mol", precise::mol},
         {"einstein", precise::mol},  // technically of photons
         {"gmol", precise::mol},
         {"lbmol", precise_unit(424.0, precise::mol)},
         {"atom", constants::Na.as_unit().inv()},
         {"avogadroconstant", constants::Na.as_unit()},
         {"molecule", constants::Na.as_unit().inv()},
         {"molec", constants::Na.as_unit().inv()},
         {"nucleon", constants::Na.as_unit().inv()},
         {"nuc", constants::Na.as_unit().inv()},
         {"MOL", precise::mol},
         {"mOL", precise::mol},
         {"mole", precise::mol},
         {"M", precise::laboratory::molarity},
         {"molar", precise::laboratory::molarity},
         {"Molar", precise::laboratory::molarity},
         {"eq", precise::mol},
         {"Eq", precise::mol},
         {"equivalent",
          {1.0, precise::one, commodities::packaging::equivalent}},
         {"EQ", precise::mol},
         {"osm",
          precise_unit(1.0, precise::mol, commodities::packaging::particle)},
         {"osmole",
          precise_unit(1.0, precise::mol, commodities::packaging::particle)},
         {"osmol",
          precise_unit(1.0, precise::mol, commodities::packaging::particle)},
         {"OSM",
          precise_unit(1.0, precise::mol, commodities::packaging::particle)},
         {"totalacidnumber", precise::generate_custom_unit(213)},
         {"TAN", precise::generate_custom_unit(213)},
         {"g%", precise_unit(10.0, precise::g / precise::L)},
         {"gram%", precise_unit(10.0, precise::g / precise::L)},
         {"G%", precise_unit(10.0, precise::g / precise::L)},
         {"U", precise::laboratory::enzyme_unit},
         // this may not be best but it doesn't actually conflict with anything
         // else right now
         {"units", precise::laboratory::enzyme_unit},
         {"enzymeunit", precise::laboratory::enzyme_unit},
         {"internationalunitofenzymeactivity",
          precise::laboratory::enzyme_unit},
         {"eu", precise::laboratory::enzyme_unit},
         {"A", precise::A},
         {"amp", precise::A},
         {"amps", precise::A},
         {"ampturn", precise::A* precise::count},
         {"At", precise::A* precise::count},
         {"V", precise::V},
         {"volt", precise::V},
         {"volt_ac", precise::V},
         {"volt_dc", precise::V},
         {"voltAC", precise::V},
         {"voltDC", precise::V},
         {"W", precise::W},
         {"W/m^2", precise::W / precise::m.pow(2)},
         {"watt", precise::W},
         {"kW", precise::electrical::kW},
         {"kilowatt", precise::electrical::kW},
         {"MW", precise::MW},
         {"megawatt", precise::MW},
         {"MVA", precise::electrical::MVAR},
         {"mvar", precise::electrical::MVAR},
         {"MVAR", precise::electrical::MVAR},
         {"VA", precise::electrical::VAR},
         {"voltampreactive", precise::electrical::VAR},
         {"VAR", precise::electrical::VAR},
         {"var", precise::electrical::VAR},
         {"s", precise::s},
         {"sec", precise::s},
         {"sec_time", precise::s},
         {"MAS", precise::mega* precise::s},
         {"mAS", precise::mega* precise::s},
         {"second", precise::s},
         {"second_time", precise::s},
         {"shake", precise_unit(10.0, precise::ns)},
         {"jiffy", precise_unit(0.01, precise::s)},  // use the computer science
                                                     // definition for playback
                                                     // and clock rate
         {"cd", precise::cd},
         {"mcd",
          precise::milli* precise::cd},  // prefer milli candela to micro-day
         {"CD", precise::cd},
         {"candela", precise::cd},
         {"metercandle", precise::lumen / precise::m.pow(2)},
         {"centimetercandle", precise::lumen / precise::cm.pow(2)},
         {"K", precise::K},
         {"kelvin", precise::K},
         {"kelvins", precise::K},
         {"degKelvin", precise::K},
         {"degsKelvin", precise::K},
         {"degkelvin", precise::K},
         {"degskelvin", precise::K},
         {"degK", precise::K},
         {"degsK", precise::K},
         {"N", precise::N},
         {"Ns", precise::N* precise::s},  // this would not pass through to the
                                          // separation functions
         {"Nm", precise::N* precise::m},  // this would not pass through to the
                                          // separation functions
         {"As", precise::A* precise::s},  // this would not pass through to the
                                          // separation functions
         {"Ah", precise::A* precise::hr},  // this would not pass through to the
                                           // separation functions
         {"Ahr", precise::A* precise::hr},  // this would not pass through to
                                            // the separation functions
         {"newton", precise::N},
         {"Pa", precise::Pa},
         {"pa", precise::Pa},
         {"pascal", precise::Pa},
         {"PAL", precise::Pa},
         {"pAL", precise::Pa},
         {"J", precise::J},
         {"joule", precise::J},
         {"Joule", precise::J},
         {"Joules", precise::J},
         {"C", precise::C},
         {"coulomb", precise::C},
         {"faraday", precise::other::faraday},
         {"farady", precise::other::faraday},
         {"chemicalfaraday", {9.64957e4, precise::C}},
         {"physicalfaraday", {9.65219e4, precise::C}},
         {"C12faraday", {9.648531, precise::C}},
         {"F", precise::F},
         {"farad", precise::F},
         {"abF", precise::cgs::abFarad},
         {"abfarad", precise::cgs::abFarad},
         {"stF", precise::cgs::statFarad},
         {"statfarad", precise::cgs::statFarad},
         {"OHM", precise::ohm},
         {"ohm", precise::ohm},
         {"Ohm", precise::ohm},
         {"kilohm", precise::kilo* precise::ohm},  // special case allowed by SI
         {"megohm", precise::mega* precise::ohm},  // special case allowed by SI
         {u8"\u03A9", precise::ohm},  // Greek Omega
         {u8"\u2126", precise::ohm},  // Unicode Ohm symbol
         {"abOhm", precise::cgs::abOhm},
         {"abohm", precise::cgs::abOhm},
         {"statohm", precise::cgs::statOhm},
         {"statOhm", precise::cgs::statOhm},
         {"S", precise::S},
         {"siemen", precise::S},
         {"siemens", precise::S},
         {"SIE", precise::S},
         {"mho", precise::S},
         {"gemmho", precise_unit(1e-6, precise::S)},
         {"MHO", precise::S},
         {"mHO", precise::S},
         {u8"\u01B1", precise::S},
         {"absiemen", precise_unit(1e9, precise::S)},
         {"abmho", precise_unit(1e9, precise::S)},
         {"statmho", precise_unit(1.0 / 8.987551787e11, S)},
         {"Wb", precise::Wb},
         {"weber", precise::Wb},
         {"T", precise::T},
         {"tesla", precise::T},
         {"H", precise::H},
         {"henry", precise::H},
         {"henries", precise::H},
         {"abhenry", precise::cgs::abHenry},
         {"abH", precise::cgs::abHenry},
         {"stathenry", precise::cgs::statHenry},
         {"stH", precise::cgs::statHenry},
         {"statH", precise::cgs::statHenry},
         {"lm", precise::lm},
         {"LM", precise::lm},
         {"lumen", precise::lm},
         {"lux", precise::lx},
         {"luxes", precise::lx},
         {"nox", precise::milli* precise::lx},
         {"lx", precise::lx},
         {"LX", precise::lx},
         {"Bq", precise::Bq},
         {"BQ", precise::Bq},
         {"becquerel", precise::Bq},
         {"rutherford", precise_unit(1e6, precise::Bq)},
         {"activity", precise::Bq},
         {"curie", precise::cgs::curie},
         {"gauss", precise::cgs::gauss},
         {"G", precise::cgs::gauss},
         {"Gs", precise::cgs::gauss},
         {"Ci", precise::cgs::curie},
         {"CI", precise::cgs::curie},
         {"Gal", precise::cgs::gal},
         {"Gals", precise::cgs::gal},
         {"galileos", precise::cgs::gal},
         {"linear", {1.0, precise::one, commodities::packaging::linear}},
         {"jansky",
          precise_unit(
              1e-26,
              precise::W / precise::m / precise::m / precise::Hz)},
         {"Jy",
          precise_unit(
              1e-26,
              precise::W / precise::m / precise::m / precise::Hz)},
         {"Mm^3", precise::kilo* precise::energy::scm},  // millum cubic meters
         {"Nm^3", precise::energy::ncm},  // normal cubic meter
         {"Sm^3", precise::energy::scm},  // standard cubic meter
         {"MMm^3",
          precise::mega* precise::energy::scm},  // million cubic meters
         {"bm^3", precise::giga* precise::energy::scm},  // billion cubic meters
         {"tm^3",
          precise::tera* precise::energy::scm},  // trillion cubic meters
         {"gwp", precise::climate::gwp},  // global warming potential
         {"gtp", precise::climate::gtp},  // global temperature potential
         {"ode", precise::climate::odp},  // ozone depletion equivalent
         {"ozonedepletionequivalent",
          precise::climate::odp},  // ozone depletion equivalent
         {"min", precise::minute},
         {"min_time", precise::minute},
         {"mins", precise::minute},
         {"mIN", precise::minute},
         {"minute", precise::minute},
         {"minute_time", precise::minute},
         {"ms", precise::ms},
         {"millisecond", precise::ms},
         {"hr", precise::hr},
         {"HR", precise::hr},
         {"h", precise::hr},
         {"hour", precise::hr},
         {"day", precise::time::day},
         {"dy", precise::time::day},
         {"D", precise::time::day},
         {"d", precise::time::day},
         {"week", precise::time::week},
         {"weekly", precise::one / precise::time::week},
         {"wk", precise::time::week},
         {"WK", precise::time::week},
         {"y", precise::time::year},
         {"YR", precise::time::yr},  // this one gets 365 days exactly
         {"yr", precise::time::yr},  // this one gets 365 days exactly
         {"a", precise::area::are},  // SI symbol is are
         {"year", precise::time::year},  // year SI Definition 365 days
         {"yearly", precise::time::year.inv()},  // year
         {"annum", precise::time::year},  // year
         {"ANN", precise::time::aj},  // year
         {"decade", precise::ten* precise::time::aj},  // year
         {"century", precise::hundred* precise::time::aj},  // year
         {"centuries", precise::hundred* precise::time::aj},  // year
         {"millennia", precise::kilo* precise::time::ag},  // year
         {"millennium", precise::kilo* precise::time::ag},  // year
         {"syr", precise::time::syr},  // sidereal year
         {"year_sdr", precise::time::syr},  // sidereal year
         {"yr_sdr", precise::time::syr},  // sidereal year
         {"month_sdr",
          precise_unit(1.0 / 12.0, precise::time::syr)},  // sidereal month
         {"mo_sdr",
          precise_unit(1.0 / 12.0, precise::time::syr)},  // sidereal month
         {"sday", precise::time::sday},  // sidereal day
         {"day_sdr", precise::time::sday},  // sidereal day
         {"dy_sdr", precise::time::sday},  // sidereal day
         {"d_sdr", precise::time::sday},  // sidereal day
         {"hour_sdr",
          precise_unit(1.0 / 24.0, precise::time::sday)},  // sidereal hour
         {"minute_sdr",
          precise_unit(1.0 / 24.0 / 60.0, precise::time::sday)},  // sidereal
                                                                  // minute
         {"second_sdr",
          precise_unit(
              1.0 / 24.0 / 60.0 / 60.0,
              precise::time::sday)},  // sidereal
                                      // second
         {"hr_sdr",
          precise_unit(1.0 / 24.0, precise::time::sday)},  // sidereal hour
         {"min_sdr",
          precise_unit(1.0 / 24.0 / 60.0, precise::time::sday)},  // sidereal
                                                                  // minute
         {"sec_sdr",
          precise_unit(
              1.0 / 24.0 / 60.0 / 60.0,
              precise::time::sday)},  // sidereal
                                      // second
         {"a_t", precise::time::at},  // tropical year
         {"year_t", precise::time::at},  // tropical year
         {"month_t",
          precise_unit(1.0 / 12.0, precise::time::at)},  // tropical month
         {"mo_t",
          precise_unit(1.0 / 12.0, precise::time::at)},  // tropical month
         {"month_[30]", {30.0, precise::day}},
         {"solaryear", precise::time::at},  // year
         {"ANN_T", precise::time::at},  // year
         {"a_j", precise::time::aj},  // year
         {"meanyear_j", precise::time::aj},  // year
         {"meanyr_j", precise::time::aj},  // year
         {"year_j", precise::time::aj},  // year
         {"yr_j", precise::time::aj},  // year
         {"ANN_J", precise::time::aj},  // year
         {"year(leap)", precise_unit(366.0, precise::time::day)},  // year
         {"commonyear", precise_unit(365.0, precise::time::day)},  // year
         {"leapyear", precise_unit(366.0, precise::time::day)},  // year
         {"yearcommon", precise_unit(365.0, precise::time::day)},  // year
         {"meanyear_g", precise::time::ag},  // year
         {"meanyr_g", precise::time::ag},  // year
         {"a_g", precise::time::ag},  // year
         {"year_g", precise::time::ag},  // year
         {"yr_g", precise::time::ag},  // year
         {"ANN_G", precise::time::ag},  // year
         {"mo", precise::time::mog},  // gregorian month
         {"month", precise::time::mog},  // gregorian month
         {"monthly", precise::time::mog.inv()},  // gregorian month
         {"MO", precise::time::mog},  // gregorian month
         {"mO", precise::time::mog},  // gregorian month
         {"mos", precise::time::mos},  // synodal month
         {"mo_s", precise::time::mos},  // synodal month
         {"mO_S", precise::time::mos},  // synodal month
         {"synodalmonth", precise::time::mos},  // synodal month
         {"month_s", precise::time::mos},  // synodal month
         {"lunarmonth", precise::time::mos},  // synodal month
         {"lunarcycle", precise::time::mos},  // synodal month
         {"moon", precise::time::mos},  // synodal month
         {"mo_j", precise::time::moj},  //
         {"month_j", precise::time::moj},  //
         {"mO_J", precise::time::moj},  //
         {"meanmonth_j", precise::time::moj},  //
         {"mo_g", precise::time::mog},  //
         {"mog", precise::time::mog},  //
         {"month_g", precise::time::mog},  //
         {"mO_G", precise::time::mog},  //
         {"meanmonth_g", precise::time::mog},  //
         {"eon", precise_unit(1e9, precise::time::syr)},
         {"workyear", precise_unit(2056, precise::hr)},
         {"workmonth", precise_unit(2056.0 / 12.0, precise::hr)},
         {"workweek", precise_unit(40.0, precise::hr)},
         {"workday", precise_unit(8.0, precise::hr)},
         {"arcdeg", precise::deg},
         {"angulardeg", precise::deg},
         {"deg", precise::deg},
         {"DEG", precise::deg},
         {"degE", precise::deg* precise::direction::east},
         {"east", precise::direction::east},
         {"degsE", precise::deg* precise::direction::east},
         {"degW", precise::deg* precise::direction::west},
         {"west", precise::direction::west},
         {"degsW", precise::deg* precise::direction::west},
         {"degS", precise::deg* precise::direction::south},
         {"south", precise::direction::south},
         {"degsS", precise::deg* precise::direction::south},
         {"degN", precise::deg* precise::direction::north},
         {"degsN", precise::direction::north},
         {"north", precise::direction::north},
         {"degT", precise::deg* precise::direction::north},
         {"degsT", precise::deg* precise::direction::north},
         {"true", precise::direction::north},
         {"o", precise::deg},
         {u8"\u00B0", precise::deg},  // unicode degree symbol
         {"\xB0", precise::deg},  // latin-1 degree
         {u8"\u00B0(s)", precise::deg},  // unicode degree symbol
         {"\xB0(s)", precise::deg},  // latin-1 degree
         {"degAPI", precise::special::degreeAPI},
         {u8"\u00B0API", precise::special::degreeAPI},  // unicode degree symbol
         {"\xB0"
          "API",
          precise::special::degreeAPI},  // latin-1 degree
         {"degBaume", precise::special::degreeBaumeLight},
         {u8"\u00B0Baume",
          precise::special::degreeBaumeLight},  // unicode degree symbol
         {"\xB0"
          "Baume",
          precise::special::degreeBaumeLight},  // latin-1 degree
         {"degBaume_heavy", precise::special::degreeBaumeHeavy},
         {"degBaume_light", precise::special::degreeBaumeLight},
         {"degBalling",
          {1.0, precise::generate_custom_unit(109), commodities::sugar}},
         {"degBrix",
          {1.0, precise::generate_custom_unit(108), commodities::sugar}},
         {"deg_ang", precise::deg},
         {"arcminute", precise::angle::arcmin},
         {"arcmin", precise::angle::arcmin},
         {"amin", precise::angle::arcmin},
         {"MOA", precise::angle::arcmin},
         {"angularminute", precise::angle::arcmin},
         {"'", precise::angle::arcmin},
         {"`", precise::angle::arcmin},
         {u8"\u2032", precise::angle::arcmin},  // single prime
         {"minute_ang", precise::angle::arcmin},
         {"min_ang", precise::angle::arcmin},
         {"arcsecond", precise::angle::arcsec},
         {"''", precise::angle::arcsec},
         {"``", precise::angle::arcsec},
         {"arcsec", precise::angle::arcsec},
         {"asec", precise::angle::arcsec},
         {"angularsecond", precise::angle::arcsec},
         {"\"", precise::angle::arcsec},
         {u8"\u2033", precise::angle::arcsec},  // double prime
         {"second_ang", precise::angle::arcsec},
         {"sec_ang", precise::angle::arcsec},
         {"mas", precise_unit(0.001, precise::angle::arcsec)},  // milliarcsec
         {"uas",
          precise_unit(0.000001, precise::angle::arcsec)},  // microarcsec
         {"rad", precise::rad},
         {"radian", precise::rad},
         {"radiant", precise::rad},
         {"circ", precise_unit(constants::tau, precise::rad)},
         {"CIRC", precise_unit(constants::tau, precise::rad)},
         {"quadrant", precise_unit(90.0, precise::deg)},
         {"circle", precise_unit(constants::tau, precise::rad)},
         {"cycle", precise_unit(constants::tau, precise::rad)},
         {"rotation", precise_unit(constants::tau, precise::rad)},
         {"turn", precise_unit(constants::tau, precise::rad)},
         {"circle-planeangle", precise_unit(constants::tau, precise::rad)},
         {"sph", precise_unit(4.0 * constants::pi, precise::sr)},
         {"spere-solidangle", precise_unit(4.0 * constants::pi, precise::sr)},
         {"spere", precise_unit(4.0 * constants::pi, precise::sr)},
         {"speres", precise_unit(4.0 * constants::pi, precise::sr)},
         {"Spere", precise_unit(4.0 * constants::pi, precise::sr)},
         {"SPH", precise_unit(4.0 * constants::pi, precise::sr)},
         {"\xB0"
          "C",
          precise::degC},
         {u8"\u00B0C", precise::degC},
         {u8"\u2103", precise::degC},  // direct unicode symbol
         {"\xB0"
          "K",
          precise::K},
         {u8"\u00B0K", precise::K},

         {"degC", precise::degC},
         {"oC", precise::degC},
         {"Cel", precise::degC},
         {"CEL", precise::degC},
         {"K@273.15", precise::degC},
         {"celsius", precise::degC},
         {"degCelsius", precise::degC},
         {"degsC", precise::degC},
         {"cm", precise::cm},
         {"centimeter", precise::cm},
         {"km", precise::km},
         {"kilometer", precise::km},
         {"mm", precise::mm},
         {"millimeter", precise::mm},
         {"nm", precise::nm},
         {"nanometer", precise::nm},
         {"ly", precise::distance::ly},
         {"[LY]", precise::distance::ly},
         {"lightyear", precise::distance::ly},
         {"light-year", precise::distance::ly},
         {"pc", precise::distance::parsec},
         {"parsec", precise::distance::parsec},
         {"PRS", precise::distance::parsec},
         {"pRS", precise::distance::parsec},
         {"[c]", constants::c.as_unit()},
         {"c", constants::c.as_unit()},
         {"[C]", constants::c.as_unit()},
         {"speedoflight", constants::c.as_unit()},
         {"speedoflightinvacuum", constants::c.as_unit()},
         {"light", constants::c.as_unit()},
         {"[h]", constants::h.as_unit()},
         {"[hbar]", constants::hbar.as_unit()},
         {"hbar", constants::hbar.as_unit()},
         {"[H]", constants::h.as_unit()},
         {u8"\u210E", constants::h.as_unit()},
         {u8"\u210F",
          precise_unit(1.0 / constants::tau, constants::h.as_unit())},
         {"[k]", constants::k.as_unit()},
         {"[K]", constants::k.as_unit()},
         {"eps_0", constants::eps0.as_unit()},
         {"[eps_0]", constants::eps0.as_unit()},
         {"vacuumpermittivity", constants::eps0.as_unit()},
         {"[EPS_0]", constants::eps0.as_unit()},
         {u8"\u03B5"
          "0",
          constants::eps0.as_unit()},
         {u8"\u03B5\u2080", constants::eps0.as_unit()},
         {"mu_0", constants::mu0.as_unit()},
         {"[MU_0]", constants::mu0.as_unit()},
         {"[mu0]", constants::mu0.as_unit()},
         {"[e]", constants::e.as_unit()},
         {"e", constants::e.as_unit()},
         {"[E]", constants::e.as_unit()},
         {"elementarycharge", constants::e.as_unit()},
         {"[G]", constants::G.as_unit()},
         {"[GC]", constants::G.as_unit()},
         {"[g]", constants::g0.as_unit()},
         {"[g0]", constants::g0.as_unit()},
         {"standardgravity", constants::g0.as_unit()},
         {"standardfreefall", constants::g0.as_unit()},
         {"freefall", constants::g0.as_unit()},
         {"standardaccelerationoffreefall", constants::g0.as_unit()},
         {"accelerationofgravity", constants::g0.as_unit()},
         {"m_e", constants::me.as_unit()},
         {"[me]", constants::me.as_unit()},
         {"electronmass", constants::me.as_unit()},
         {"[M_E]", constants::me.as_unit()},
         {"m_p", constants::mp.as_unit()},
         {"[M_P]", constants::mp.as_unit()},
         {"[mp]", constants::mp.as_unit()},
         {"protonmass", constants::mp.as_unit()},
         {"m_n", constants::mn.as_unit()},
         {"[M_N]", constants::mn.as_unit()},
         {"[mn]", constants::mn.as_unit()},
         {"neutronmass", constants::mn.as_unit()},
         {"planckmass", constants::planck::mass.as_unit()},
         {"plancklength", constants::planck::length.as_unit()},
         {"plancktime", constants::planck::time.as_unit()},
         {"planckcharge", constants::planck::charge.as_unit()},
         {"plancktemperature", constants::planck::temperature.as_unit()},
         {"planckarea", constants::planck::length.as_unit().pow(2)},
         {"planckvolume", constants::planck::length.as_unit().pow(3)},
         {"planckenergy", precise_unit(1.9561e9, precise::J)},
         {"[fCs]", constants::fCs.as_unit()},
         {"[alpha]", constants::alpha.as_unit()},
         {"[mu]", constants::mu.as_unit()},
         {"[Na]", constants::Na.as_unit()},
         {"[Kcd]", constants::Kcd.as_unit()},
         {"[R]", constants::R.as_unit()},
         {"[s]", constants::s.as_unit()},
         {"[H0]", constants::H0.as_unit()},
         {"[a0]", constants::a0.as_unit()},
         {"[F]", constants::F.as_unit()},
         {"[Kj]", constants::Kj.as_unit()},
         {"[phi0]", constants::phi0.as_unit()},
         {"[Rk]", constants::Rk.as_unit()},
         {"[Rinf]", constants::Rinf.as_unit()},
         {"[planck::length]", constants::planck::length.as_unit()},
         {"[planck::mass]", constants::planck::mass.as_unit()},
         {"[planck::time]", constants::planck::time.as_unit()},
         {"[planck::charge]", constants::planck::charge.as_unit()},
         {"[planck::temperature]", constants::planck::temperature.as_unit()},
         {"[atomic::mass]", constants::atomic::mass.as_unit()},
         {"[atomic::length]", constants::atomic::length.as_unit()},
         {"[atomic::time]", constants::atomic::time.as_unit()},
         {"[atomic::charge]", constants::atomic::charge.as_unit()},
         {"[atomic::energy]", constants::atomic::energy.as_unit()},
         {"[atomic::action]", constants::atomic::action.as_unit()},
         {"[planck::area]", constants::planck::length.as_unit().pow(2)},
         {"[planck::volume]", constants::planck::length.as_unit().pow(3)},
         {"[planck::energy]", precise_unit(1.9561e9, precise::J)},
         {"dry", {1.0, precise::one, commodities::packaging::dry}},
         {"au", precise::distance::au},
         {"AU", precise::distance::au},
         {"ASU", precise::distance::au},
         {"astronomicalunit", precise::distance::au},
         {"astronomicunit", precise::distance::au},
         {"kph", precise::km / precise::hr},
         {"$", precise::currency},
         {"dollar", {1.0, precise::currency, commodities::currencies::dollar}},
         {"dollar_us",
          {1.0, precise::currency, commodities::currencies::dollar}},
         {"euro", {1.0, precise::currency, commodities::currencies::euro}},
         {"yen", {1.0, precise::currency, commodities::currencies::yen}},
         {"ruble", {1.0, precise::currency, commodities::currencies::ruble}},
         {"currency", precise::currency},
         {u8"\u00A2", {0.01, precise::currency}},  // cent symbol
         {"\xA2", {0.01, precise::currency}},  // cent symbol latin-1
         {u8"\u00A3",
          {1.0, precise::currency, commodities::currencies::pound}},  // pound
                                                                      // sign
         {"\xA3",
          {1.0, precise::currency, commodities::currencies::pound}},  // pound
                                                                      // sign
                                                                      // latin-1
         {u8"\u00A4", precise::currency},  // currency sign
         {"\xA4", precise::currency},  // currency sign latin-1
         {u8"\u00A5",
          {1.0, precise::currency, commodities::currencies::yen}},  // Yen sign
         {"\xA5", precise::currency},  // Yen sign latin-1
         {u8"\u0080",
          {1.0, precise::currency, commodities::currencies::euro}},  // Euro
                                                                     // sign
         {"\x80",
          {1.0, precise::currency, commodities::currencies::euro}},  // Euro
                                                                     // sign
                                                                     // extended
                                                                     // ascii
         {"count", precise::count},
         {"unit", precise::count},
         {"pair", precise_unit(2.0, precise::count)},
         {"dozen", precise_unit(12.0, precise::count)},
         {"bakersdozen", precise_unit(13.0, precise::count)},
         {"score", precise_unit(20.0, precise::count)},
         {"octet", precise_unit(8.0, precise::count)},
         {"gross", precise_unit(144.0, precise::count)},
         {"greatgross", precise_unit(144.0 * 12.0, precise::count)},
         {"smallgross", precise_unit(10.0 * 12.0, precise::count)},
         {"googol", precise_unit(1e100, precise::one)},
         {"half", precise_unit(0.5, precise::one)},
         {"quarter", precise_unit(0.25, precise::one)},
         {"third", precise_unit(1.0 / 3.0, precise::one)},
         {"fourth", precise_unit(0.25, precise::one)},
         {"fifth", precise_unit(0.2, precise::one)},
         {"sixth", precise_unit(1.0 / 6.0, precise::one)},
         {"eighth", precise_unit(0.125, precise::one)},
         {"tenth", precise_unit(0.1, precise::one)},
         {"cell", precise_unit(1.0, precise::count, commodities::cell)},
         {"cells", precise_unit(1.0, precise::count, commodities::cell)},
         {"{cells}", precise_unit(1.0, precise::count, commodities::cell)},
         // mainly to catch the commodity for using cell
         {"{#}", precise::count},
         {"[#]", precise::count},
         {"#", precise::count},
         {"number", precise::count},
         // {"ct", precise::count},
         {"pix",
          precise_unit(1.0, precise::count, commodities::pixel)},  // Pixel
         {"pixel",
          precise_unit(1.0, precise::count, commodities::pixel)},  // Pixel
         {"dot",
          precise_unit(1.0, precise::count, commodities::voxel)},  // Pixel
         {"voxel",
          precise_unit(1.0, precise::count, commodities::voxel)},  // Pixel
         {"item", precise::count},
         {"piece", precise::count},
         {"part", precise::count},
         {"ratio", precise::ratio},
         {"rat", precise::ratio},
         {"ERR", precise::error},
         {"ERROR", precise::error},
         {"error", precise::error},

         {"Gy", precise::Gy},
         {"gy", precise::Gy},
         {"GY", precise::Gy},
         {"gray", precise::Gy},
         {"Sv", precise::Sv},
         {"SV", precise::Sv},
         {"sievert", precise::Sv},
         {"sverdrup", precise_unit(1e6, precise::m.pow(3) / precise::s)},
         {"rem", precise::cgs::REM},
         {"[REM]", precise::cgs::REM},
         {"REM", precise::cgs::REM},
         {"radiationequivalentman", precise::cgs::REM},
         {"roentgenequivalentinman", precise::cgs::REM},
         {"Ky", precise::cgs::kayser},
         {"KY", precise::cgs::kayser},
         {"kayser", precise::cgs::kayser},
         {"Bi", precise::cgs::biot},
         {"BI", precise::cgs::biot},
         {"biot", precise::cgs::biot},
         {"abamp", precise::cgs::biot},
         {"abcoulomb", precise::cgs::biot* precise::s},
         {"abC", precise::cgs::biot* precise::s},
         {"statamp", precise::cgs::statC_charge / precise::s},
         {"stA", precise::cgs::statC_charge / precise::s},
         {"abA", precise::cgs::biot},
         {"St", precise::cgs::stokes},
         {"ST", precise::cgs::stokes},
         {"stoke", precise::cgs::stokes},
         {"Mx", precise::cgs::maxwell},
         {"MX", precise::cgs::maxwell},
         {"mX", precise::cgs::maxwell},
         {"maxwell", precise::cgs::maxwell},
         {"Oe", precise::cgs::oersted},
         {"OE", precise::cgs::oersted},
         {"oersted", precise::cgs::oersted},
         {"gilbert", precise::cgs::gilbert},
         {"Gb", precise::cgs::gilbert},
         {"Gi", precise::cgs::gilbert},
         {"p", precise::cgs::poise},
         {"cps", precise_unit(0.01, precise::cgs::poise)},
         // centipoise doesn't conflict with ps
         {"P", precise::cgs::poise},
         {"poise", precise::cgs::poise},
         {"rhe", precise_unit(10.0, (precise::Pa * precise::s).inv())},
         {"Ba", precise::cgs::barye},
         {"BA", precise::cgs::barye},
         {"barye", precise::cgs::barye},
         {"barie", precise::cgs::barye},
         {"debye", precise::cgs::debye},
         {"roentgen", precise::cgs::roentgen},
         {"r\xF6ntgen", precise::cgs::roentgen},
         {"parker", precise::cgs::roentgen},
         {u8"r\u00f6ntgen", precise::cgs::roentgen},
         {u8"ro\u0308ntgen", precise::cgs::roentgen},
         {u8"ro\u00A8ntgen", precise::cgs::roentgen},
         {"Roe", precise::cgs::roentgen},
         {"ROE", precise::cgs::roentgen},
         {"R", precise::cgs::roentgen},
         {"Lmb", precise::cgs::lambert},
         {"LMB", precise::cgs::lambert},
         {"lambert", precise::cgs::lambert},
         {"bril", precise_unit(1e-11, precise::cgs::lambert)},
         {"skot", precise_unit(1e-7, precise::cgs::lambert)},
         {"Lb", precise::cgs::lambert},
         {"langley", precise::cgs::langley},
         {"Ly", precise::cgs::langley},
         {"unitpole", precise::cgs::unitpole},
         {"sb", precise::cgs::stilb},
         {"SB", precise::cgs::stilb},
         {"stilb", precise::cgs::stilb},
         {"apostilb", precise_unit(1e-4 / constants::pi, precise::cgs::stilb)},
         {"asb", precise_unit(1e-4 / constants::pi, precise::cgs::stilb)},
         {"blondel", precise_unit(1e-4 / constants::pi, precise::cgs::stilb)},
         {"nit", precise::cd / precise::m.pow(2)},
         {"nt", precise::cd / precise::m.pow(2)},
         {"ph", precise::cgs::phot},
         {"PHT", precise::cgs::phot},
         {"pHT", precise::cgs::phot},
         {"phot", precise::cgs::phot},
         {"[RAD]", precise::cgs::RAD},
         {"RAD", precise::cgs::RAD},
         {"radiationabsorbeddose", precise::cgs::RAD},
         {"Hz", precise::Hz},
         {"HZ", precise::Hz},
         {"hertz", precise::Hz},
         {"rpm", precise::rpm},
         {"rps", precise_unit(constants::tau, precise::rad / precise::s)},
         {"r", precise_unit(constants::tau, precise::rad)},
         {"revolutions", {constants::tau, precise::rad}},
         {"revolution", precise_unit(constants::tau, precise::rad)},
         {"rev", precise_unit(constants::tau, precise::rad)},
         {"revs", precise_unit(constants::tau, precise::rad)},
         {"rev/min", precise::rpm},
         {"rad/s", precise::rad / precise::s},
         {"kat", precise::kat},
         {"kats", precise::kat},
         {"KAT", precise::kat},
         {"katal", precise::kat},
         {"sr", precise::sr},
         {"SR", precise::sr},
         {"steradian", precise::sr},
         {"steradian-solidangle", precise::sr},
         {"$/MWh", precise::currency / precise::MWh},
         {"are", precise::area::are},
         // this is an odd form of the prefix
         {"decare", {10.0, precise::area::are}},
         {"ar", precise::area::are},
         {"AR", precise::area::are},
         {"hectare", precise::area::hectare},
         {"barn", precise::area::barn},
         {"b", precise::area::barn},
         {"BRN", precise::area::barn},
         {"ha", precise::area::hectare},
         // porous solid permeability
         {"mW", precise::electrical::mW},
         {"milliwatt", precise::electrical::mW},
         {"puW", precise::electrical::puMW / precise::mega},
         {"puMW", precise::electrical::puMW},
         {"puMVA", precise::electrical::puMW},
         {"pumw", precise::electrical::puMW},
         {"pumegawatt", precise::electrical::puMW},
         {"puV", precise::electrical::puV},
         {"puvolt", precise::electrical::puV},
         {"puA", precise::electrical::puA},
         {"puamp", precise::electrical::puA},
         {"mA", precise::electrical::mA},
         {"milliamp", precise::electrical::mA},
         {"kV", precise::electrical::kV},
         {"kilovolt", precise::electrical::kV},
         {"abvolt", precise::cgs::abVolt},
         {"abV", precise::cgs::abVolt},
         {"statvolt", precise::cgs::statV},
         {"stV", precise::cgs::statV},
         {"erg", precise::cgs::erg},
         {"ERG", precise::cgs::erg},
         {"dyn", precise::cgs::dyn},
         {"DYN", precise::cgs::dyn},
         {"dyne", precise::cgs::dyn},
         {"pond", precise::gm::pond},
         {"pu", precise::pu},
         {"perunit", precise::pu},
         {"flag", precise::iflag},
         {"iflag", precise::iflag},
         {"eflag", precise::eflag},
         {"FLAG", precise::iflag},
         {"EFLAG", precise::eflag},
         {"IFLAG", precise::iflag},
         {"imaginary", precise::iflag},
         {"sqrt(-1)", precise::iflag},
         {"puOhm", precise::pu* precise::ohm},
         {"puohm", precise::pu* precise::ohm},
         {"puHz", precise::electrical::puHz},
         {"puhertz", precise::electrical::puHz},
         {"mps", precise::m / precise::s},
         {"eV", precise::energy::eV},
         {"bev", precise_unit(1e9, precise::energy::eV)},
         {"Ry", precise_unit(13.60583, precise::energy::eV)},  // Rydberg
         {"electronvolt", precise::energy::eV},
         {"electronVolt", precise::energy::eV},
         // Gigatonne carbon
         {"GtC", precise_unit(1000000000.0, precise::t, commodities::carbon)},
         {"hartree", precise::energy::hartree},
         {"Eh", precise::energy::hartree},  // this could be confused with
                                            // Exa-hour, but not likely
         {"E_h", precise::energy::hartree},  // this could be confused with
                                             // Exa-hour, but not likely
         {"Ha", precise::energy::hartree},

         {"fueloilequivalentof1kiloliter",
          precise::energy::foeb / precise::us::barrel* precise::m.pow(3)},
         {"atm", precise::pressure::atm},
         {"ATM", precise::pressure::atm},
         {"atmos", precise::pressure::atm},
         {"atmosphere", precise::pressure::atm},
         {"standardatmosphere", precise::pressure::atm},
         {"stdatmosphere", precise::pressure::atm},
         {"stdatm", precise::pressure::atm},

         {"mmHg", precise::pressure::mmHg},
         {"mm_Hg", precise::pressure::mmHg},
         {"mM_Hg", precise::pressure::mmHg},
         {"cm_Hg", precise::ten* precise::pressure::mmHg},
         {"cM_Hg", precise::ten* precise::pressure::mmHg},
         {"m_Hg", precise::kilo* precise::pressure::mmHg},
         {"m[Hg]", precise::kilo* precise::pressure::mmHg},
         {"m_H2O", precise::kilo* precise::pressure::mmH2O},
         {"m[H2O]", precise::kilo* precise::pressure::mmH2O},
         {"cm_H2O", precise::ten* precise::pressure::mmH2O},
         {"cM_H2O", precise::ten* precise::pressure::mmH2O},
         {"cmH2O", precise::ten* precise::pressure::mmH2O},

         {"mm_H2O", precise::pressure::mmH2O},
         {"mmH2O", precise::pressure::mmH2O},
         {"water_90", precise::pressure::bases::water},
         {"water", precise::pressure::bases::water},
         {"water_[04]", precise::pressure::bases::water_4},
         {"water_[39]", precise::pressure::bases::water_39},
         {"water_[60]", precise::pressure::bases::water_60},
         {"waters_[04]", precise::pressure::bases::water_4},
         {"waters_[39]", precise::pressure::bases::water_39},
         {"waters_[60]", precise::pressure::bases::water_60},
         {"H2O", precise::pressure::bases::water},
         {"H2O_[04]", precise::pressure::bases::water_4},
         {"H2O_[39]", precise::pressure::bases::water_39},
         {"H2O_[60]", precise::pressure::bases::water_60},
         {"h2o", precise::pressure::bases::water},
         {"h2o_[04]", precise::pressure::bases::water_4},
         {"h2o_[39]", precise::pressure::bases::water_39},
         {"h2o_[60]", precise::pressure::bases::water_60},
         {"mercury", precise::pressure::bases::Hg},
         {"mercury_90", precise::pressure::bases::Hg},
         {"mercuries_90", precise::pressure::bases::Hg},
         {"mercury_[32]", precise::pressure::bases::Hg_32},
         {"mercury_[00]", precise::pressure::bases::Hg_0},
         {"mercury_[60]", precise::pressure::bases::Hg_60},
         {"mercuries", precise::pressure::bases::Hg},
         {"mercuries_[32]", precise::pressure::bases::Hg_32},
         {"mercuries_[00]", precise::pressure::bases::Hg_0},
         {"mercuries_[60]", precise::pressure::bases::Hg_60},
         {"Hg", precise::pressure::bases::Hg},
         {"Hg_[32]", precise::pressure::bases::Hg_32},
         {"Hg_[00]", precise::pressure::bases::Hg_0},
         {"Hg_[60]", precise::pressure::bases::Hg_60},
         //  {"hg",precise::pressure::bases::Hg},  //conflicts with hectogram
         {"hg_[32]", precise::pressure::bases::Hg_32},
         {"hg_[00]", precise::pressure::bases::Hg_0},
         {"hg_[60]", precise::pressure::bases::Hg_60},
         {"torr", precise::pressure::torr},
         {"Torr", precise::pressure::torr},
         {"TORR", precise::pressure::torr},
         {"$/kWh", precise::currency / precise::kWh},
         {"kWh", precise::kWh},
         {"kwh", precise::kWh},
         {"Wh", precise::W* precise::h},
         {"Wa", precise::W* precise::yr},
         {"kilowatthour", precise::kWh},
         {"MWh", precise::MWh},
         {"MWhr", precise::MWh},
         {"megawatthour", precise::MWh},
         {"M$", precise::other::MegaBuck},
         {"mil$", precise::other::MegaBuck},
         {"B$", precise::other::GigaBuck},
         {"bil$", precise::other::GigaBuck},
         {"L", precise::L},  // preferred US notation
         {"l", precise::L},
         {"LT", precise::L},
         {"liter", precise::L},
         {"litre", precise::L},
         {"mL", precise::mL},  // preferred US notation
         {"ml", precise::mL},
         {"LPM", precise::L / precise::minute},
         {"LPS", precise::L / precise::s},
         {"t", precise::mass::tonne},  // metric tonne
         {"mt", precise::mass::tonne},  // metric tonne
         {"ton_m", precise::mass::tonne},
         {"tonne", precise::mass::tonne},
         {"tonne_m", precise::mass::tonne},
         {"TNE", precise::mass::tonne},
         {"Da", precise::mass::Da},
         {"dalton", precise::mass::Da},
         {"u", precise::mass::u},
         {"amu", precise::mass::u},
         {"AMU", precise::mass::u},
         {"unifiedatomicmassunit", precise::mass::u},
         {"atomicmassunit", precise::mass::u},

         {"angstrom", precise::distance::angstrom},
         {u8"\u00C5ngstr\u00F6m", precise::distance::angstrom},
         {"\xE5ngstr\xF6m", precise::distance::angstrom},
         {u8"\u00E5ngstr\u00F6m", precise::distance::angstrom},
         {"Ao", precise::distance::angstrom},
         {"AO", precise::distance::angstrom},
         {u8"\u00C5", precise::distance::angstrom},
         {u8"A\u02DA", precise::distance::angstrom},
         {"\xC5", precise::distance::angstrom},
         {u8"\u212B", precise::distance::angstrom},  // unicode
         {"bps", precise::bit / precise::s},
         {"baud", precise::bit / precise::s},
         {"Bd", precise::bit / precise::s},
         {"BD", precise::bit / precise::s},
         {"bit", precise::bit},
         {"BIT", precise::bit},
         {"nibble", precise::data::nibble},
         {"nybble", precise::data::nibble},
         {"bit_s", precise::data::bit_s},
         {"bit-s", precise::data::bit_s},
         {"BIT_S", precise::data::bit_s},
         {"bit-logarithmic", precise::data::bit_s},
         {"bitlogarithmic", precise::data::bit_s},
         {"logbit", precise::data::bit_s},
         // b is for unit barn
         // B is for bel
         {"Bps", precise::B / precise::s},
         {"byte", precise::B},
         {"By", precise::B},
         {"BY", precise::B},
         {"kB", precise::kB},
         {"MB", precise::MB},
         {"GB", precise::GB},
         {"floatingpointoperation", precise::computation::flop},
         {"flops", precise::computation::flops},
         {"mips", precise::computation::mips},
         {"[car_m]", precise::metric::carat},
         {"ct_m", precise::metric::carat},
         {"[CAR_M]", precise::metric::carat},
         {"carat_m", precise::metric::carat},
         {"photometriccarat", precise::metric::carat},
         {"g", precise::g},
         {"gm", precise::g},
         {"gamma", precise::micro* precise::g},
         {u8"\u1D6FE", precise::micro* precise::g},
         {"gamma{mass}", precise::micro* precise::g},
         {"gamma(mass)", precise::micro* precise::g},
         {"gamma{volume}", precise::micro* precise::L},
         {"gamma(volume)", precise::micro* precise::L},
         {"lambda{volume}", precise::micro* precise::L},
         {"lambda(volume)", precise::micro* precise::L},
         {"gamma(geo)",
          precise::nano* precise::T},  // two different uses of gamma
         {"gamma{geo}",
          precise::nano* precise::T},  // two different uses of gamma
         {"gf", precise::g* constants::g0.as_unit()},
         {"gravity", constants::g0.as_unit()},  // force of gravity
         {"geopotential", constants::g0.as_unit()},  // force of gravity
         {"gp", constants::g0.as_unit()},  // force of gravity
         {"force", constants::g0.as_unit()},  // force of gravity
         {"frc", constants::g0.as_unit()},  // force of gravity
         {"kp", precise::kilo* precise::gm::pond},
         // this is probably more common than kilopoise
         {"tonforce_m", precise::mass::tonne* constants::g0.as_unit()},
         {"tf", precise::mass::tonne* constants::g0.as_unit()},
         {"hyl", precise::gm::hyl},
         {"GF", precise::g* constants::g0.as_unit()},  // gram-force vs GF
         {"gram", precise::g},
         {"mg", precise::mg},
         {"mcg", precise::micro* precise::g},
         {"milligram", precise::mg},
         {"carat", precise::metric::carat},
         {"karat", precise::metric::carat},
         {"ct", precise::metric::carat},
         // {"kt", precise_unit(200.0, precise::mg)},
         {"EER", precise::energy::EER},
         {"ppv", precise::one},  // parts per volume
         {"ppth", precise::other::ppm* precise::kilo},
         {"PPTH", precise::other::ppm* precise::kilo},
         {"ppm", precise::other::ppm},
         {"ppmv", precise::other::ppm},
         {"PPM", precise::other::ppm},
         {"[PPM]", precise::other::ppm},
         {"partspermillion", precise::other::ppm},
         {"ppb", precise::other::ppb},
         {"ppbv", precise::other::ppb},
         {"PPB", precise::other::ppb},
         {"[PPB]", precise::other::ppb},
         {"partsperbillion", precise::other::ppb},
         {"ppt", precise::other::ppb* precise::milli},
         {"pptv", precise::other::ppb* precise::milli},
         {"pptr", precise::other::ppb* precise::milli},
         {"PPTR", precise::other::ppb* precise::milli},
         {"[PPTR]", precise::other::ppb* precise::milli},
         {"partspertrillion", precise::other::ppb* precise::milli},
         {"ppq", precise::other::ppb* precise::micro},
         {"ppqv", precise::other::ppb* precise::micro},
         {"partsperquadrillion", precise::other::ppb* precise::micro},
         {"PRU", precise::clinical::pru},
         {"peripheralvascularresistanceunit", precise::clinical::pru},
         {"peripheralresistanceunit", precise::clinical::pru},
         {"potentialvorticityunit",
          precise_unit(
              1e-6,
              detail::unit_data(2, -1, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0))},
         {"PVU",
          precise_unit(
              1e-6,
              detail::unit_data(2, -1, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0))},
         // unit of thermal resistance used in describing the insulating value
         // of clothing; the amount of thermal resistance needed to maintain in
         // comfort a resting subject in a normally ventilated room (air
         // movement 10 cm/sec) at a temperature of 20 degrees C and a humidity
         // less than 50%
         {"clo",
          precise_unit(1.55e-1, precise::K* precise::m.pow(2) / precise::W)},
         {"[MET]", precise::clinical::met},
         {"MET", precise::clinical::met},
         {"metabolicEquivalentofTask", precise::clinical::met},
         {"metabolicequivalents", precise::clinical::met},
         {"[wood'U]", precise::clinical::woodu},
         {"HRU", precise::clinical::woodu},
         {"hybridreferenceunit", precise::clinical::woodu},
         {"[WOOD'U]", precise::clinical::woodu},
         {"woodunit", precise::clinical::woodu},
         {"dpt", precise::clinical::diopter},
         {"diop", precise::clinical::diopter},
         {"[DIOP]", precise::clinical::diopter},
         {"diopter", precise::clinical::diopter},
         {"dioptre", precise::clinical::diopter},
         {"diopter(lens)", precise::clinical::diopter},
         {"[p'diop]", precise::clinical::prism_diopter},
         {"pdiop", precise::clinical::prism_diopter},
         {"[P'DIOP]", precise::clinical::prism_diopter},
         {"PD", precise::clinical::prism_diopter},
         {"prismdiopter", precise::clinical::prism_diopter},
         {"prismdiopter(magnifyingpower)", precise::clinical::prism_diopter},
         {"%slope", precise::clinical::prism_diopter},
         {"%[slope]", precise::clinical::prism_diopter},
         {"%[SLOPE]", precise::clinical::prism_diopter},
         {"%ofslope", precise::clinical::prism_diopter},
         {"drp", precise::clinical::drop},
         {"[drp]", precise::clinical::drop},
         {"[DRP]", precise::clinical::drop},
         {"drop", precise::clinical::drop},
         {"drop_[20]", precise::clinical::drop},
         {"drop_m", precise::clinical::drop},
         {"drop_m_[20]", precise::clinical::drop},
         {"Ch", precise::clinical::charriere},
         {"[CH]", precise::clinical::charriere},
         {"french(cathetergauge)", precise::clinical::charriere},
         {"frenchguage", precise::clinical::charriere},
         {"Fg", precise::clinical::charriere},
         {"mesh_i", precise::clinical::mesh},
         {"[MESH_I]", precise::clinical::mesh},
         {"mesh", precise::clinical::mesh},
         {"meshes", precise::clinical::mesh},
         {"ASD", precise::special::ASD},
         {"[m/s2/Hz^(1/2)]", precise::special::ASD},
         {"[M/s2/HZ^(1/2)]", precise::special::ASD},
         {"Hz^(1/2)", precise::special::rootHertz},
         {"HZ^(1/2)", precise::special::rootHertz},
         {"squarerootofhertz", precise::special::rootHertz},
         {"squareroothertz", precise::special::rootHertz},
         {"roothertz", precise::special::rootHertz},
         // capitalized version is needed since this is also a generated unit
         {"rootHertz", precise::special::rootHertz},
         {"B", precise::data::byte},
         {"bel", precise::log::bel},
         {"dB", precise::log::dB},
         {"net", {1.0, one, commodities::packaging::net_quantity}},
         {"decibel", precise::log::dB},
         {"decibels", precise::log::dB},
         {"DB", precise::log::dB},
         {"Np", precise::log::neper},
         {"NEP", precise::log::neper},
         {"nepers", precise::log::neper},
         {"neper", precise::log::neper},
         {"octave", precise::log::logbase2},
         {"erlang", precise::generate_custom_unit(49)},
         {"Sh", precise::data::shannon},
         {"shannon", precise::data::shannon},
         {"Hart", precise::data::hartley},
         {"hartley", precise::data::hartley},
         {"SPL", precise_unit(2 * 1e-5, precise::Pa)},
         {"soundpressurelevel", precise_unit(2 * 1e-5, precise::Pa)},
         {"soundpressure", precise_unit(2 * 1e-5, precise::Pa)},
         {"sone", precise::special::sone},
         {"phon", precise::generate_custom_unit(41)},
         {"BSPL", precise::log::B_SPL},
         {"B[SPL]", precise::log::B_SPL},
         {"B_SPL", precise::log::B_SPL},
         {"b_SPL", precise::log::B_SPL},
         {"belSPL", precise::log::B_SPL},
         {"belsoundpressure", precise::log::B_SPL},
         {"dB_SPL", precise::log::dB_SPL},
         {"decibel_SPL", precise::log::dB_SPL},
         {"DB_SPL", precise::log::dB_SPL},
         {"DBSPL", precise::log::dB_SPL},
         {"B[V]", precise::log::B_V},
         {"B(V)", precise::log::B_V},
         {"BV", precise::log::B_V},
         {"Bv", precise_unit(0.775, precise::log::B_V)},
         {"Bvolt", precise::log::B_V},
         {"belvolt", precise::log::B_V},
         {"belV", precise::log::B_V},
         {"dB[V]", precise::log::dB_V},
         {"decibelV", precise::log::dB_V},
         {"dB(V)", precise::log::dB_V},
         {"DB[V]", precise::log::dB_V},
         {"B[mV]", precise::log::B_mV},
         {"B(mV)", precise::log::B_mV},
         {"belmillivolt", precise::log::B_mV},
         {"belmV", precise::log::B_mV},
         {"dB[mV]", precise::log::dB_mV},
         {"dB(mV)", precise::log::dB_mV},
         {"B[MV]", precise::log::B_mV},
         {"DB[MV]", precise::log::dB_mV},
         {"B[uV]", precise::log::B_uV},
         {"dB[uV]", precise::log::dB_uV},
         {"decibelmicrovolt", precise::log::dB_uV},
         {"B[UV]", precise::log::B_uV},
         {"B(uV)", precise::log::B_uV},
         {"BuV", precise::log::B_uV},
         {"belmicrovolt", precise::log::B_uV},
         {"DB[UV]", precise::log::dB_uV},
         {"B_tnv", precise::log::B_10nV},
         {"b_tnv", precise::log::B_10nV},
         {"bel10nanovolt", precise::log::B_10nV},
         {"dB_tnv", precise::log::dB_10nV},
         {"decibel10nanovolt", precise::log::B_10nV},
         {"B[W]", precise::log::B_W},
         {"B(W)", precise::log::B_W},
         {"belwatt", precise::log::B_W},
         {"belW", precise::log::B_W},
         {"dB[W]", precise::log::dB_W},
         {"DB[W]", precise::log::dB_W},
         {"B[kW]", precise::log::B_kW},
         {"B(kW)", precise::log::B_kW},
         {"DB[kW]", precise::log::dB_kW},
         {"B[KW]", precise::log::B_kW},
         {"belkilowatt", precise::log::B_kW},
         {"belkW", precise::log::B_kW},
         {"DB[KW]", precise::log::dB_kW},
         {"dBZ", precise::log::dBZ},
         {"BZ", precise::log::BZ},
         {"[S]", precise::laboratory::svedberg},
         {"svedbergunit", precise::laboratory::svedberg},
         {"svedberg", precise::laboratory::svedberg},
         {"HPF", precise::laboratory::HPF},
         {"hpf", precise::laboratory::HPF},
         {"highpowerfield", precise::laboratory::HPF},
         {"LPF", precise::laboratory::LPF},
         {"lpf", precise::laboratory::LPF},
         {"lowpowerfield", precise::laboratory::LPF},
         {"[arb'U]", precise::laboratory::arbU},
         {"[ARB'U]", precise::laboratory::arbU},
         {"arbitraryunit", precise::laboratory::arbU},
         {"arbunit", precise::laboratory::arbU},
         {"pdu", precise::laboratory::arbU},
         {"arbu", precise::laboratory::arbU},
         {"proceduredefinedunit", precise::laboratory::arbU},
         {"unknownunit", precise::laboratory::arbU},
         {"[IU]", precise::laboratory::IU},
         {"[iU]", precise::laboratory::IU},
         {"IU", precise::laboratory::IU},
         {"internationalunit", precise::laboratory::IU},
         {"dobson",
          precise_unit(
              446.2,
              precise::micro* precise::mol / precise::m.pow(2))},
         {"DU",
          precise_unit(
              446.2,
              precise::micro* precise::mol / precise::m.pow(2))},
         {"st", precise::volume::stere},
         {"stere", precise::volume::stere},
         {"STR", precise::volume::stere},
         {"[hnsf'U]", precise::clinical::hounsfield},
         {"[HNSF'U]", precise::clinical::hounsfield},
         {"[PFU]", precise::laboratory::PFU},
         {"PFU", precise::laboratory::PFU},
         {"pfu", precise::laboratory::PFU},
         {"plaqueformingunits", precise::laboratory::PFU},
         {"plaqueformingunit", precise::laboratory::PFU},
         {"[Lf]", precise::laboratory::Lf},
         {"[LF]", precise::laboratory::Lf},
         {"[IR]", precise::laboratory::IR},
         {"[Ir]", precise::laboratory::IR},
         {"50%tissuecultureinfectiousdose",
          precise_unit(0.69, precise::laboratory::PFU)},
         {"50%cellcultureinfectiousdose",
          precise_unit(0.69, precise::laboratory::PFU, commodities::cell)},
         {"50%embryoinfectiousdose",
          precise_unit(0.69, precise::laboratory::PFU, commodities::embryo)},
         {"TCID50", precise_unit(0.69, precise::laboratory::PFU)},
         {"CCID50",
          precise_unit(0.69, precise::laboratory::PFU, commodities::cell)},
         {"EID50",
          precise_unit(0.69, precise::laboratory::PFU, commodities::embryo)},
         {"[hp'_X]", precise_unit(1.0, precise::log::neglog10)},
         {"[HP'_X]", precise_unit(1.0, precise::log::neglog10)},
         {"[hp'_C]", precise_unit(1.0, precise::log::neglog100)},
         {"[HP'_C]", precise_unit(1.0, precise::log::neglog100)},
         {"[hp'_M]", precise_unit(1.0, precise::log::neglog1000)},
         {"[HP'_M]", precise_unit(1.0, precise::log::neglog1000)},
         {"[hp'_Q]", precise_unit(1.0, precise::log::neglog50000)},
         {"[HP'_Q]", precise_unit(1.0, precise::log::neglog50000)},
         {"pH", precise::laboratory::pH},
         {"pHscale", precise::laboratory::pH},
         {"[PH]", precise::laboratory::pH},
         {"jollies", precise::generate_custom_unit(404)}}};

UNITS_CPP14_CONSTEXPR_OBJECT std::array<
    std::pair<const char*, precise_unit>,
    1181>
    defined_unit_strings_customary{
        {{"candle", precise::other::candle},
         {"candle_it", precise::lm / precise::sr},
         {"candle_uk", {1.0416666666666666667, precise::lm / precise::sr}},
         {"candlepower", precise::other::candle},
         {"footlambert",
          {1.0 / constants::pi, precise::cd / precise::ft.pow(2)}},
         {"ftL", {1.0 / constants::pi, precise::cd / precise::ft.pow(2)}},
         {"fl", {1.0 / constants::pi, precise::cd / precise::ft.pow(2)}},
         {"CP", precise::other::candle},
         {"footcandle", precise::lumen / precise::ft.pow(2)},
         {"fc", precise::lumen / precise::ft.pow(2)},
         {"ftc", precise::lumen / precise::ft.pow(2)},
         {"stC", precise::cgs::statC_charge},
         {"statC", precise::cgs::statC_charge},
         {"statC_charge", precise::cgs::statC_charge},
         {"statC_flux", precise::cgs::statC_flux},
         {"statcoulomb", precise::cgs::statC_charge},
         {"statcoulomb_charge", precise::cgs::statC_charge},
         {"statcoulomb_flux", precise::cgs::statC_flux},
         {"Fr", precise::cgs::statC_charge},
         {"franklin", precise::cgs::statC_charge},
         {"esu", precise::cgs::statC_charge},
         {"emu", precise::cgs::emu},
         {"bar", precise::bar},
         {"BAR", precise::bar},
         {"in", precise::in},
         {"in_i", precise::in},
         {"IN_I", precise::in},
         {"inch_i", precise::i::inch},
         {"inches", precise::in},
         {"inches_i", precise::i::inch},
         {"in_US", precise::us::inch},
         {"in_us", precise::us::inch},
         {"inus", precise::us::inch},
         {"usin",
          precise::us::inch},  // this is more likely than micro square in
         {"IN_US", precise::us::inch},
         {"inch_US", precise::us::inch},
         {"inches_US", precise::us::inch},
         {"caliber", precise_unit(0.01, precise::i::inch)},
         {"rackunit", precise_unit(1.75, precise::i::inch)},
         {"RU", precise_unit(1.75, precise::i::inch)},
         {"rd", precise::us::rod},
         {"rod", precise::us::rod},
         {"rd_US", precise::us::rod},
         {"rdus", precise::us::rod},
         {"RD_US", precise::us::rod},
         {"rod_US", precise::us::rod},
         {"rods_US", precise::us::rod},
         {"ch", precise::us::chain},
         {"chain", precise::us::chain},
         {"chain_US", precise::us::chain},
         {"ch_US", precise::us::chain},
         {"CH_US", precise::us::chain},
         {"gunterschain", precise::us::chain},
         {"gunterschain_US", precise::us::chain},
         {"surveyorsschain_US", precise::us::chain},
         {"surveyorsschain", precise::us::chain},
         {"lk_US", precise::us::link},
         {"li", precise::us::link},
         {"lnk", precise::us::link},
         {"link_US", precise::us::link},
         {"li_US", precise::us::link},
         {"link", precise::us::link},
         {"LK_US", precise::us::link},
         {"linkforGunterschain_US", precise::us::link},
         {"rch_US", precise::us::engineers::chain},
         {"RCH_US", precise::us::engineers::chain},
         {"ramdenschain_US", precise::us::engineers::chain},
         {"rlk_US", precise::us::engineers::link},
         {"RLK_US", precise::us::engineers::link},
         {"linkforRamdenschain_US", precise::us::engineers::link},
         {"fur", precise::us::furlong},
         {"furlong", precise::us::furlong},
         {"fur_US", precise::us::furlong},
         {"FUR_US", precise::us::furlong},
         {"furlong_US", precise::us::furlong},
         {"FUR_I", precise::us::furlong},

         {"mi_US", precise::us::mile},
         {"MI_US", precise::us::mile},
         {"mile_US", precise::us::mile},
         {"lea_US", precise_unit(3.0, precise::us::mile)},
         {"league_US", precise_unit(3.0, precise::us::mile)},

         {"mil_US", precise::us::mil},
         {"MIL_US", precise::us::mil},
         {"inch", precise::in},
         {"thou", precise::imp::thou},
         {"thousandth", precise::in* precise::milli},
         {"mil", precise::i::mil},
         {"mil_i", precise::i::mil},
         {"MIL_I", precise::i::mil},
         {"cml", precise::i::circ_mil},
         {"circularmil", precise::i::circ_mil},
         {"circularinch",
          precise_unit{constants::pi / 4.0, precise::i::inch.pow(2)}},
         {"cml_i", precise::i::circ_mil},
         {"circularmil_i", precise::i::circ_mil},
         {"CML_I", precise::i::circ_mil},
         {"hd", precise::i::hand},
         {"hd_i", precise::i::hand},
         {"HD_I", precise::i::hand},
         {"hand", precise::i::hand},
         {"ft", precise::ft},
         {"ft_i", precise::ft},
         {"FT_I", precise::ft},
         {"bf", precise::i::board_foot},
         {"BF", precise::i::board_foot},
         {"bf_i", precise::i::board_foot},
         {"BDFT", precise::i::board_foot},
         {"FBM", precise::i::board_foot},
         {"BF_I", precise::i::board_foot},
         {"boardfoot", precise::i::board_foot},
         {"boardfeet", precise::i::board_foot},
         {"boardfeet_i", precise::i::board_foot},
         {"cr", precise::i::cord},
         {"crd", precise::i::cord},
         {"cord", precise::i::cord},
         {"crd_i", precise::i::cord},
         {"cords_i", precise::i::cord},
         {"cr_i", precise::i::cord},
         {"[CR_I]", precise::i::cord},
         {"crd_US", precise::us::cord},
         {"CRD_US", precise::us::cord},
         {"cord_US", precise::us::cord},
         {"ftus", precise::ft},
         {"ft_US", precise::ft},
         {"FT_US", precise::ft},
         {"foot_US", precise::ft},
         {"feet_US", precise::ft},
         {"ft^2", precise::ft* precise::ft},
         {"sin", precise::in* precise::in},
         {"sin_i", precise::in* precise::in},
         {"SIN_I", precise::in* precise::in},
         {"ci", precise::in.pow(3)},  // cubic inch instead of centiinch
         {"cin", precise::in.pow(3)},  // cubic inch instead of centiinch
         {"cin_i", precise::in.pow(3)},
         {"CIN_I", precise::in.pow(3)},
         {"sf", precise::ft* precise::ft},
         {"sft", precise::ft* precise::ft},
         {"sft_i", precise::ft* precise::ft},
         {"SFT_I", precise::ft* precise::ft},
         {"SCF", precise::energy::scf},  // standard cubic foot
         {"standardcubicfoot", precise::energy::scf},  // standard cubic foot
         {"CCF", precise::hundred* precise::energy::scf},  // centum cubic foot
         {"MCF", precise::kilo* precise::energy::scf},  // millum cubic foot
         {"MMCF", precise::mega* precise::energy::scf},  // million cubic foot
         {"MMSCF", precise::mega* precise::energy::scf},  // million cubic foot
         {"BCF", precise::giga* precise::energy::scf},  // billion cubic foot
         {"TCF", precise::tera* precise::energy::scf},  // trillion cubic foot
         {"QCF", precise::exa* precise::energy::scf},  // quadrillion cubic foot
         {"Mcf", precise::kilo* precise::energy::scf},  // millum cubic foot
         {"MMcf", precise::mega* precise::energy::scf},  // million cubic foot
         {"Bcf", precise::giga* precise::energy::scf},  // billion cubic foot
         {"Tcf", precise::tera* precise::energy::scf},  // trillion cubic foot
         {"Qcf", precise::exa* precise::energy::scf},  // quadrillion cubic foot
         {"cf", precise::energy::scf},
         {"scf", precise::energy::scf},
         {"std", precise::energy::scf},
         {"ncf", precise::energy::ncf},
         {"mcf", precise::kilo* precise::energy::scf},
         {"ccf", precise::hundred* precise::energy::scf},
         {"cft", precise::ft.pow(3)},
         {"cft_i", precise::ft.pow(3)},
         {"CFT_I", precise::ft.pow(3)},
         {"foot", precise::ft},
         {"foot_i", precise::i::foot},
         {"feet", precise::ft},
         {"feet_i", precise::i::foot},
         {"YD", precise::yd},
         {"yd", precise::yd},
         {"yd_i", precise::yd},
         {"yard_i", precise::yd},
         {"yards_i", precise::yd},
         {"YD_I", precise::yd},
         {"ydus", precise::us::yard},
         {"yd_US", precise::us::yard},
         {"ydsus", precise::us::yard},
         {"YD_US", precise::us::yard},
         {"yardus", precise::us::yard},
         {"yard_US", precise::us::yard},
         {"yards_US", precise::us::yard},
         {"marathon", {26.2, precise::mile}},
         {"sy", precise::yd* precise::yd},
         {"syd", precise::yd* precise::yd},
         {"syd_i", precise::yd* precise::yd},
         {"SYD_I", precise::yd* precise::yd},
         {"cy", precise::yd.pow(3)},
         {"cyd", precise::yd.pow(3)},
         {"cyd_i", precise::yd.pow(3)},
         {"CYD_I", precise::yd.pow(3)},
         {"in_br", precise::imp::inch},
         {"inch_br", precise::imp::inch},
         {"inches_br", precise::imp::inch},
         {"barleycorn", precise::imp::barleycorn},
         {"IN_BR", precise::imp::inch},
         {"ft_br", precise::imp::foot},
         {"FT_BR", precise::imp::foot},
         {"foot_br", precise::imp::foot},
         {"rd_br", precise::imp::rod},
         {"RD_BR", precise::imp::rod},
         {"rod_br", precise::imp::rod},
         {"perch", precise::imp::rod},
         {"pole", precise::imp::rod},
         {"ch_br", precise::imp::chain},
         {"CH_BR", precise::imp::chain},
         {"gunterschain_br", precise::imp::chain},
         {"lk_br", precise::imp::link},
         {"LK_BR", precise::imp::link},
         {"linkforGunterschain_br", precise::imp::link},
         {"fth_br", precise::nautical::fathom},
         {"FTH_BR", precise::nautical::fathom},
         {"fathom_br", precise::nautical::fathom},
         {"fathoms_br", precise::nautical::fathom},
         {"pc_br", precise::imp::pace},
         {"PC_BR", precise::imp::pace},
         {"pace_br", precise::imp::pace},
         {"yd_br", precise::imp::yard},
         {"YD_BR", precise::imp::yard},
         {"yard_br", precise::imp::yard},
         {"nmi_br", precise::imp::nautical_mile},
         {"[NMI_BR]", precise::imp::nautical_mile},
         {"nauticalmile_br", precise::imp::nautical_mile},
         {"admiraltymile", precise::imp::nautical_mile},
         {"seamile_br", precise::imp::nautical_mile},
         {"cable_br", precise_unit(0.1, precise::imp::nautical_mile)},
         {"nauticalleague_br", precise_unit(3.0, precise::imp::nautical_mile)},
         {"sealeague_br", precise_unit(3.0, precise::imp::nautical_mile)},
         {"kn_br", precise::imp::nautical_mile / precise::hr},
         {"KN_BR", precise::imp::nautical_mile / precise::hr},
         {"knot_br", precise::imp::nautical_mile / precise::hr},
         {"mi_br", precise::imp::mile},
         {"MI_BR", precise::imp::mile},
         {"mile_br", precise::imp::mile},
         {"gal_br", precise::imp::gallon},
         {"GAL_BR", precise::imp::gallon},
         {"gallon_br", precise::imp::gallon},
         {"gallon_br_FL", precise::imp::gallon},
         {"gallon_FL_br", precise::imp::gallon},
         {"yard", precise::yd},
         {"cubit", precise::distance::cubit},
         {"cubit_br", precise::distance::cubit},
         {"ell", precise_unit(45.0, precise::in)},
         {"ell_br", precise_unit(45.0, precise::in)},
         {"englishell", precise_unit(45.0, precise::in)},
         {"scottishell", precise_unit(0.9398, precise::m)},
         {"frenchell", precise_unit(1.3716, precise::m)},
         {"flemishell", precise_unit(.6858, precise::m)},
         // because cubit has cu in it which indicates cubed
         {"longcubit", precise::distance::longcubit},
         // my kids have taken to measuring thing in number of daddy's so it
         // need to be in the app
         {"daddy", {75.0, precise::in}},
         {"theoretical",
          {1.0, precise::one, commodities::packaging::theoretical}},
         {"actual", {1.0, precise::one, commodities::packaging::actual}},
         {"arpent", precise::distance::arpent_us},
         {"arpent_fr", precise::distance::arpent_fr},
         {"arpentlin", precise::distance::arpent_fr},
         {"biweekly", precise_unit(0.5, precise::time::week.inv())},
         {"fortnight", precise::time::fortnight},
         {"yearleap", precise_unit(366.0, precise::time::day)},  // year
         {"draconicyear", precise_unit(346.620075883, precise::time::day)},
         {"lunaryear", precise_unit(12.0, precise::time::mos)},
         {"anomalisticmonth", precise_unit(27.554550, precise::time::day)},
         {"anomalisticyear", precise_unit(365.2596423611, precise::time::day)},
         {"gon", precise::angle::gon},
         {"gon(grade)", precise::angle::gon},
         {"GON", precise::angle::gon},
         {u8"\u25A1^g", precise::angle::gon},
         {"^g", precise::angle::gon},
         {"grad", precise::angle::grad},
         {"gradians", precise::angle::grad},
         {"grade", precise::angle::grad},
         {"mil_ang", precise_unit(0.0625, precise::angle::grad)},
         {"brad", precise::angle::brad},
         {"degF", precise::degF},
         {"degsF", precise::degF},
         {"DEGF", precise::degF},
         {u8"\u2109", precise::degF},  // direct unicode symbol
         {"degR", precise::temperature::degR},
         {"degsR", precise::temperature::degR},
         {"DEGR", precise::temperature::degR},
         {u8"\u00B0R", precise::temperature::degR},
         {u8"\u00B0r", precise::temperature::reaumur},
         {"\xB0R", precise::temperature::degR},
         {"\xB0R@459.67", precise::temperature::degF},
         {u8"\u00B0R@459.67", precise::temperature::degR},
         {"\xB0r", precise::temperature::reaumur},
         {"DEGRE", precise::temperature::reaumur},
         {"degRe", precise::temperature::reaumur},
         {"degsRe", precise::temperature::reaumur},
         {u8"degR\u00e9aumur", precise::temperature::reaumur},
         {u8"\u00B0R\u00e9", precise::temperature::reaumur},
         {u8"\u00B0Re", precise::temperature::reaumur},
         {u8"\u00B0Ra", precise::temperature::degR},
         {"\xB0Re", precise::temperature::reaumur},
         {"\xB0Ra", precise::temperature::degR},
         {"degReaumur", precise::temperature::reaumur},
         {"reaumur", precise::temperature::reaumur},
         {u8"r\u00e9aumur", precise::temperature::reaumur},
         {"degFahrenheit", precise::degF},
         {"degRankine", precise::temperature::degR},
         {"degrankine", precise::temperature::degR},
         {"rankine", precise::temperature::degR},
         // gas oven temperature conversions
         {"gasmark", {14.0, precise::temperature::degC}},
         {"gasnumber", {14.0, precise::temperature::degC}},
         {"gas", {14.0, precise::temperature::degC}},
         {"regulomark", {14.0, precise::temperature::degC}},
         {"regulo", {14.0, precise::temperature::degC}},
         {"stufe", {25.0, precise::temperature::degC}},
         {"Thermostat", {27.77778, precise::temperature::degC}},
         {"Th", {27.77778, precise::temperature::degC}},
         {"oF", precise::degF},
         // this is two strings since F could be interpreted as hex and I don't
         // want it to be
         {"\xB0"
          "F",
          precise::degF},
         {u8"\u00b0F", precise::degF},
         {"fahrenheit", precise::degF},
         {"perm",
          {57.2135,
           precise::nano* precise::g /
               (precise::s * precise::m.pow(2) * precise::Pa)}},
         {"perm_US",
          {57.2135,
           precise::nano* precise::g /
               (precise::s * precise::m.pow(2) * precise::Pa)}},
         {"perm_m",
          {86.8127,
           precise::nano* precise::g /
               (precise::s * precise::m.pow(2) * precise::Pa)}},
         {"perm_[00]",
          {57.2135,
           precise::nano* precise::g /
               (precise::s * precise::m.pow(2) * precise::Pa)}},
         {"perm_[23]",
          {57.4525,
           precise::nano* precise::g /
               (precise::s * precise::m.pow(2) * precise::Pa)}},
         {"perms_US",
          {57.2135,
           precise::nano* precise::g /
               (precise::s * precise::m.pow(2) * precise::Pa)}},
         {"perms_m",
          {86.8127,
           precise::nano* precise::g /
               (precise::s * precise::m.pow(2) * precise::Pa)}},
         {"perms_[00]",
          {57.2135,
           precise::nano* precise::g /
               (precise::s * precise::m.pow(2) * precise::Pa)}},
         {"perms_[23]",
          {57.4525,
           precise::nano* precise::g /
               (precise::s * precise::m.pow(2) * precise::Pa)}},
         {"mi", precise::mile},
         {"mi_i", precise::mile},
         {"league", precise::i::league},
         {"lea", precise::i::league},
         {"MI_I", precise::mile},
         {"miI", precise::mile},
         {"smi", precise::mile* precise::mile},
         {"smi_US", precise::us::mile* precise::us::mile},
         {"SMI_US", precise::us::mile* precise::us::mile},
         {"mile", precise::mile},
         {"mile_i", precise::mile},
         {"miles_i", precise::mile},
         {"srd_US", precise::us::rod* precise::us::rod},
         {"SRD_US", precise::us::rod* precise::us::rod},
         {"sct", precise::us::section},
         {"SCT", precise::us::section},
         {"section", precise::us::section},
         {"homestead", precise::us::homestead},
         {"twp", precise::us::township},
         {"TWP", precise::us::township},
         {"township", precise::us::township},
         {"township_US", precise::us::township},
         {"astronomicalunitBIPM2006", precise::distance::au_old},
         {"auold", precise::distance::au_old},
         {"ua", precise::distance::au_old},
         {"FEU", precise_unit(40.0 * 8.0 * 8.5, precise::ft.pow(3))},
         {"TEU", {20.0 * 8.0 * 8.5, precise::ft.pow(3)}},
         {"fortyfootequivalent",
          precise_unit(40.0 * 8.0 * 8.5, precise::ft.pow(3))},
         {"twentyfootequivalent",
          precise_unit(20.0 * 8.0 * 8.5, precise::ft.pow(3))},
         {"fortyfootcontainer",
          precise_unit(40.0 * 8.0 * 8.5, precise::ft.pow(3))},
         {"twentyfootcontainer",
          precise_unit(20.0 * 8.0 * 8.5, precise::ft.pow(3))},
         {"acre", precise::acre},
         {"acr", precise::acre},
         {"ac", precise::acre},
         {"acft", precise::acre* precise::us::foot},
         {"ac*ft", precise::acre* precise::us::foot},
         {"acre-foot", precise::acre* precise::us::foot},
         {"acrefoot", precise::acre* precise::us::foot},
         {"acre_US", precise::acre},
         {"acr_US", precise::acre},
         {"[ACR_US]", precise::acre},
         {"[ACR_BR]", precise::imp::acre},
         {"acr_br", precise::imp::acre},
         {"acre_br", precise::imp::acre},
         {"acres_br", precise::imp::acre},
         {"buildersacre", {40000.0, precise::ft.pow(2)}},
         {"cricketpitch", {3.66 * 22.56, precise::m.pow(2)}},
         {"cricketpitches", {3.66 * 22.56, precise::m.pow(2)}},
         {"sitas", {100.0, m.pow(2)}},
         {"footballpitch", {105.0 * 68.0, precise::m.pow(2)}},
         {"footballpitches", {105.0 * 68.0, precise::m.pow(2)}},
         {"footballfield", {360.0 * 160.0, precise::ft.pow(2)}},
         {"Gasolineat15.5C",
          precise_unit(739.33, precise::kg / precise::m.pow(3))},
         {"rood", {0.25, precise::imp::acre}},
         // porous solid permeability
         {"darcy", {9.869233e-13, precise::m.pow(2)}},
         {"manmonth", {1.0, precise::time::mog, commodities::people}},
         {"$/gal", precise::currency / precise::gal},
         // allow lower case watt abbreviation
         {"w", precise::watt},
         {"hp", precise::hp},
         {"HP", precise::hp},
         {"horsepower", precise::hp},
         {"donkeypower", {250.0, precise::watt}},
         {"horsepower_i", precise::hp},
         {"horsepower_br", precise::hp},
         {"[HP]", precise::hp},
         {"hpI", precise::hp},
         {"hp(I)", precise::hp},
         {"horsepower-mechanical", precise::hp},
         {"horsepowermechanical", precise::hp},
         {"mechanicalhorsepower", precise::hp},
         {"shafthorsepower", precise::hp},
         {"horsepower_mech", precise::hp},
         {"horsepower_H2O", precise::hp},
         {"waterhorsepower", precise::hp},
         {"hp_mech", precise::hp},
         {"hp_H2O", precise::hp},
         {"hpE", precise::power::hpE},
         {"hp(E)", precise::power::hpE},
         {"horsepower-electrical", precise::power::hpE},
         {"horsepower_electric", precise::power::hpE},
         {"electrichorsepower", precise::power::hpE},
         {"hp_electric", precise::power::hpE},
         {"hpM", precise::power::hpM},
         {"hp_m", precise::power::hpM},
         {"hp(M)", precise::power::hpM},
         {"horsepower_m", precise::power::hpM},
         {"hpS", precise::power::hpS},
         {"hp(S)", precise::power::hpS},
         {"horsepower-steam", precise::power::hpS},
         {"horsepower_steam", precise::power::hpS},
         {"boilerhorsepower", precise::power::hpS},
         {"hp_steam", precise::power::hpS},
         {"mph", precise::mph},
         {"mileperhour", precise::mph},

         {"nauticalmile", precise::nautical::mile},
         {"nmile", precise::nautical::mile},
         {"nauticalmile_i", precise::nautical::mile},
         {"nauticalleague", precise::nautical::league},
         {"nauticalleage_i", precise::nautical::league},
         {"nauticalleague_i", precise::nautical::league},
         {"seamile", precise::nautical::mile},
         {"seamile_i", precise::nautical::mile},
         {"sealeague", precise::nautical::league},
         {"sealeage_i", precise::nautical::league},
         {"sealeague_i", precise::nautical::league},
         // this prevents some other issues with the string "br"
         {"br", precise::invalid},
         {"nmi", precise::nautical::mile},
         {"nmi_i", precise::nautical::mile},
         {"NMI_I", precise::nautical::mile},
         {"fth", precise::nautical::fathom},
         {"fath", precise::nautical::fathom},
         {"fth_US", precise::nautical::fathom},
         {"fthus", precise::nautical::fathom},
         {"FTH_US", precise::nautical::fathom},
         {"fathom_US", precise::nautical::fathom},
         {"fathom", precise::nautical::fathom},
         {"fathom_i", precise::nautical::fathom},
         {"fathoms_i", precise::nautical::fathom},
         {"cable_i", precise_unit(0.1, precise::nautical::mile)},
         {"cable", precise_unit(0.1, precise::nautical::mile)},
         {"cable_US", precise_unit(219.5, precise::m)},
         {"fth_i", precise::nautical::fathom},
         {"FTH_I", precise::nautical::fathom},
         {"kn", precise::nautical::knot},
         {"knot", precise::nautical::knot},
         {"knot_i", precise::nautical::knot},
         {"knots_i", precise::nautical::knot},
         {"kn_i", precise::nautical::knot},
         {"KN_I", precise::nautical::knot},
         {"knots", precise::nautical::knot},
         {"kts", precise::nautical::knot},
         {"fps", precise::ft / precise::s},
         {"fpm", precise::ft / precise::minute},
         {"fph", precise::ft / precise::hr},
         {"cal", precise::cal},
         {"smallcalorie", precise::cal},
         {"Cal", precise::energy::kcal},
         {"CAL", precise::cal},
         {"[Cal]", precise::energy::kcal},
         {"[CAL]", precise::energy::kcal},
         {"nutritionlabelCalories", precise::energy::kcal},
         {"foodcalories", precise::energy::kcal},
         {"largecalories", precise::energy::kcal},
         {"kilogramcalories", precise::energy::kcal},
         {"calorie(nutritional)", precise::energy::cal_it},
         {"cal_[15]", precise::energy::cal_15},
         {u8"cal_15\u00B0C", precise::energy::cal_15},
         {u8"calorieat15\u00B0C", precise::energy::cal_15},
         {"caloriesat15C", precise::energy::cal_15},
         {"calories15C", precise::energy::cal_15},
         {"calorie15C", precise::energy::cal_15},
         {"calorie_15", precise::energy::cal_15},
         {"cal_15", precise::energy::cal_15},
         {"calorie_[15]", precise::energy::cal_15},
         {"cal_[20]", precise::energy::cal_20},
         {u8"calorieat20\u00B0C", precise::energy::cal_20},
         {"caloriesat20C", precise::energy::cal_20},
         {"calorie20C", precise::energy::cal_20},
         {"calorie_[20]", precise::energy::cal_20},
         {"cals20C", precise::energy::cal_20},
         {"cal20C", precise::energy::cal_20},
         {"cals15C", precise::energy::cal_15},
         {"cal15C", precise::energy::cal_15},
         {"cal15", precise::energy::cal_15},
         {"cal20", precise::energy::cal_20},
         {"cal_20", precise::energy::cal_20},
         {u8"cal_20\u00B0C", precise::energy::cal_20},
         {"CAL_[15]", precise::energy::cal_15},
         {"CAL_[20]", precise::energy::cal_20},
         {"cal_m", precise::energy::cal_mean},
         {"calorie_m", precise::energy::cal_mean},
         {"cal_IT", precise::energy::cal_it},
         {"CAL_M", precise::energy::cal_mean},
         {"CAL_IT", precise::energy::cal_it},
         {"calorie_IT", precise::energy::cal_it},
         {"caloriesIT", precise::energy::cal_it},
         {"cal_th", precise::energy::cal_th},
         {"CAL_TH", precise::energy::cal_th},
         {"calorie_th", precise::energy::cal_th},
         {"kcal_th", precise::kilo* precise::energy::cal_th},
         {"calorie", precise::cal},
         {"kcal", precise::energy::kcal},
         {"kCal", precise::energy::kcal},
         {"KCAL", precise::energy::kcal},
         {"Kcal", precise::energy::kcal},
         {"kilocalorie", precise::energy::kcal},
         {"kilocalorie_m", precise::kilo* precise::energy::cal_mean},
         {"btu", precise::energy::btu_it},
         {"Btu", precise::energy::btu_it},
         {"BTU", precise::energy::btu_it},
         {"bTU", precise::energy::btu_it},
         {"Mbtu", precise_unit(1000.0, precise::energy::btu_it)},
         {"MBtu", precise_unit(1000.0, precise::energy::btu_it)},
         {"MBTU", precise_unit(1000.0, precise::energy::btu_it)},
         // Next 2 are ucum definitions
         {"[Btu]", precise::energy::btu_th},
         {"[BTU]", precise::energy::btu_th},
         {"British thermal unit", precise::energy::btu_th},
         // this is for name matching with the UCUM standard
         {"Btu_39", precise::energy::btu_39},
         {"BTU_39", precise::energy::btu_39},
         {"bTU_39", precise::energy::btu_39},
         {"Btu_[39]", precise::energy::btu_39},
         {"BTU_[39]", precise::energy::btu_39},
         {"bTU_[39]", precise::energy::btu_39},
         {"BTU39F", precise::energy::btu_39},
         {u8"BTU39\u00B0F", precise::energy::btu_39},
         {u8"btu_39\u00B0F", precise::energy::btu_39},
         {"Btu_59", precise::energy::btu_59},
         {"bTU_[59]", precise::energy::btu_59},
         {"BTU_59", precise::energy::btu_59},
         {"BTU59F", precise::energy::btu_59},
         {u8"BTU59\u00B0F", precise::energy::btu_59},
         {u8"btu_59\u00B0F", precise::energy::btu_59},
         {"Btu_60", precise::energy::btu_60},
         {"BTU_60", precise::energy::btu_60},
         {"BTU60F", precise::energy::btu_60},
         {"bTU_60", precise::energy::btu_60},
         {"Btu_[60]", precise::energy::btu_60},
         {"BTU_[60]", precise::energy::btu_60},
         {"bTU_[60]", precise::energy::btu_60},
         {u8"BTU60\u00B0F", precise::energy::btu_60},
         {u8"btu_60\u00B0F", precise::energy::btu_60},
         {"Btu_m", precise::energy::btu_mean},
         {"BTU_m", precise::energy::btu_mean},
         {"bTU_m", precise::energy::btu_mean},
         {"BTU_M", precise::energy::btu_mean},
         {"Btu_IT", precise::energy::btu_it},
         {"BTU_IT", precise::energy::btu_it},
         {"bTU_IT", precise::energy::btu_it},
         {"Btu_th", precise::energy::btu_th},
         {"BTU_TH", precise::energy::btu_th},
         {"BTU_th", precise::energy::btu_th},
         {"bTU_th", precise::energy::btu_th},
         {"CHU", precise_unit(1899.0, precise::J)},
         {"TNT", precise::energy::ton_tnt},
         {"tontnt", precise::energy::ton_tnt},
         {"tonoftnt", precise::energy::ton_tnt},
         {"tonsoftnt", precise::energy::ton_tnt},
         {"tonsofTNT", precise::energy::ton_tnt},
         {"ton(explosives)", precise::energy::ton_tnt},
         {"kiloton", precise_unit(1000.0, precise::energy::ton_tnt)},
         {"megaton", precise_unit(1000000.0, precise::energy::ton_tnt)},
         {"gigaton", precise_unit(1000000000.0, precise::energy::ton_tnt)},
         {"kton", precise_unit(1000.0, precise::energy::ton_tnt)},
         {"Mton", precise_unit(1000000.0, precise::energy::ton_tnt)},
         {"Gton", precise_unit(1000000000.0, precise::energy::ton_tnt)},
         {"gramoftnt", precise::micro* precise::energy::ton_tnt},
         {"gramsofTNT", precise::micro* precise::energy::ton_tnt},
         {"gramofTNT", precise::micro* precise::energy::ton_tnt},
         {"gramsoftnt", precise::micro* precise::energy::ton_tnt},
         // Gigatonne carbon
         {"C90", precise::conventional::coulomb90},
         {"ohm90", precise::conventional::ohm90},
         {u8"\u03A990", precise::conventional::ohm90},  // Greek Omega
         {u8"\u212690", precise::conventional::ohm90},  // Unicode Ohm symbol
         {"A90", precise::conventional::ampere90},
         {"V90", precise::conventional::volt90},
         {"W90", precise::conventional::watt90},
         {"F90", precise::conventional::farad90},
         {"H90", precise::conventional::henry90},
         {"C_90", precise::conventional::coulomb90},
         {"ohm_90", precise::conventional::ohm90},
         {u8"\u03A9_90", precise::conventional::ohm90},  // Greek Omega
         {u8"\u2126_90", precise::conventional::ohm90},  // Unicode Ohm symbol
         {"A_90", precise::conventional::ampere90},
         {"V_90", precise::conventional::volt90},
         {"W_90", precise::conventional::watt90},
         {"F_90", precise::conventional::farad90},
         {"H_90", precise::conventional::henry90},
         {"coulomb90", precise::conventional::coulomb90},
         {"ampere90", precise::conventional::ampere90},
         {"amp90", precise::conventional::ampere90},
         {"volt90", precise::conventional::volt90},
         {"watt90", precise::conventional::watt90},
         {"farad90", precise::conventional::farad90},
         {"henry90", precise::conventional::henry90},
         {"boe", precise::energy::boe},
         {"barrelofoilequivalent", precise::energy::boe},
         {"barrelsofoilequivalent", precise::energy::boe},
         {"tce", precise::energy::tce},
         {"tonneofcoalequivalent", precise::energy::tce},
         {"lge", precise::energy::lge},
         {"Lge", precise::energy::lge},
         {"literofgasolineequivalent", precise::energy::lge},
         {"foeb", precise::energy::foeb},
         {"fueloilequivalentof1barrel", precise::energy::foeb},

         {"CFM", precise::other::CFM},
         {"CFS", precise::ft.pow(3) / precise::s},
         {"cfm", precise::other::CFM},
         {"cfs", precise::ft.pow(3) / precise::s},
         {"cubicfeetperminute", precise::other::CFM},
         {"gps", precise::gal / precise::s},
         {"gpm", precise::gal / precise::minute},
         {"gph", precise::gal / precise::hr},
         {"att", precise::pressure::att},
         {"at", precise::pressure::att},
         {"technicalatmosphere", precise::pressure::att},
         {"atmospheretechnical", precise::pressure::att},
         {"techatmosphere", precise::pressure::att},
         {"techatm", precise::pressure::att},
         {"ATT", precise::pressure::att},
         {"poundal", precise::av::poundal},
         {"pdl", precise::av::poundal},
         {"psi", precise::pressure::psi},
         {"psig", precise::pressure::psig},
         {"ksi", precise_unit(1000.0, precise::pressure::psi)},
         {"psia", precise::pressure::psi},
         {"poundpersquareinch",
          precise::pressure::psi},  // pressure not areal density
         {"poundspersquareinch", precise::pressure::psi},
         {"pound/squareinch",
          precise::pressure::psi},  // pressure not areal density
         {"pounds/squareinch", precise::pressure::psi},
         {"[PSI]", precise::pressure::psi},
         {"[psi]", precise::pressure::psi},
         {"inH2O", precise::pressure::inH2O},
         {"inAq", precise::pressure::inH2O},
         {"in_Aq", precise::pressure::inH2O},
         {"inHg", precise::pressure::inHg},
         {"[in_i'Hg]", precise::pressure::inHg},
         {"[IN_I'HG]", precise::pressure::inHg},
         {"[in_i'H2O]", precise::pressure::inH2O},
         {"[IN_I'H2O]", precise::pressure::inH2O},
         {"iwg", precise::pressure::inH2O},
         // cgs unit of electric quadrupole
         {"buckingham",
          {1e-26, precise::cgs::statC_charge* precise::cm.pow(2)}},
         {"landauer", {0.0175, precise::energy::eV / precise::data::bit}},
         {"quad", {1e15, precise::energy::btu_it}},
         {"therm", precise::energy::therm_ec},
         {"thm", precise::energy::therm_ec},
         {"therm(EC)", precise::energy::therm_ec},
         {"thm_ec", precise::energy::therm_ec},
         {"therm_ec", precise::energy::therm_ec},
         {"therm_US", precise::energy::therm_us},
         {"thm_US", precise::energy::therm_us},
         {"therm_br", precise::energy::therm_br},
         {"thermie", precise::MTS::thermie},
         {"gal", precise::gal},
         {"gal_US", precise::us::gallon},
         {"GAL_US", precise::us::gallon},
         {"gallon_US", precise::us::gallon},
         {"gallon_FL_US", precise::us::gallon},
         {"gallon_US_FL", precise::us::gallon},
         {"gal_wi", precise::us::dry::winchester_gallon},  // winchester gallon
         {"winchestergallon",
          precise::us::dry::winchester_gallon},  // winchester gallon
         {"winchestercorngallon",
          precise::us::dry::winchester_gallon},  // winchester gallon
         {"corngallon",
          precise::us::dry::winchester_gallon},  // winchester gallon
         {"corngallon_br",
          precise::us::dry::winchester_gallon},  // winchester gallon
         {"alegallon", precise::us::ale_gallon},
         {"wigal", precise::us::dry::winchester_gallon},
         {"GAL_WI", precise::us::dry::winchester_gallon},
         {"drygallon_US", precise::us::dry::gallon},
         {"drybarrel", precise::us::dry::barrel},
         {"drybarrel_US", precise::us::dry::barrel},
         {"gallon-historical", precise::us::dry::winchester_gallon},
         {"firkin", precise_unit(9.0, precise::us::dry::gallon)},
         {"rundlet", precise_unit{18.0, precise::imp::gallon}},
         {"rundlet_wine", precise_unit{18.0, precise::imp::gallon}},
         {"tierce", precise_unit{42.0, precise::imp::gallon}},
         {"tierce_wine", precise_unit{42.0, precise::imp::gallon}},
         {"tierce_br", precise_unit{42.0, precise::imp::gallon}},
         {"firkin_wine", precise_unit(70.0, precise::imp::gallon)},
         {"butterfirkin", precise_unit(25.40117, precise::kg)},
         {"soapfirkin", precise_unit(25.40117, precise::kg)},
         {"firkin_br", precise_unit(9.0, precise::imp::gallon)},
         {"kilderkin", precise_unit(18.0, precise::imp::gallon)},
         {"kilderkin_wine", precise_unit(18.0, precise::imp::gallon)},
         {"hogshead_wine", precise_unit(52.5, precise::imp::gallon)},
         {"tun_wine", precise_unit(210.0, precise::imp::gallon)},
         {"butt_wine", precise_unit(105.0, precise::imp::gallon)},
         {"barrel_wine", precise_unit(26.25, precise::imp::gallon)},
         {"beerbarrel_br", precise_unit(26.25, precise::imp::gallon)},
         {"bbl", precise::us::barrel},
         {"barrel", precise::us::barrel},
         {"bbl_us", precise::us::barrel},
         {"bbl_US", precise::us::barrel},
         {"BBL_US", precise::us::barrel},
         {"barrel_US", precise::us::barrel},
         {"keg", precise_unit(15.5, precise::us::gallon)},
         {"fullkeg", precise_unit(15.5, precise::us::gallon)},
         {"importkeg", precise_unit(13.2, precise::us::gallon)},
         {"minikeg", precise_unit(1.32, precise::us::gallon)},
         {"bubba", precise_unit(1.32, precise::us::gallon)},
         {"sixtel", precise_unit(5.16, precise::us::gallon)},
         {"cornykeg", precise_unit(5.16, precise::us::gallon)},
         {"flbarrel_US", precise::us::flbarrel},
         {"puncheon", precise_unit(84.0, precise::us::gallon)},
         {"puncheon_wine", precise_unit(84.0, precise::us::gallon)},
         {"gallon_wine", precise::imp::winegallon},
         {"barrel_US_FL", precise::us::flbarrel},
         {"barrel_FL_US", precise::us::flbarrel},
         {"flbarrel", precise::us::flbarrel},
         {"barrel_FL", precise::us::flbarrel},
         {"gal_ca", precise::canada::gallon},
         {"gallon_ca", precise::canada::gallon},
         {"tbsp_ca", precise::canada::tbsp},
         {"tsp_ca", precise::canada::tsp},
         {"tablespoon_ca", precise::canada::tbsp},
         {"teaspoon_ca", precise::canada::tsp},
         {"cup_ca", precise::canada::cup},
         {"traditional_cup_ca", precise::canada::cup_trad},
         {"drum", precise::volume::drum},
         {"gallon", precise::gal},
         {"hogshead", precise::us::hogshead},
         {"canada", precise_unit(1.4, precise::L)},
         {"tonregister", precise_unit(100.0, precise::ft.pow(3))},
         {"tonreg", precise_unit(100.0, precise::ft.pow(3))},
         {"registerton", precise_unit(100.0, precise::ft.pow(3))},
         {"registertonne", precise_unit(100.0, precise::ft.pow(3))},
         {"waterton", precise_unit(224.0, precise::imp::gallon)},
         {"lb", precise::lb},
         {"LB", precise::lb},
         {"kip", precise::kilo* precise::lb},
         {"kipf", precise::kilo* precise::lbf},
         {"kipforce", precise::kilo* precise::lbf},
         {"kilopound", precise::kilo* precise::lb},
         {"lb_tr", precise::troy::pound},
         {"[LB_TR]", precise::troy::pound},
         {"pound-troy", precise::troy::pound},
         {"pound", precise::lb},
         {u8"\u2114", precise::lb},
         {"solarmass", constants::planetary::mass::solar.as_unit()},
         {"solarmasses", constants::planetary::mass::solar.as_unit()},
         {"jupitermass", constants::planetary::mass::jupiter.as_unit()},
         {"jupitermasses", constants::planetary::mass::jupiter.as_unit()},
         {"earthmass", constants::planetary::mass::earth.as_unit()},
         {"earthmasses", constants::planetary::mass::earth.as_unit()},
         {"lunarmass", constants::planetary::mass::moon.as_unit()},
         {"lunarmasses", constants::planetary::mass::moon.as_unit()},
         {"bag", precise_unit(96.0, precise::lb)},

         {"tonc", precise::energy::tonc},  // ton cooling
         {"ton_cooling", precise::energy::tonc},  // ton cooling
         {"tonofrefrigeration", precise::energy::tonc},  // ton cooling
         {"tonsofrefrigeration", precise::energy::tonc},  // ton cooling
         {"refrigerationton", precise::energy::tonc},  // ton cooling
         {"tonhour", precise::energy::tonhour},
         {"tonhour_cooling", precise::energy::tonhour},
         {"ton-hour_cooling", precise::energy::tonhour},
         {"RT", precise::energy::tonc},  // ton cooling
         {"TR", precise::energy::tonc},  // ton cooling
         // {"tons", precise::energy::tonc* precise::s},
         {"tonh", precise::energy::tonc* precise::hr},
         {"bu", precise::us::dry::bushel},
         {"bushel", precise::us::dry::bushel},
         {"oz fl", precise::us::floz},
         {"ozfl", precise::us::floz},
         {"fl oz", precise::us::floz},
         {"floz", precise::us::floz},
         {"floz_US", precise::us::floz},
         {"foz_US", precise::us::floz},
         {"foz", precise::us::floz},
         {"shot", {1.5, precise::us::floz}},
         {"FOZ_US", precise::us::floz},
         {"ounce_FL", precise::us::floz},
         {"ounce_US_FL", precise::us::floz},
         {"ounce_FL_US", precise::us::floz},
         {"dram_FL", precise_unit(1.0 / 8.0, precise::us::floz)},
         {"dram_FL_US", precise_unit(1.0 / 8.0, precise::us::floz)},
         {"dram_US_FL", precise_unit(1.0 / 8.0, precise::us::floz)},
         {"jigger", precise_unit(1.5, precise::us::floz)},
         {"fdr_US", precise::us::dram},
         {"FDR_US", precise::us::dram},
         {"min_US", precise::us::minim},
         {"MIN_US", precise::us::minim},
         {"minim_US", precise::us::minim},
         {"minim", precise::us::minim},
         {"ouncefl", precise::us::floz},
         {"oz_FL", precise::us::floz},
         {"oz", precise::oz},
         {"OZ", precise::oz},
         {u8"\u2125", precise::oz},
         {"gr", precise::i::grain},
         {"[GR]", precise::i::grain},
         {"grain", precise::i::grain},
         {"oz_av", precise::av::ounce},
         {"oz_i", precise::av::ounce},
         {"OZ_AV", precise::av::ounce},
         {"pound_i", precise::av::pound},
         {"pound_av", precise::av::pound},
         {"lb_av", precise::av::pound},
         {"[LB_AV]", precise::av::pound},
         {"dr",
          precise::us::dram},  // this most commonly implies volume vs weight
         {"dram", precise::us::dram},
         {"dr_av", precise::av::dram},
         {"dr_i", precise::av::dram},
         {"dram_av", precise::av::dram},
         {"dram_i", precise::av::dram},
         {"dram_br", precise::imp::dram},
         {"drammass_br", precise::av::dram},
         {"DR_AV", precise::av::dram},
         {"drammassunit", precise::av::dram},
         {"scwt", precise::av::hundredweight},
         {"scwt_av", precise::av::hundredweight},
         {"SCWT_AV", precise::av::hundredweight},
         {"shorthundredweight", precise::av::hundredweight},
         {"lcwt_av", precise::av::longhundredweight},
         {"LCWT_AV", precise::av::longhundredweight},
         {"longhundredweight", precise::av::longhundredweight},
         {"quintal", precise::mass::quintal},
         {"quintal_m", precise::mass::quintal},
         {"cwt", precise::av::hundredweight},
         {"cwt_US", precise::av::hundredweight},
         {"cwt_br", precise::av::longhundredweight},
         {"hundredweight", precise::av::hundredweight},
         {"hundredweight_US", precise::av::hundredweight},
         {"hundredweight_br", precise::av::longhundredweight},
         {"hundredweight(short)", precise::av::hundredweight},
         {"hundredweight(long)", precise::av::longhundredweight},
         {"quarter_br", {0.25, precise::av::longhundredweight}},
         {"assayton", precise::mass::ton_assay},
         {"tonassay", precise::mass::ton_assay},
         {"ton(assayUS)", precise::mass::ton_assay},
         {"ton(assay)", precise::mass::ton_assay},
         {"ton(assay)_br", precise::mass::longton_assay},
         {"longassayton", precise::mass::longton_assay},
         {"stone_av", precise::av::stone},
         {"stone_US", precise_unit(0.125, precise::av::hundredweight)},
         {"STONE_AV", precise::av::stone},
         {"ston_av", precise::av::ton},
         {"STON_AV", precise::av::ton},
         {"shortton", precise::av::ton},
         {"tonshort", precise::av::ton},
         {"shortton_US", precise::av::ton},
         {"ton_US", precise::av::ton},
         {"ton_av", precise::av::ton},
         {"stone", precise::av::stone},
         {"stone_br", precise::av::stone},
         {"ton", precise::ton},
         {"ton(short)", precise::ton},
         {"ton(short)_US", precise::ton},
         {"short_us", precise::one},  // in a few cases this preceeds some units
                                      // in which case it is the default
         {"longton", precise::av::longton},
         {"tonlong", precise::av::longton},
         {"longton_m", precise::av::longton},
         {"longton_US", precise::av::longton},
         {"lton_av", precise::av::longton},
         {"LTON_AV", precise::av::longton},
         {"longton_av", precise::av::longton},
         {"ton(long)", precise::av::longton},
         {"ton(long)_US", precise::av::longton},
         {"ton(long)_br", precise::av::longton},
         {"longton_br", precise::av::longton},
         {"ton_br", precise::av::longton},

         {"shippington_br", {42.0, ft.pow(3)}},
         {"ton_ship_br", {42.0, ft.pow(3)}},
         {"ton_ship", {40.0, ft.pow(3)}},
         {"shippington_US", {40.0, ft.pow(3)}},
         {"ton_ship_US", {40.0, ft.pow(3)}},
         {"ton_US_ship", {40.0, ft.pow(3)}},

         {"oz_tr", precise::troy::oz},
         {"[OZ_TR]", precise::troy::oz},
         {"ounce_tr", precise::troy::oz},
         {"pound_tr", precise::troy::pound},
         {"pwt_tr", precise::troy::pennyweight},
         {"pwt", precise::troy::pennyweight},
         {"PWT_TR", precise::troy::pennyweight},
         {"pennyweight_tr", precise::troy::pennyweight},
         {"pennyweight", precise::troy::pennyweight},
         {"dram_tr", precise::apothecaries::drachm},
         {"sc_ap", precise::apothecaries::scruple},
         {"SC_AP", precise::apothecaries::scruple},
         {"scruple", precise::apothecaries::scruple},
         {"scruple_ap", precise::apothecaries::scruple},
         {u8"\u2108", precise::apothecaries::scruple},
         {"dr_ap", precise::apothecaries::drachm},
         {u8"\u0292", precise::apothecaries::drachm},
         {"dram_ap", precise::apothecaries::drachm},
         {"dram_US", precise::apothecaries::drachm},
         {"drachm_br", precise::apothecaries::drachm},
         {"DR_AP", precise::apothecaries::drachm},
         {"oz_ap", precise::apothecaries::ounce},
         {"OZ_AP", precise::apothecaries::ounce},
         {"ounce_ap", precise::apothecaries::ounce},
         {"lb_ap", precise::apothecaries::pound},
         {"lbsap", precise::apothecaries::pound},
         {"LB_AP", precise::apothecaries::pound},
         {"pound_ap", precise::apothecaries::pound},
         {"oz_m", precise::apothecaries::metric_ounce},
         {"[OZ_M]", precise::apothecaries::metric_ounce},
         {"ounce_m", precise::apothecaries::metric_ounce},
         {"car_Au", precise_unit{1.0 / 24.0, precise::one, commodities::gold}},
         {"carau", precise_unit{1.0 / 24.0, precise::one, commodities::gold}},
         {"CAR_AU", precise_unit{1.0 / 24.0, precise::one, commodities::gold}},
         // U at the end leads to custom unit unless this is here
         {"[CAR_AU]",
          precise_unit{1.0 / 24.0, precise::one, commodities::gold}},
         {"caratofgoldalloys",
          precise_unit{1.0 / 24.0, precise::one, commodities::gold}},
         {"ounce", precise::oz},
         {"ounce_av", precise::av::ounce},
         {"ounce_i", precise::av::ounce},
         {"tonforce(long)", precise::av::longton* constants::g0.as_unit()},
         {"tonforce(short)", precise::av::ton* constants::g0.as_unit()},
         {"tonforce_US", precise::av::ton* constants::g0.as_unit()},
         {"tonforce_br", precise::av::longton* constants::g0.as_unit()},
         {"tonf_US", precise::av::ton* constants::g0.as_unit()},
         {"tonf_br", precise::av::longton* constants::g0.as_unit()},
         {"sn", precise::MTS::sthene},
         {"sthene", precise::MTS::sthene},
         {"pz", precise::MTS::pieze},
         {"pieze", precise::MTS::pieze},
         {"lbf_av", precise::av::lbf},
         {"lbf_US", precise::av::lbf},
         {"LBF_AV", precise::av::lbf},
         {"lbf", precise::lbf},
         {"ozf", precise::av::ozf},
         {"poundforce_US", precise::lbf},
         // the next four are energy even though the breakdown would be power
         {"foot-pound", precise::ft* precise::lbf},
         {"foot-pound of energy", precise::ft* precise::lbf},
         {"foot-pound of torque", precise::ft* precise::lbf},
         {"footpound", precise::ft* precise::lbf},
         {"footpoundforce", precise::ft* precise::lbf},
         {"foot-pounds of energy", precise::ft* precise::lbf},
         {"foot-pounds of torque", precise::ft* precise::lbf},
         {"ft-lb", precise::ft* precise::lbf},
         {"ftlb", precise::ft* precise::lbf},
         {"slug", precise::av::slug},
         // {"kt", precise_unit(200.0, precise::mg)},
         {"cup", precise::us::cup},
         {"cup_US", precise::us::cup},
         {"CUP_US", precise::us::cup},
         {"cupUScustomary", precise::us::cup},
         {"sticksofbutter", {0.5, precise::us::cup}},
         {"tsp", precise::us::tsp},
         {"tsp_US", precise::us::tsp},
         {"TSP_US", precise::us::tsp},
         {"teaspoon", precise::us::tsp},
         {"teaspoon_US", precise::us::tsp},
         {"tbsp", precise::us::tbsp},
         {"tblsp", precise::us::tbsp},
         {"tbl", precise::us::tbsp},
         {"tbs", precise::us::tbsp},
         {"tbs_US", precise::us::tbsp},
         {"TBS_US", precise::us::tbsp},
         {"tablespoon", precise::us::tbsp},
         {"tablespoon_US", precise::us::tbsp},
         {"smidgen", precise_unit(1.0 / 32.0, precise::us::tsp)},
         {"smdg", precise_unit(1.0 / 32.0, precise::us::tsp)},
         {"pinch", precise_unit(1.0 / 24.0, precise::us::tsp)},
         {"pn", precise_unit(1.0 / 24.0, precise::us::tsp)},
         {"dash", precise_unit(1.0 / 16.0, precise::us::tsp)},
         {"tad", precise_unit(1.0 / 8.0, precise::us::tsp)},
         {"saltspoon", precise_unit(1.0 / 4.0, precise::us::tsp)},
         {"ssp", precise_unit(1.0 / 4.0, precise::us::tsp)},
         {"coffeespoon", precise_unit(1.0 / 2.0, precise::us::tsp)},
         {"csp", precise_unit(1.0 / 2.0, precise::us::tsp)},
         {"dessertspoon", precise_unit(2.0, precise::us::tsp)},
         {"dessertteaspoon", precise_unit(2.0, precise::us::tsp)},
         {"dsp", precise_unit(2.0, precise::us::tsp)},
         {"dssp", precise_unit(2.0, precise::us::tsp)},
         {"dstspn", precise_unit(2.0, precise::us::tsp)},
         {"glass_wi", precise_unit(1.0 / 4.0, precise::us::cup)},
         {"wgf", precise_unit(1.0 / 4.0, precise::us::cup)},
         {"teacup", precise_unit(1.0 / 2.0, precise::us::cup)},
         {"tcf", precise_unit(1.0 / 2.0, precise::us::cup)},
         {"cup_m", precise::metric::cup},
         {"cups_m", precise::metric::cup},
         {"[CUP_M]", precise::metric::cup_uslegal},
         {"[cup_m]", precise::metric::cup_uslegal},  // ucum definitions I think
                                                     // it is wrong there
         {"cupUSlegal", precise::metric::cup_uslegal},
         {"tsp_m", precise::metric::tsp},
         {"TSP_M", precise::metric::tsp},
         {"teaspoon_m", precise::metric::tsp},
         {"tbs_m", precise::metric::tbsp},
         {"tbsm", precise::metric::tbsp},
         {"[TBS_M]", precise::metric::tbsp},
         {"tablespoon_m", precise::metric::tbsp},
         {"foz_m", precise::metric::floz},
         {"[FOZ_M]", precise::metric::floz},
         {"ounce_m_FL", precise::metric::floz},
         {"ounce_FL_m", precise::metric::floz},
         {"quart", precise::us::quart},
         {"qt", precise::us::quart},
         {"QT", precise::us::quart},
         {"qt_US", precise::us::quart},
         {"QT_US", precise::us::quart},
         {"quart_US", precise::us::quart},
         {"quart_US_FL", precise::us::quart},
         {"quart_FL_US", precise::us::quart},
         {"pt", precise::us::pint},
         {"pint", precise::us::pint},
         {"pint_FL", precise::us::pint},
         {"pint_US", precise::us::pint},
         {"pint_FL_US", precise::us::pint},
         {"pint_US_FL", precise::us::pint},
         {"pt_US", precise::us::pint},
         {"PT_US", precise::us::pint},
         {"gill", precise::us::gill},
         {"gi", precise::us::gill},
         {"gill_US", precise::us::gill},
         {"gil_US", precise::us::gill},
         {"GIL_US", precise::us::gill},
         {"pk", precise::us::dry::peck},
         {"pk_US", precise::us::dry::peck},
         {"PK_US", precise::us::dry::peck},
         {"peck", precise::us::dry::peck},
         {"peck_US", precise::us::dry::peck},
         {"peckdry_US", precise::us::dry::peck},
         {"bu_US", precise::us::dry::bushel},
         {"bsh_US", precise::us::dry::bushel},
         {"BU_US", precise::us::dry::bushel},
         {"bushel_US", precise::us::dry::bushel},
         {"dqt", precise::us::dry::quart},
         {"dqt_US", precise::us::dry::quart},
         {"dryqt", precise::us::dry::quart},
         {"dryqt_US", precise::us::dry::quart},
         {"DQT_US", precise::us::dry::quart},
         {"dryquart_US", precise::us::dry::quart},
         {"dryquart", precise::us::dry::quart},
         {"dpt_US", precise::us::dry::pint},
         {"DPT_US", precise::us::dry::pint},
         {"drypint_US", precise::us::dry::pint},
         {"drypint", precise::us::dry::pint},
         {"drypt", precise::us::dry::pint},
         {"qt_br", precise::imp::quart},
         {"QT_BR", precise::imp::quart},
         {"quart_br", precise::imp::quart},
         {"quart_br_FL", precise::imp::quart},
         {"quart_FL_br", precise::imp::quart},
         {"pt_br", precise::imp::pint},
         {"PT_BR", precise::imp::pint},
         {"pint_br", precise::imp::pint},
         {"pint_FL_br", precise::imp::pint},
         {"pint_br_FL", precise::imp::pint},
         {"gil_br", precise::imp::gill},
         {"GIL_BR", precise::imp::gill},
         {"gill_br", precise::imp::gill},
         {"gill_br_FL", precise::imp::gill},
         {"gill_FL_br", precise::imp::gill},
         {"gi_br", precise::imp::gill},
         {"pk_br", precise::imp::peck},
         {"PK_BR", precise::imp::peck},
         {"peck_br", precise::imp::peck},
         {"peckdry_br", precise::imp::peck},
         {"bu_br", precise::imp::bushel},
         {"bsh_br", precise::imp::bushel},
         {"BU_BR", precise::imp::bushel},
         {"bushel_br", precise::imp::bushel},
         {"foz_br", precise::imp::floz},
         {"floz_br", precise::imp::floz},
         {"FOZ_BR", precise::imp::floz},
         {"oz_br_FL", precise::imp::floz},
         {"oz_FL_br", precise::imp::floz},
         {"ounce_br_FL", precise::imp::floz},
         {"ounce_FL_br", precise::imp::floz},
         {"fdr_br", precise::imp::dram},
         {"[FDR_BR]", precise::imp::dram},
         {"dram_br_FL", precise::imp::dram},
         {"dram_FL_br", precise::imp::dram},
         {"min_br", precise::imp::minim},
         {"MIN_BR", precise::imp::minim},
         {"minim_br", precise::imp::minim},
         {"barrel_brl", precise::imp::bbl},
         {"barrel_br", precise::imp::winebarrel},
         {"barrel_br_wine", precise::imp::winebarrel},
         {"barrel_wine_br", precise::imp::winebarrel},
         {"barreloil_br", precise::imp::bbl},
         {"bbl_br", precise::imp::bbl},
         {"tablespoon_br", precise::imp::tbsp},
         {"teaspoon_br", precise::imp::tsp},
         {"dessertspoon_br", precise_unit(2.0, precise::imp::tsp)},
         {"tbsp_br", precise::imp::tbsp},
         {"tsp_br", precise::imp::tsp},
         {"cup_br", precise::imp::cup},
         {"cup_br_FL", precise::imp::cup},
         {"cup_FL_br", precise::imp::cup},
         {"LNE", precise::typographic::dtp::line},
         {"line", precise::typographic::dtp::line},
         {"line_US", precise::typographic::american::line},
         {"point_US", precise::typographic::american::point},
         {"pica_US", precise::typographic::american::pica},
         {"twip_US", precise::typographic::american::twip},
         {"line_br", precise::typographic::american::line},
         {"pnt", precise::typographic::dtp::point},
         {"PNT", precise::typographic::dtp::point},
         {"desktoppublishingpoint", precise::typographic::dtp::point},
         {"pca", precise::typographic::dtp::pica},
         {"PCA", precise::typographic::dtp::pica},
         {"dtppica", precise::typographic::dtp::pica},
         {"dtptwip", precise::typographic::dtp::twip},
         {"dtppoint", precise::typographic::dtp::point},
         {"point", precise::typographic::dtp::point},
         {"bigpoint", precise::typographic::dtp::point},
         {"pica", precise::typographic::dtp::pica},
         {"twip", precise::typographic::dtp::twip},
         {"printerspoint", precise::typographic::printers::point},
         {"pointprinter", precise::typographic::printers::point},
         {"pnt_pr", precise::typographic::printers::point},
         {"pntpr", precise::typographic::printers::point},
         {"PNT_PR", precise::typographic::printers::point},
         {"printerspica", precise::typographic::printers::pica},
         {"picaprinter", precise::typographic::printers::pica},
         {"ATApica", precise::typographic::printers::pica},
         {"atapica", precise::typographic::printers::pica},
         {"picaata", precise::typographic::printers::pica},
         {"ATApoint", precise::typographic::printers::point},
         {"atapoint", precise::typographic::printers::point},
         {"pointata", precise::typographic::printers::point},
         {"pca_pr", precise::typographic::printers::pica},
         {"pcapr", precise::typographic::printers::pica},
         {"PCA_PR", precise::typographic::printers::pica},
         {"INpoint", precise::typographic::ING::point},
         {"INpica", precise::typographic::ING::pica},
         {"INPoint", precise::typographic::ING::point},
         {"INPica", precise::typographic::ING::pica},
         {"pied", precise::typographic::french::pied},
         {"PIED", precise::typographic::french::pied},
         {"pouce", precise::typographic::french::pouce},
         {"POUCE", precise::typographic::french::pouce},
         {"ligne", precise::typographic::french::ligne},
         {"LIGNE", precise::typographic::french::ligne},
         {"didot", precise::typographic::french::didot},
         {"didotpoint", precise::typographic::french::didot},
         {"DIDOT", precise::typographic::french::didot},
         {"cicero", precise::typographic::french::cicero},
         {"CICERO", precise::typographic::french::cicero},
         {"postscriptpoint", precise::typographic::postscript::point},
         {"pointpostscript", precise::typographic::postscript::point},
         {"postscriptpica", precise::typographic::postscript::pica},
         {"picapostscript", precise::typographic::postscript::pica},
         {"texpoint", precise::typographic::tex::point},
         {"pointtex", precise::typographic::tex::point},
         {"texpica", precise::typographic::tex::pica},
         {"picatex", precise::typographic::tex::pica},
         {"truchetpoint", {0.188, precise::mm}},
         {"truchetpica", {0.188 * 12, precise::mm}},
         {"tex", precise::textile::tex},
         {"texes", precise::textile::tex},
         {"TEX", precise::textile::tex},
         {"denier", precise::textile::denier},
         {"denier(linearmassdensity)", precise::textile::denier},
         {"den", precise::textile::denier},
         {"[DEN]", precise::textile::denier},
         {"span_cloth", precise::textile::span},
         {"finger_cloth", precise::textile::finger},
         {"nail_cloth", precise::textile::nail},
         {"nail", precise::textile::nail},
         {"span", precise::textile::span},
         {"finger", precise::textile::finger},
         {"smoot", precise::distance::smoot},
         {"SMOOT", precise::distance::smoot},
         // potrzebie system developed by Dononld Knuth
         // https://polaris93.livejournal.com/2046896.html
         {"potrzebie", precise_unit(2.2633484517438173216473, precise::mm)},
         {"blintz", precise_unit(0.0364253863, precise::kg)},
         {"blintzes", precise_unit(0.0364253863, precise::kg)},
         {"ngogn", precise_unit(22.633484517438173216473, precise::mm).pow(3)},
         {"furshlugginer", precise_unit(1000.0, precise::one)},
         {"farshimmelt", precise_unit(0.000001, precise::one)},
         {"clarke", precise::day},
         {"[hp_X]", {1.0, precise::log::neglog10, commodities::Hahnemann}},
         {"[HP_X]", {1.0, precise::log::neglog10, commodities::Hahnemann}},
         {"[hp_C]", {1.0, precise::log::neglog100, commodities::Hahnemann}},
         {"[HP_C]", {1.0, precise::log::neglog100, commodities::Hahnemann}},
         {"[hp_M]", {1.0, precise::log::neglog1000, commodities::Hahnemann}},
         {"[HP_M]", {1.0, precise::log::neglog1000, commodities::Hahnemann}},
         {"[hp_Q]", {1.0, precise::log::neglog50000, commodities::Hahnemann}},
         {"[HP_Q]", {1.0, precise::log::neglog50000, commodities::Hahnemann}},
         {"[kp_X]", {1.0, precise::log::neglog10, commodities::Korsakov}},
         {"[KP_X]", {1.0, precise::log::neglog10, commodities::Korsakov}},
         {"[kp_C]", {1.0, precise::log::neglog100, commodities::Korsakov}},
         {"[KP_C]", {1.0, precise::log::neglog100, commodities::Korsakov}},
         {"[kp_M]", {1.0, precise::log::neglog1000, commodities::Korsakov}},
         {"[KP_M]", {1.0, precise::log::neglog1000, commodities::Korsakov}},
         {"[kp_Q]", {1.0, precise::log::neglog50000, commodities::Korsakov}},
         {"[KP_Q]", {1.0, precise::log::neglog50000, commodities::Korsakov}},
         {"ream", {500.0, precise::count, commodities::paper}},
         {"ream_br", {480.0, precise::count, commodities::paper}},
         {"quire", {25.0, precise::count, commodities::paper}},
         {"quire_br", {24.0, precise::count, commodities::paper}},
         {"sheet", {1.0, precise::count, commodities::paper}},
         {"shu",
          precise_unit(1.0 / 16, precise::other::ppm, commodities::capsaicin)},
         {"scoville",
          precise_unit(1.0 / 16, precise::other::ppm, commodities::capsaicin)},
         {"scovilleunit",
          precise_unit(1.0 / 16, precise::other::ppm, commodities::capsaicin)},
         {"scovilleheatunit",
          precise_unit(
              1.0 / 16,
              precise::other::ppm,
              commodities::capsaicin)}}};

#if !defined(UNITS_DISABLE_NON_ENGLISH_UNITS) ||                               \
    UNITS_DISABLE_NON_ENGLISH_UNITS == 0
UNITS_CPP14_CONSTEXPR_OBJECT
std::array<std::pair<const char*, precise_unit>, 233>
    defined_unit_strings_non_english{{
        {"ken", precise::japan::ken},
        {"cun", precise::chinese::cun},
        {"cun(Chinese)",
         precise::chinese::cun},  // interaction with cu for cubic
        {"cun_cn", precise::chinese::cun},
        {"chi", precise::chinese::chi},
        {"chi_cn", precise::chinese::chi},
        {"zhang", precise::chinese::zhang},
        {"zhang_cn", precise::chinese::zhang},
        {"li_cn", precise::chinese::li},
        {"jin_cn", precise::chinese::jin},
        {"jin", precise::chinese::jin},
        {"liang_cn", precise::chinese::liang},
        {"liang", precise::chinese::liang},
        {"qian_cn", precise::chinese::qian},
        {"qian", precise::chinese::qian},
        {"funt", precise_unit(409.51718, precise::g)},  // Russian
        {"pood", precise_unit(40.0 * 409.51718, precise::g)},  // Russian
        {"zolotnik", precise_unit(409.51718 / 96.0, precise::g)},  // Russian
        {"halakim", precise_unit(1.0 / 18.0, precise::time::minute)},  // Jewish
        {"halek", precise_unit(1.0 / 18.0, precise::time::minute)},  // Jewish
        {"lustrum", precise_unit(5.0, precise::time::aj)},  // Roman
        {"lustra", precise_unit(5.0, precise::time::aj)},  // Roman
        // turkey, UAE, levant unit of area
        {"dunam", precise_unit(1000.0, precise::m.pow(2))},
        // taiwan
        {"ping", {3.305, precise::m.pow(2)}},
        // korea unit of area
        {"pyong", {3.305, precise::m.pow(2)}},
        // ancient Roman units
        {"amphora", {27.84, precise::L}},
        {"sextarii", {27.84 / 48.0, precise::L}},
        {"libra", {0.722, precise::av::pound}},
        {"uncia", {0.722 / 12.0, precise::av::pound}},
        {"pes", {296.0, precise::mm}},
        {"stadium", {220, precise::yd}},
        {"stadion", {157.0, precise::m}},
        {"\xCF\x83\xCF\x84\xCE\xAC\xCE\xB4\xCE\xB9\xCE\xBF\xCE\xBD",
         {157.0, precise::m}},
        {"itinerarystadion", {157.0, precise::m}},
        {"olympicstadion", {157.0, precise::m}},
        {"leuga", {2.22, precise::km}},
        // chinese units
        {"shi", {71.68, precise::kg}},
        {"dan", {71.68, precise::kg}},
        // metric units in other languages
        {"grama", precise::g},
        {"gramm", precise::g},
        {"gramma", precise::g},
        {"gramme", precise::g},
        {"gramo", precise::g},
        {"segundo", precise::s},
        {"seconde", precise::s},
        {"sekunde", precise::s},
        {"secondo", precise::s},
        {"sekund", precise::s},
        {"sekunda", precise::s},
        {"metro", precise::s},
        // older spanish units
        {"punto", {0.1613, precise::mm}},
        {"linea", {1.935, precise::mm}},
        {"pulgada", {23.216, precise::mm}},
        {"pie", {278.6, precise::mm}},
        {"vara", {3.0 * 278.6, precise::mm}},
        {"paso", {5.0 * 278.6, precise::mm}},
        {"milla", {5000.0 * 278.6, precise::mm}},
        {"legua", {15000.0 * 278.6, precise::mm}},
        {"manzana",
         {100.0 * 100.0 * 3.0 * 278.6 * 3.0 * 278.6, precise::mm.pow(2)}},
        {"labor", {1000000.0 * 3.0 * 278.6 * 3.0 * 278.6, precise::mm.pow(2)}},
        {"zenti", {1.0 / 100.0, precise::one}},  // german for centi
        {"zentner", {50.0, precise::kg}},  // german
        {"pferdestaerke", precise::power::hpM},  // german horsepower
        {"cheval vapeur", precise::power::hpM},  // french horsepower
        {"chevalvapeur", precise::power::hpM},  // french horsepower
        {"pfund", {0.5, kg}},  // german
        // CURRENCIES
        {"Afghani",
         {1.0, precise::currency, commodities::generateCurrencyCode("AFN")}},
        {"Lek",
         {1.0, precise::currency, commodities::generateCurrencyCode("ALL")}},
        {"AlgerianDinar",
         {1.0, precise::currency, commodities::generateCurrencyCode("DZD")}},
        {"Kwanza",
         {1.0, precise::currency, commodities::generateCurrencyCode("AOA")}},
        {"EastCaribbeanDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("XCD")}},
        {"ArgentinePeso",
         {1.0, precise::currency, commodities::generateCurrencyCode("ARS")}},
        {"ArmenianDram",
         {1.0, precise::currency, commodities::generateCurrencyCode("AMD")}},
        {"ArubanFlorin",
         {1.0, precise::currency, commodities::generateCurrencyCode("AWG")}},
        {"AustralianDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("AUD")}},
        {"AzerbaijanManat",
         {1.0, precise::currency, commodities::generateCurrencyCode("AZN")}},
        {"BahamianDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("BSD")}},
        {"BahrainiDinar",
         {1.0, precise::currency, commodities::generateCurrencyCode("BHD")}},
        {"Taka",
         {1.0, precise::currency, commodities::generateCurrencyCode("BDT")}},
        {"BarbadosDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("BBD")}},
        {"BelarusianRuble",
         {1.0, precise::currency, commodities::generateCurrencyCode("BYN")}},
        {"BelizeDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("BZD")}},
        {"CFAFrancBCEAO",
         {1.0, precise::currency, commodities::generateCurrencyCode("XOF")}},
        {"BermudianDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("BMD")}},
        {"IndianRupee",
         {1.0, precise::currency, commodities::generateCurrencyCode("INR")}},
        {"Ngultrum",
         {1.0, precise::currency, commodities::generateCurrencyCode("BTN")}},
        {"Boliviano",
         {1.0, precise::currency, commodities::generateCurrencyCode("BOB")}},
        {"Mvdol",
         {1.0, precise::currency, commodities::generateCurrencyCode("BOV")}},
        {"ConvertibleMark",
         {1.0, precise::currency, commodities::generateCurrencyCode("BAM")}},
        {"Pula",
         {1.0, precise::currency, commodities::generateCurrencyCode("BWP")}},
        {"NorwegianKrone",
         {1.0, precise::currency, commodities::generateCurrencyCode("NOK")}},
        {"BrazilianReal",
         {1.0, precise::currency, commodities::generateCurrencyCode("BRL")}},
        {"BruneiDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("BND")}},
        {"BulgarianLev",
         {1.0, precise::currency, commodities::generateCurrencyCode("BGN")}},
        {"BurundiFranc",
         {1.0, precise::currency, commodities::generateCurrencyCode("BIF")}},
        {"CaboVerdeEscudo",
         {1.0, precise::currency, commodities::generateCurrencyCode("CVE")}},
        {"Riel",
         {1.0, precise::currency, commodities::generateCurrencyCode("KHR")}},
        {"CanadianDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("CAD")}},
        {"CaymanIslandsDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("KYD")}},
        {"CFAFrancBEAC",
         {1.0, precise::currency, commodities::generateCurrencyCode("XAF")}},
        {"ChileanPeso",
         {1.0, precise::currency, commodities::generateCurrencyCode("CLP")}},
        {"UnidaddeFomento",
         {1.0, precise::currency, commodities::generateCurrencyCode("CLF")}},
        {"YuanRenminbi",
         {1.0, precise::currency, commodities::generateCurrencyCode("CNY")}},
        {"ColombianPeso",
         {1.0, precise::currency, commodities::generateCurrencyCode("COP")}},
        {"UnidaddeValorReal",
         {1.0, precise::currency, commodities::generateCurrencyCode("COU")}},
        {"ComorianFranc",
         {1.0, precise::currency, commodities::generateCurrencyCode("KMF")}},
        {"CongoleseFranc",
         {1.0, precise::currency, commodities::generateCurrencyCode("CDF")}},
        {"NewZealandDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("NZD")}},
        {"CostaRicanColon",
         {1.0, precise::currency, commodities::generateCurrencyCode("CRC")}},
        {"CubanPeso",
         {1.0, precise::currency, commodities::generateCurrencyCode("CUP")}},
        {"PesoConvertible",
         {1.0, precise::currency, commodities::generateCurrencyCode("CUC")}},
        {"NetherlandsAntilleanGuilder",
         {1.0, precise::currency, commodities::generateCurrencyCode("ANG")}},
        {"CzechKoruna",
         {1.0, precise::currency, commodities::generateCurrencyCode("CZK")}},
        {"DanishKrone",
         {1.0, precise::currency, commodities::generateCurrencyCode("DKK")}},
        {"DjiboutiFranc",
         {1.0, precise::currency, commodities::generateCurrencyCode("DJF")}},
        {"DominicanPeso",
         {1.0, precise::currency, commodities::generateCurrencyCode("DOP")}},
        {"EgyptianPound",
         {1.0, precise::currency, commodities::generateCurrencyCode("EGP")}},
        {"ElSalvadorColon",
         {1.0, precise::currency, commodities::generateCurrencyCode("SVC")}},
        {"Nakfa",
         {1.0, precise::currency, commodities::generateCurrencyCode("ERN")}},
        {"Lilangeni",
         {1.0, precise::currency, commodities::generateCurrencyCode("SZL")}},
        {"EthiopianBirr",
         {1.0, precise::currency, commodities::generateCurrencyCode("ETB")}},
        {"FalklandIslandsPound",
         {1.0, precise::currency, commodities::generateCurrencyCode("FKP")}},
        {"FijiDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("FJD")}},
        {"CFPFranc",
         {1.0, precise::currency, commodities::generateCurrencyCode("XPF")}},
        {"Dalasi",
         {1.0, precise::currency, commodities::generateCurrencyCode("GMD")}},
        {"Lari",
         {1.0, precise::currency, commodities::generateCurrencyCode("GEL")}},
        {"GhanaCedi",
         {1.0, precise::currency, commodities::generateCurrencyCode("GHS")}},
        {"GibraltarPound",
         {1.0, precise::currency, commodities::generateCurrencyCode("GIP")}},
        {"Quetzal",
         {1.0, precise::currency, commodities::generateCurrencyCode("GTQ")}},
        {"PoundSterling",
         {1.0, precise::currency, commodities::generateCurrencyCode("GBP")}},
        {"GuineanFranc",
         {1.0, precise::currency, commodities::generateCurrencyCode("GNF")}},
        {"GuyanaDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("GYD")}},
        {"Gourde",
         {1.0, precise::currency, commodities::generateCurrencyCode("HTG")}},
        {"Lempira",
         {1.0, precise::currency, commodities::generateCurrencyCode("HNL")}},
        {"HongKongDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("HKD")}},
        {"Forint",
         {1.0, precise::currency, commodities::generateCurrencyCode("HUF")}},
        {"IcelandKrona",
         {1.0, precise::currency, commodities::generateCurrencyCode("ISK")}},
        {"Rupiah",
         {1.0, precise::currency, commodities::generateCurrencyCode("IDR")}},
        {"SDR",
         {1.0, precise::currency, commodities::generateCurrencyCode("XDR")}},
        {"SpecialDrawingRight",
         {1.0, precise::currency, commodities::generateCurrencyCode("XDR")}},
        {"IranianRial",
         {1.0, precise::currency, commodities::generateCurrencyCode("IRR")}},
        {"IraqiDinar",
         {1.0, precise::currency, commodities::generateCurrencyCode("IQD")}},
        {"NewIsraeliSheqel",
         {1.0, precise::currency, commodities::generateCurrencyCode("ILS")}},
        {"JamaicanDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("JMD")}},
        {"Yen",
         {1.0, precise::currency, commodities::generateCurrencyCode("JPY")}},
        {"JordanianDinar",
         {1.0, precise::currency, commodities::generateCurrencyCode("JOD")}},
        {"Tenge",
         {1.0, precise::currency, commodities::generateCurrencyCode("KZT")}},
        {"KenyanShilling",
         {1.0, precise::currency, commodities::generateCurrencyCode("KES")}},
        {"NorthKoreanWon",
         {1.0, precise::currency, commodities::generateCurrencyCode("KPW")}},
        {"Won",
         {1.0, precise::currency, commodities::generateCurrencyCode("KRW")}},
        {"KuwaitiDinar",
         {1.0, precise::currency, commodities::generateCurrencyCode("KWD")}},
        {"Som",
         {1.0, precise::currency, commodities::generateCurrencyCode("KGS")}},
        {"LaoKip",
         {1.0, precise::currency, commodities::generateCurrencyCode("LAK")}},
        {"LebanesePound",
         {1.0, precise::currency, commodities::generateCurrencyCode("LBP")}},
        {"Loti",
         {1.0, precise::currency, commodities::generateCurrencyCode("LSL")}},
        {"Rand",
         {1.0, precise::currency, commodities::generateCurrencyCode("ZAR")}},
        {"LiberianDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("LRD")}},
        {"LibyanDinar",
         {1.0, precise::currency, commodities::generateCurrencyCode("LYD")}},
        {"SwissFranc",
         {1.0, precise::currency, commodities::generateCurrencyCode("CHF")}},
        {"Pataca",
         {1.0, precise::currency, commodities::generateCurrencyCode("MOP")}},
        {"Denar",
         {1.0, precise::currency, commodities::generateCurrencyCode("MKD")}},
        {"MalagasyAriary",
         {1.0, precise::currency, commodities::generateCurrencyCode("MGA")}},
        {"MalawiKwacha",
         {1.0, precise::currency, commodities::generateCurrencyCode("MWK")}},
        {"MalaysianRinggit",
         {1.0, precise::currency, commodities::generateCurrencyCode("MYR")}},
        {"Rufiyaa",
         {1.0, precise::currency, commodities::generateCurrencyCode("MVR")}},
        {"Ouguiya",
         {1.0, precise::currency, commodities::generateCurrencyCode("MRU")}},
        {"MauritiusRupee",
         {1.0, precise::currency, commodities::generateCurrencyCode("MUR")}},
        {"ADBUnitofAccount",
         {1.0, precise::currency, commodities::generateCurrencyCode("XUA")}},
        {"MexicanPeso",
         {1.0, precise::currency, commodities::generateCurrencyCode("MXN")}},
        {"MexicanUnidaddeInversion(UDI)",
         {1.0, precise::currency, commodities::generateCurrencyCode("MXV")}},
        {"MoldovanLeu",
         {1.0, precise::currency, commodities::generateCurrencyCode("MDL")}},
        {"Tugrik",
         {1.0, precise::currency, commodities::generateCurrencyCode("MNT")}},
        {"MoroccanDirham",
         {1.0, precise::currency, commodities::generateCurrencyCode("MAD")}},
        {"MozambiqueMetical",
         {1.0, precise::currency, commodities::generateCurrencyCode("MZN")}},
        {"Kyat",
         {1.0, precise::currency, commodities::generateCurrencyCode("MMK")}},
        {"NamibiaDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("NAD")}},
        {"NepaleseRupee",
         {1.0, precise::currency, commodities::generateCurrencyCode("NPR")}},
        {"CordobaOro",
         {1.0, precise::currency, commodities::generateCurrencyCode("NIO")}},
        {"Naira",
         {1.0, precise::currency, commodities::generateCurrencyCode("NGN")}},
        {"RialOmani",
         {1.0, precise::currency, commodities::generateCurrencyCode("OMR")}},
        {"PakistanRupee",
         {1.0, precise::currency, commodities::generateCurrencyCode("PKR")}},
        {"Nouniversalcurrency",
         {1.0, precise::currency, commodities::generateCurrencyCode("nan")}},
        {"Balboa",
         {1.0, precise::currency, commodities::generateCurrencyCode("PAB")}},
        {"Kina",
         {1.0, precise::currency, commodities::generateCurrencyCode("PGK")}},
        {"Guarani",
         {1.0, precise::currency, commodities::generateCurrencyCode("PYG")}},
        {"Sol",
         {1.0, precise::currency, commodities::generateCurrencyCode("PEN")}},
        {"PhilippinePeso",
         {1.0, precise::currency, commodities::generateCurrencyCode("PHP")}},
        {"Zloty",
         {1.0, precise::currency, commodities::generateCurrencyCode("PLN")}},
        {"QatariRial",
         {1.0, precise::currency, commodities::generateCurrencyCode("QAR")}},
        {"RomanianLeu",
         {1.0, precise::currency, commodities::generateCurrencyCode("RON")}},
        {"RussianRuble",
         {1.0, precise::currency, commodities::generateCurrencyCode("RUB")}},
        {"RwandaFranc",
         {1.0, precise::currency, commodities::generateCurrencyCode("RWF")}},
        {"SaintHelenaPound",
         {1.0, precise::currency, commodities::generateCurrencyCode("SHP")}},
        {"Tala",
         {1.0, precise::currency, commodities::generateCurrencyCode("WST")}},
        {"Dobra",
         {1.0, precise::currency, commodities::generateCurrencyCode("STN")}},
        {"SaudiRiyal",
         {1.0, precise::currency, commodities::generateCurrencyCode("SAR")}},
        {"SerbianDinar",
         {1.0, precise::currency, commodities::generateCurrencyCode("RSD")}},
        {"SeychellesRupee",
         {1.0, precise::currency, commodities::generateCurrencyCode("SCR")}},
        {"Leone",
         {1.0, precise::currency, commodities::generateCurrencyCode("SLE")}},
        {"SingaporeDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("SGD")}},
        {"Sucre",
         {1.0, precise::currency, commodities::generateCurrencyCode("XSU")}},
        {"SolomonIslandsDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("SBD")}},
        {"SomaliShilling",
         {1.0, precise::currency, commodities::generateCurrencyCode("SOS")}},
        {"SouthSudanesePound",
         {1.0, precise::currency, commodities::generateCurrencyCode("SSP")}},
        {"SriLankaRupee",
         {1.0, precise::currency, commodities::generateCurrencyCode("LKR")}},
        {"SudanesePound",
         {1.0, precise::currency, commodities::generateCurrencyCode("SDG")}},
        {"SurinamDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("SRD")}},
        {"WIREuro",
         {1.0, precise::currency, commodities::generateCurrencyCode("CHE")}},
        {"WIRFranc",
         {1.0, precise::currency, commodities::generateCurrencyCode("CHW")}},
        {"SyrianPound",
         {1.0, precise::currency, commodities::generateCurrencyCode("SYP")}},
        {"NewTaiwanDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("TWD")}},
        {"Somoni",
         {1.0, precise::currency, commodities::generateCurrencyCode("TJS")}},
        {"TanzanianShilling",
         {1.0, precise::currency, commodities::generateCurrencyCode("TZS")}},
        {"Baht",
         {1.0, precise::currency, commodities::generateCurrencyCode("THB")}},
        {"Pa'anga",
         {1.0, precise::currency, commodities::generateCurrencyCode("TOP")}},
        {"TrinidadandTobagoDollar",
         {1.0, precise::currency, commodities::generateCurrencyCode("TTD")}},
        {"TunisianDinar",
         {1.0, precise::currency, commodities::generateCurrencyCode("TND")}},
        {"TurkishLira",
         {1.0, precise::currency, commodities::generateCurrencyCode("TRY")}},
        {"TurkmenistanNewManat",
         {1.0, precise::currency, commodities::generateCurrencyCode("TMT")}},
        {"UgandaShilling",
         {1.0, precise::currency, commodities::generateCurrencyCode("UGX")}},
        {"Hryvnia",
         {1.0, precise::currency, commodities::generateCurrencyCode("UAH")}},
        {"UAEDirham",
         {1.0, precise::currency, commodities::generateCurrencyCode("AED")}},
        {"USDollar(Nextday)",
         {1.0, precise::currency, commodities::generateCurrencyCode("USN")}},
        {"PesoUruguayo",
         {1.0, precise::currency, commodities::generateCurrencyCode("UYU")}},
        {"UruguayPesoenUnidadesIndexadas(UI)",
         {1.0, precise::currency, commodities::generateCurrencyCode("UYI")}},
        {"UnidadPrevisional",
         {1.0, precise::currency, commodities::generateCurrencyCode("UYW")}},
        {"UzbekistanSum",
         {1.0, precise::currency, commodities::generateCurrencyCode("UZS")}},
        {"Vatu",
         {1.0, precise::currency, commodities::generateCurrencyCode("VUV")}},
        {"BolivarSoberano",
         {1.0, precise::currency, commodities::generateCurrencyCode("VES")}},
        {"Dong",
         {1.0, precise::currency, commodities::generateCurrencyCode("VND")}},
        {"YemeniRial",
         {1.0, precise::currency, commodities::generateCurrencyCode("YER")}},
        {"ZambianKwacha",
         {1.0, precise::currency, commodities::generateCurrencyCode("ZMW")}},
        {"ZimbabweGold",
         {1.0, precise::currency, commodities::generateCurrencyCode("ZWG")}},
        // END CURRENCIES
    }};

#endif

// Mostly from https://en.wikipedia.org/wiki/International_System_of_Units
UNITS_CPP14_CONSTEXPR_OBJECT
std::array<std::pair<const char*, precise_unit>, 251> defined_measurement_types{
    {
        {"", precise::defunit},
        {"arb", precise::defunit},
        {"arbitrary", precise::defunit},
        {"length", precise::m},
        {"len", precise::m},
        {"distance", precise::m},
        {"height", precise::m},
        {"depth", precise::m},
        {"width", precise::m},
        {"diameter", precise::m},
        {"thickness", precise::m},
        {"gauge", precise::m},
        {"invlen", precise::m.inv()},
        {"volume", precise::m.pow(3)},
        {"dryvolume", precise::m.pow(3)},
        {"vol", precise::m.pow(3)},
        {"fluidvolume", precise::L},
        {"time", precise::s},
        {"duration", precise::s},
        {"mass", precise::kg},
        {"weight", precise::N},
        {"current", precise::A},
        {"electriccurrent", precise::A},
        {"magnetomotiveforce", precise::A},
        {"temperature", precise::K},
        {u8"\u2C90", precise::K},
        {u8"\u2129", precise::K},
        {u8"\u03F4", precise::K},
        {u8"\u0398", precise::K},
        {"celsiustemperature", precise::degC},
        {"temp", precise::K},
        {"thermodynamictemperature", precise::K},
        {"thermalconductivity", precise::W / precise::m / precise::K},
        {"amountofsubstance", precise::mol},
        {"amount", precise::mol},
        {"substance", precise::mol},
        {"sub", precise::mol},
        {"luminousintensity", precise::cd},
        {"area", precise::m.pow(2)},
        {"speed", precise::m / precise::s},
        {"velocity", precise::m / precise::s},
        {"vel", precise::m / precise::s},
        {"wavenumber", precise::m.inv()},
        {"acceleration", precise::m / precise::s.pow(2)},
        {"accel", precise::m / precise::s.pow(2)},
        {"density", precise::kg / precise::m.pow(3)},
        {"massdensity", precise::kg / precise::m.pow(3)},
        {"massconcentration", precise::kg / precise::m.pow(3)},
        {"surfacedensity", precise::kg / precise::m.pow(2)},
        {"lineardensity", precise::kg / precise::m},
        {"lineicmass", precise::kg / precise::m},
        {"linearmassdensity", precise::kg / precise::m},
        {"armass", precise::kg / precise::m.pow(2)},
        {"specificvolume", precise::m.pow(3) / precise::kg},
        {"vcnt", precise::L / precise::kg},
        {"currentdensity", precise::A / precise::m.pow(2)},
        {"magneticfieldstrength", precise::A / precise::m},
        {"magneticfieldintensity", precise::A / precise::m},
        {"magnetictension", precise::Pa / precise::m},
        {"concentration", precise::mol / precise::m.pow(3)},
        {"luminance", precise::cd / precise::m.pow(2)},
        {"brightness", precise::cd / precise::m.pow(2)},
        {"lum.intensitydensity", precise::cd / precise::m.pow(2)},
        {"planeangle", precise::rad},
        {"angle", precise::rad},
        {"solidangle", precise::rad.pow(2)},
        {"angular", precise::rad},
        {"frequency", precise::Hz},
        {"freq", precise::Hz},
        {"frequencies", precise::Hz},
        {"force", precise::N},
        {"pressure", precise::Pa},
        {"pres", precise::Pa},
        {"press", precise::Pa},
        {"stress", precise::Pa},
        {"energy", precise::J},
        {"eng", precise::J},
        {"enrg", precise::J},
        {"work", precise::J},
        {"heat", precise::J},
        {"power", precise::W},
        {"powerlevel", precise::W* precise::log::neper},
        {"loudness", precise::special::sone},
        {"radiantflux", precise::W},
        {"heatfluxdensity", precise::W / precise::m.pow(2)},
        {"electriccharge", precise::C},
        {"electricfluxdensity", precise::C / precise::m.pow(2)},
        {"charge", precise::C},
        {"electricchargedensity", precise::C / precise::m.pow(3)},
        {"quantityofelectricity", precise::C},
        {"voltage", precise::V},
        {"electricalpotential", precise::V},
        {"potentialdifference", precise::V},
        {"electricpotentialdifference", precise::V},
        {"elpot", precise::V},
        {"electricpotential", precise::V},
        {"electricpotentiallevel", precise::V* precise::log::neper},
        {"logrtoelp", precise::V* precise::log::neper},
        {"emf", precise::V},
        {"electromotiveforce", precise::V},
        {"capacitance", precise::F},
        {"electriccapacitance", precise::F},
        {"resistance", precise::ohm},
        {"impedance", precise::ohm},
        {"reactance", precise::ohm},
        {"conductance", precise::siemens},
        {"electricdipolemoment", precise::C* precise::m},
        {"electricresistance", precise::ohm},
        {"electricresistivity", precise::ohm* precise::m},
        {"electricimpedance", precise::ohm},
        {"electricreactance", precise::ohm},
        {"electricalconductance", precise::siemens},
        {"electricconductance", precise::siemens},
        {"conduction", precise::siemens},
        {"magneticflux", precise::Wb},
        {"fluxofmagneticinduction", precise::Wb},
        {"magneticfluxdensity", precise::T},
        {"magneticinduction", precise::T},
        {"fluxdensity", precise::T},
        {"noisevoltagedensity", precise::V / precise::special::rootHertz},
        {"inductance", precise::H},
        {"induction", precise::H},
        {"luminousflux", precise::lm},
        {"illuminance", precise::lx},
        {"illumination", precise::lx},
        {"luminousemittance", precise::lx},
        {"intensityoflight", precise::lx},
        {"lightintensity", precise::lx},
        {"radioactivity", precise::Bq},
        {"radionuclideactivity", precise::Bq},
        {"radiation", precise::Bq},
        {"activity", precise::Bq},
        {"activities", precise::Bq},
        {"logarithmofpowerratio", precise::log::dB},
        {"absorbeddose", precise::Gy},
        {"ionizingradiation", precise::Gy},
        {"kerma", precise::Gy},
        {"energydose", precise::Gy},
        {"absorbeddoseenergy", precise::Gy},
        {"engcnt", precise::Gy},
        {"equivalentdose", precise::Sv},
        {"doseequivalent", precise::Sv},
        {"radiationdose", precise::Sv},
        {"radiationdosage", precise::Sv},
        {"effectivedose", precise::Sv},
        {"operationaldose", precise::Sv},
        {"committeddose", precise::Sv},
        {"ionizingradiationdose", precise::Gy},
        {"iondose", precise::Gy},
        {"catalyticactivity", precise::kat},
        {"specificenergy", precise::J / precise::kg},
        {"specificheat", precise::J / precise::kg / precise::K},
        {"engcnc", precise::J / precise::m.pow(3)},
        {"torque", precise::N* precise::m / precise::radian},
        {"momentofforce", precise::N* precise::m / precise::radian},
        {"moment", precise::N* precise::m / precise::radian},
        {"angularvelocity", precise::rad / precise::s},
        {"rotationalspeed", precise::rad / precise::s},
        {"rotationalvelocity", precise::rad / precise::s},
        {"angularacceleration", precise::rad / precise::s.pow(2)},
        {"surfacetension", precise::N / precise::m},
        {"electricfield", precise::V / precise::m},
        {"electricfieldstrength", precise::V / precise::m},
        {"permittivity", precise::F / precise::m},
        {"permeability", precise::H / precise::m},
        {"electricpermittivity", precise::F / precise::m},
        {"magneticpermeability", precise::H / precise::m},
        {"exposure", precise::C / precise::kg},
        {"heatcapacity", precise::J / precise::K},
        {"entropy", precise::J / precise::K},
        {"specificentropy", precise::J / precise::kg / precise::K},
        {"specificgravity", precise::pu* precise::kg / precise::m.pow(3)},
        {"dynamicviscosity", precise::Pa* precise::s},
        {"viscosity", precise::Pa* precise::s},
        {"visc", precise::Pa* precise::s},
        {"fluidity", precise::one / precise::Pa / precise::s},
        {"kinematicviscosity", precise::m.pow(2) / precise::s},
        {"radiantintensity", precise::W / precise::rad.pow(2)},
        {"radiance", precise::W / precise::rad.pow(2) / precise::m.pow(2)},
        {"dimless", precise::one},
        {"ratio", precise::one},
        {"fraction", precise::one},
        {"number", precise::one},
        {"nfr", precise::one},
        {"num", precise::one},
        {"age", precise::time::ag},
        {"strain", precise::pu* precise::m},
        {"impulse", precise::N* precise::s},
        {"imp", precise::N* precise::s},
        {"absorbeddoserate", precise::Gy / precise::s},
        {"mcnc", precise::kg / precise::m.pow(3)},
        {"scnc", precise::mol / precise::m.pow(3)},
        {"scnt", precise::mol / precise::kg},
        {"ncnc", precise::one / precise::m.pow(3)},
        {"ncncn", precise::one / precise::m.pow(3)},
        {"ncnt", precise::one / precise::kg},
        {"substanceconcentration", precise::mol / precise::m.pow(3)},
        {"level", precise::log::neper},
        {"logrto", precise::log::neper},
        {"arvol", precise::m.pow(3) / precise::m.pow(2)},
        {"arsub", precise::mol / precise::m.pow(2)},
        {"lineicvolume", precise::m.pow(3) / precise::m},
        {"lineicnumber", precise::one / precise::m},
        {"refraction", precise::one / precise::m},
        {"naric", precise::one / precise::m.pow(2)},
        {"nlen", precise::one / precise::m},
        {"acidity", precise::laboratory::pH},
        {"cact", precise::kat},
        {"magneticfield", precise::T},
        {"magnetic", precise::T},
        {"fluence", precise::one / precise::m.pow(2)},
        {"mcnt", precise::pu* precise::m},
        {"ccnt", precise::kat / precise::kg},
        {"ccnc", precise::kat / precise::L},
        {"acnc", precise::one / precise::L},
        {"velcnc", precise::m / precise::s / precise::L},
        {"mrat", precise::kg / precise::s},
        {"osmol",
         precise_unit(1.0, precise::mol, commodities::packaging::particle)},
        {"massfraction", precise::pu* precise::kg},
        {"mfr", precise::pu* precise::kg},
        {"amplitudespectraldensity", precise::special::ASD},
        {"fluidresistance", precise::Pa* precise::s / precise::m.pow(3)},
        {"signaltransmissionrate", precise::bit / precise::s},
        {"engmass", precise::J / precise::m.pow(3)},
        {"massicenergy", precise::J / precise::m.pow(3)},
        {"energydensity", precise::J / precise::m.pow(3)},
        {"entsub", precise::mol},
        {"mnum", precise::kg},
        {"cmass", precise::kg / precise::kat},
        {"stiffness", precise::N / precise::m},
        {"signalingrate", precise::bit / precise::s},
        {"datarate", precise::bit / precise::s},
        {"elasticity", precise::N / precise::m.pow(2)},
        {"compliance", precise::m / precise::N},
        {"informationcapacity", precise::data::bit},
        {"compli", precise::m / precise::N},
        {"vascularresistance", precise::Pa* precise::s / precise::m.pow(3)},
        {"enzymaticactivity", precise::kat},
        {"catalyticconcentration", precise::kat / precise::m.pow(3)},
        {"molarenergy", precise::J / precise::mol},
        {"molarentropy", precise::J / precise::mol / precise::K},
        {"datatransferrate", precise::bit / precise::s},
        {"flowrate", precise::m.pow(3) / precise::s},
        {"fuelconsumption", precise::km / precise::L},
        {"information", precise::bit},
        {"unitless", precise::one},
        {"numeric", precise::one},
        {"currency", precise::currency},
        {"value", precise::currency},
        {"money", precise::currency},
        {"count", precise::count},
    }};
}  // namespace UNITS_NAMESPACE
