{"version":3,"file":"physical-parser.js","sources":["../node_modules/js-quantities/build/quantities.js","../src/parseNumbersUnits.js","../src/parseBoilingPoint.js","../src/parseDensity.js","../src/parseRefractiveIndex.js","../src/parseVaporPressure.js"],"sourcesContent":["/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Qty = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-imp\", \"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<Gal>\" : [[\"Gal\"], 1e-2, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.7.6\";\n\n  return Qty;\n\n})));\n","import Qty from 'js-quantities';\n\n/**\n * Parse a string that may contain min / max and units values\n * @param {string} string\n * @param {object} [options={}]\n * @param {number} [options.defaultValue]\n * @param {string} [options.defjaultUnits]\n * @param {string} [options.targetUnits]\n * @param {string} [options.optional=false] Is this value optional. Would through an error if empty and not optional\n */\nexport function parseNumbersUnits(string = '', options = {}) {\n  const {\n    defaultUnits = undefined,\n    targetUnits = undefined,\n    defaultValue = undefined,\n    optional = false,\n  } = options;\n  let normalized = String(string).replace(/ /g, '').replace(/,/g, '.');\n\n  if (normalized.match(/^\\(.*\\)$/)) {\n    normalized = normalized.substring(1, normalized.length - 2);\n  }\n\n  // still parenthesis ??? We remove what is after\n  normalized = normalized.replace(/\\(.*/, '');\n\n  if (optional && !normalized) return {};\n  let splitter = /^([0-9.Ee-]*)([a-zA-Z °]*)$/;\n  if (!normalized.match(splitter)) {\n    throw Error(`Can not parseNumbersUnits of: ${string}`);\n  }\n\n  let numbers = normalized.replace(splitter, '$1');\n  let units = normalized.replace(splitter, '$2').trim();\n\n  let low;\n  let high;\n\n  if (numbers === '') {\n    if (defaultValue) {\n      numbers = String(defaultValue).replace(/ /g, '');\n    } else {\n      throw Error(`Can not parseNumbersUnits of: ${string}`);\n    }\n  }\n\n  if (numbers.includes('--')) {\n    // -5--4\n    low = Number(numbers.split('--')[0]);\n    high = Number(`-${numbers.split('--')[1]}`);\n  } else if (numbers.startsWith('-')) {\n    // -5 or -1-1 (minus 1 to plus 1)\n    let subparts = numbers.split('-');\n    switch (subparts.length) {\n      case 2:\n        low = Number(numbers);\n        break;\n      case 3:\n        low = Number(`-${subparts[1]}`);\n        high = Number(+subparts[2]);\n        break;\n      default:\n        throw new Error(`Can not parse: ${string}`);\n    }\n  } else {\n    let subparts = numbers.split('-');\n    low = subparts[0] !== '' ? Number(subparts[0]) : undefined;\n    high = subparts[1] !== undefined ? Number(subparts[1]) : undefined;\n  }\n\n  if (!units) units = defaultUnits;\n\n  // Should we convert the units\n  if (targetUnits) {\n    let convert = Qty.swiftConverter(\n      units.replace(/°/g, 'temp'),\n      targetUnits.replace(/°/g, 'temp'),\n    );\n\n    if (low !== undefined) {\n      low = convert(low);\n    }\n    if (high !== undefined) {\n      high = convert(high);\n    }\n    units = targetUnits;\n  }\n\n  return {\n    low,\n    high,\n    units,\n  };\n}\n","import { parseNumbersUnits } from './parseNumbersUnits';\n\n/**\n *\n * @param {String} string\n * @param {object} [options={}]\n * @param {object} [options.temperature={}]\n * @param {string} [options.temperature.defaultUnits]\n * @param {string} [options.temperature.targetUnits]\n * @param {object} [options.pressure={}]\n * @param {number} [options.pressure.defaultValue]\n * @param {string} [options.pressure.defaultUnits]\n * @param {string} [options.pressure.targetUnits]\n * @param {string} [options.pressure.optional]\n */\nexport function parseBoilingPoint(string, options = {}) {\n  let parts = String(string).split(/[@/]|, | at /);\n  return {\n    temperature: parseNumbersUnits(parts[0], options.temperature),\n    pressure: parseNumbersUnits(parts[1], options.pressure),\n  };\n}\n","import { parseNumbersUnits } from './parseNumbersUnits';\n\n/**\n *\n * @param {String} string\n * @param {object} [options={}]\n * @param {object} [options.value={}]\n * @param {string} [options.value.defaultUnits]\n * @param {string} [options.value.targetUnits]\n * @param {object} [options.temperature={}]\n * @param {number} [options.temperature.defaultValue]\n * @param {string} [options.temperature.defaultUnits]\n * @param {string} [options.temperature.targetUnits]\n */\nexport function parseDensity(string, options = {}) {\n  let parts = String(string).split(/[@/]|, /);\n\n  let value = parts[0];\n  let temperature = parts[1];\n  if (temperature) {\n    temperature = temperature.replace(/ *t= */, '');\n  }\n\n  return {\n    value: parseNumbersUnits(value, options.value),\n    temperature: parseNumbersUnits(temperature, options.temperature),\n  };\n}\n","import { parseNumbersUnits } from './parseNumbersUnits';\n\n/**\n *\n * @param {String} string\n * @param {object} [options={}]\n * @param {object} [options.value={}]\n * @param {string} [options.value.defaultUnits]\n * @param {string} [options.value.targetUnits]\n * @param {object} [options.temperature={}]\n * @param {number} [options.temperature.defaultValue]\n * @param {string} [options.temperature.defaultUnits]\n * @param {string} [options.temperature.targetUnits]\n */\nexport function parseRefractiveIndex(string, options = {}) {\n  let parts = String(string).split(/[@/]|, /);\n\n  let value = parts[0];\n  let temperature = parts[1];\n  if (temperature) {\n    temperature = temperature.replace(/ *t= */, '');\n  }\n\n  return {\n    value: parseNumbersUnits(value, options.value),\n    temperature: parseNumbersUnits(temperature, options.temperature),\n  };\n}\n","import { parseNumbersUnits } from './parseNumbersUnits';\n\n/**\n *\n * @param {String} string\n * @param {object} [options={}]\n * @param {object} [options.temperature={}]\n * @param {string} [options.temperature.defaultUnits]\n * @param {string} [options.temperature.targetUnits]\n * @param {string} [options.pressure.optional]\n * @param {object} [options.pressure={}]\n * @param {string} [options.pressure.defaultUnits]\n * @param {string} [options.pressure.targetUnits]\n\n */\nexport function parseVaporPressure(string, options = {}) {\n  let parts = String(string).split(/[@/]|, | at /);\n  return {\n    pressure: parseNumbersUnits(parts[0], options.pressure),\n    temperature: parseNumbersUnits(parts[1], options.temperature),\n  };\n}\n"],"names":["global","factory","module","this","isString","value","String","isFiniteImpl","Number","isFinite","window","isNumber","identity","uniq","strings","seen","filter","item","hasOwnProperty","compareArray","array1","array2","length","i","assign","target","properties","Object","keys","forEach","key","mulSafe","result","decimals","arguments","arg","getFractional","round","divSafe","num","den","Error","factor","Math","pow","invDen","val","count","QtyError","err","create","prototype","apply","name","message","stack","constructor","throwIncompatibleUnits","left","right","UNITS","PI","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","scalar","numerator","denominator","unit","undefined","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","j","getUnits","kind","units","unitKeys","indexOf","push","substr","getKinds","sort","a","b","toLowerCase","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","vector","unitSignatureVector","call","reduce","previous","current","isBase","toBase","Array","r","n","k","SIGN","INTEGER","SIGNED_INTEGER","FRACTION","FLOAT","EXPONENT","SCI_NUMBER","SIGNED_NUMBER","QTY_STRING","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","parse","toString","trim","exec","scalarMatch","replace","parseFloat","top","bottom","x","nx","isNaN","UNIT_TEST_REGEX","test","abs","parseUnits","PREFIX_REGEX","join","UNIT_REGEX","BOUNDARY_REGEX","UNIT_MATCH","UNIT_MATCH_REGEX","parsedUnitsCache","cached","unitMatch","normalizedUnits","slice","map","concat","globalParse","e","isQty","Qty","initValue","initUnits","assertValidConstructorArgs","baseScalar","_conversionCache","isDefinitionObject","updateBaseScalar","isTemperature","base","KINDS","knownSignature","isDegrees","match","subtractTemperatures","lhs","rhs","lhsUnits","rhsConverted","to","dstDegrees","getDegreeUnits","subtractTempDegrees","temp","deg","tempDegrees","addTempDegrees","toDegrees","src","dst","srcDegK","toDegK","dstUnits","dstScalar","qty","q","toTemp","toTempK","other","isCompatible","isInverse","inverse","baseUnitCache","toBaseUnits","mul","toFloat","isUnitless","toPrec","precQuantity","precRoundedResult","swiftConverter","srcUnits","srcQty","dstQty","eq","convert","converter","isArray","add","sub","op1","op2","numdenscale","cleanTerms","div","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","direction","prefix","prefixValue","combinedPrefixValue","scale","prop","compareTo","lt","lte","gt","gte","same","every","_isBase","NestedMap","get","index","childMap","data","set","defaultFormatter","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","out","outScalar","format","targetQty","stringifiedUnitsCache","stringified","isUnity","simplify","getOutputNames","unitNames","token","tokenNext","unitCounts","acc","unitCounter","unitCount","version","parseNumbersUnits","string","options","defaultUnits","defaultValue","optional","normalized","substring","splitter","numbers","low","high","includes","split","startsWith","subparts","parseBoilingPoint","parts","temperature","pressure","parseDensity","parseRefractiveIndex","parseVaporPressure"],"mappings":"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"}