fxparser
Version:
Formula parser designed for Yotta Needs.
21 lines • 486 kB
JavaScript
!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.fxParser=e():n.fxParser=e()}(window,function(){return function(n){var e={};function r(t){if(e[t])return e[t].exports;var a=e[t]={i:t,l:!1,exports:{}};return n[t].call(a.exports,a,a.exports,r),a.l=!0,a.exports}return r.m=n,r.c=e,r.d=function(n,e,t){r.o(n,e)||Object.defineProperty(n,e,{configurable:!1,enumerable:!0,get:t})},r.r=function(n){Object.defineProperty(n,"__esModule",{value:!0})},r.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(e,"a",e),e},r.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},r.p="",r(r.s="./src/index.js")}({"./node_modules/@cohacks/fxjs/index.js":
/*!*********************************************!*\
!*** ./node_modules/@cohacks/fxjs/index.js ***!
\*********************************************/
/*! no static exports found */function(module,exports,__webpack_require__){eval('var categories = [\n __webpack_require__(/*! ./lib/compatibility */ "./node_modules/@cohacks/fxjs/lib/compatibility.js"),\n __webpack_require__(/*! ./lib/database */ "./node_modules/@cohacks/fxjs/lib/database.js"),\n __webpack_require__(/*! ./lib/engineering */ "./node_modules/@cohacks/fxjs/lib/engineering.js"),\n __webpack_require__(/*! ./lib/logical */ "./node_modules/@cohacks/fxjs/lib/logical.js"),\n __webpack_require__(/*! ./lib/math-trig */ "./node_modules/@cohacks/fxjs/lib/math-trig.js"),\n __webpack_require__(/*! ./lib/text */ "./node_modules/@cohacks/fxjs/lib/text.js"),\n __webpack_require__(/*! ./lib/date-time */ "./node_modules/@cohacks/fxjs/lib/date-time.js"),\n __webpack_require__(/*! ./lib/financial */ "./node_modules/@cohacks/fxjs/lib/financial.js"),\n __webpack_require__(/*! ./lib/information */ "./node_modules/@cohacks/fxjs/lib/information.js"),\n __webpack_require__(/*! ./lib/lookup-reference */ "./node_modules/@cohacks/fxjs/lib/lookup-reference.js"),\n __webpack_require__(/*! ./lib/statistical */ "./node_modules/@cohacks/fxjs/lib/statistical.js"),\n __webpack_require__(/*! ./lib/miscellaneous */ "./node_modules/@cohacks/fxjs/lib/miscellaneous.js")\n];\n\nfor (var c in categories) {\n var category = categories[c];\n for (var f in category) {\n exports[f] = exports[f] || category[f];\n }\n}\n\n\n//# sourceURL=webpack://fxParser/./node_modules/@cohacks/fxjs/index.js?')},"./node_modules/@cohacks/fxjs/lib/compatibility.js":
/*!*********************************************************!*\
!*** ./node_modules/@cohacks/fxjs/lib/compatibility.js ***!
\*********************************************************/
/*! no static exports found */function(module,exports,__webpack_require__){eval('var mathTrig = __webpack_require__(/*! ./math-trig */ "./node_modules/@cohacks/fxjs/lib/math-trig.js");\nvar statistical = __webpack_require__(/*! ./statistical */ "./node_modules/@cohacks/fxjs/lib/statistical.js");\nvar engineering = __webpack_require__(/*! ./engineering */ "./node_modules/@cohacks/fxjs/lib/engineering.js");\nvar dateTime = __webpack_require__(/*! ./date-time */ "./node_modules/@cohacks/fxjs/lib/date-time.js");\n\nfunction set(fn, root) {\n if (root) {\n for (var i in root) {\n fn[i] = root[i];\n }\n }\n\n return fn;\n}\n\nexports.BETADIST = statistical.BETA.DIST;\nexports.BETAINV = statistical.BETA.INV;\nexports.BINOMDIST = statistical.BINOM.DIST;\nexports.CEILING = exports.ISOCEILING = set(mathTrig.CEILING.MATH, mathTrig.CEILING);\nexports.CEILINGMATH = mathTrig.CEILING.MATH;\nexports.CEILINGPRECISE = mathTrig.CEILING.PRECISE;\nexports.CHIDIST = statistical.CHISQ.DIST;\nexports.CHIDISTRT = statistical.CHISQ.DIST.RT;\nexports.CHIINV = statistical.CHISQ.INV;\nexports.CHIINVRT = statistical.CHISQ.INV.RT;\nexports.CHITEST = statistical.CHISQ.TEST;\nexports.CONFIDENCE = set(statistical.CONFIDENCE.NORM, statistical.CONFIDENCE);\nexports.COVAR = statistical.COVARIANCE.P;\nexports.COVARIANCEP = statistical.COVARIANCE.P;\nexports.COVARIANCES = statistical.COVARIANCE.S;\nexports.CRITBINOM = statistical.BINOM.INV;\nexports.EXPONDIST = statistical.EXPON.DIST;\nexports.ERFCPRECISE = engineering.ERFC.PRECISE;\nexports.ERFPRECISE = engineering.ERF.PRECISE;\nexports.FDIST = statistical.F.DIST;\nexports.FDISTRT = statistical.F.DIST.RT;\nexports.FINVRT = statistical.F.INV.RT;\nexports.FINV = statistical.F.INV;\nexports.FLOOR = set(mathTrig.FLOOR.MATH, mathTrig.FLOOR);\nexports.FLOORMATH = mathTrig.FLOOR.MATH;\nexports.FLOORPRECISE = mathTrig.FLOOR.PRECISE;\nexports.FTEST = statistical.F.TEST;\nexports.GAMMADIST = statistical.GAMMA.DIST;\nexports.GAMMAINV = statistical.GAMMA.INV;\nexports.GAMMALNPRECISE = statistical.GAMMALN.PRECISE;\nexports.HYPGEOMDIST = statistical.HYPGEOM.DIST;\nexports.LOGINV = statistical.LOGNORM.INV;\nexports.LOGNORMINV = statistical.LOGNORM.INV;\nexports.LOGNORMDIST = statistical.LOGNORM.DIST;\nexports.MODE = set(statistical.MODE.SNGL, statistical.MODE);\nexports.MODEMULT = statistical.MODE.MULT;\nexports.MODESNGL = statistical.MODE.SNGL;\nexports.NEGBINOMDIST = statistical.NEGBINOM.DIST;\nexports.NETWORKDAYSINTL = dateTime.NETWORKDAYS.INTL;\nexports.NORMDIST = statistical.NORM.DIST;\nexports.NORMINV = statistical.NORM.INV;\nexports.NORMSDIST = statistical.NORM.S.DIST;\nexports.NORMSINV = statistical.NORM.S.INV;\nexports.PERCENTILE = set(statistical.PERCENTILE.EXC, statistical.PERCENTILE);\nexports.PERCENTILEEXC = statistical.PERCENTILE.EXC;\nexports.PERCENTILEINC = statistical.PERCENTILE.INC;\nexports.PERCENTRANK = set(statistical.PERCENTRANK.INC, statistical.PERCENTRANK);\nexports.PERCENTRANKEXC = statistical.PERCENTRANK.EXC;\nexports.PERCENTRANKINC = statistical.PERCENTRANK.INC;\nexports.POISSON = set(statistical.POISSON.DIST, statistical.POISSON);\nexports.POISSONDIST = statistical.POISSON.DIST;\nexports.QUARTILE = set(statistical.QUARTILE.INC, statistical.QUARTILE);\nexports.QUARTILEEXC = statistical.QUARTILE.EXC;\nexports.QUARTILEINC = statistical.QUARTILE.INC;\nexports.RANK = set(statistical.RANK.EQ, statistical.RANK);\nexports.RANKAVG = statistical.RANK.AVG;\nexports.RANKEQ = statistical.RANK.EQ;\nexports.SKEWP = statistical.SKEW.P;\nexports.STDEV = set(statistical.STDEV.S, statistical.STDEV);\nexports.STDEVP = statistical.STDEV.P;\nexports.STDEVS = statistical.STDEV.S;\nexports.TDIST = statistical.T.DIST;\nexports.TDISTRT = statistical.T.DIST.RT;\nexports.TINV = statistical.T.INV;\nexports.TTEST = statistical.T.TEST;\nexports.VAR = set(statistical.VAR.S, statistical.VAR);\nexports.VARP = statistical.VAR.P;\nexports.VARS = statistical.VAR.S;\nexports.WEIBULL = set(statistical.WEIBULL.DIST, statistical.WEIBULL);\nexports.WEIBULLDIST = statistical.WEIBULL.DIST;\nexports.WORKDAYINTL = dateTime.WORKDAY.INTL;\nexports.ZTEST = statistical.Z.TEST;\n\n\n//# sourceURL=webpack://fxParser/./node_modules/@cohacks/fxjs/lib/compatibility.js?')},"./node_modules/@cohacks/fxjs/lib/database.js":
/*!****************************************************!*\
!*** ./node_modules/@cohacks/fxjs/lib/database.js ***!
\****************************************************/
/*! no static exports found */function(module,exports,__webpack_require__){eval('var error = __webpack_require__(/*! ./error */ "./node_modules/@cohacks/fxjs/lib/error.js");\nvar stats = __webpack_require__(/*! ./statistical */ "./node_modules/@cohacks/fxjs/lib/statistical.js");\nvar maths = __webpack_require__(/*! ./math-trig */ "./node_modules/@cohacks/fxjs/lib/math-trig.js");\nvar utils = __webpack_require__(/*! ./utils */ "./node_modules/@cohacks/fxjs/lib/utils.js");\n\nfunction compact(array) {\n var result = [];\n\n utils.arrayEach(array, function(value) {\n if (value) {\n result.push(value);\n }\n });\n\n return result;\n}\n\nexports.FINDFIELD = function(database, title) {\n var index = null;\n\n utils.arrayEach(database, function(value, i) {\n if (value[0] === title) {\n index = i;\n return false;\n }\n });\n\n // Return error if the input field title is incorrect\n if (index == null) {\n return error.value;\n }\n\n return index;\n};\n\nfunction findResultIndex(database, criterias) {\n var matches = {};\n for (var i = 1; i < database[0].length; ++i) {\n matches[i] = true;\n }\n var maxCriteriaLength = criterias[0].length;\n for (i = 1; i < criterias.length; ++i) {\n if (criterias[i].length > maxCriteriaLength) {\n maxCriteriaLength = criterias[i].length;\n }\n }\n\n for (var k = 1; k < database.length; ++k) {\n for (var l = 1; l < database[k].length; ++l) {\n var currentCriteriaResult = false;\n var hasMatchingCriteria = false;\n for (var j = 0; j < criterias.length; ++j) {\n var criteria = criterias[j];\n if (criteria.length < maxCriteriaLength) {\n continue;\n }\n\n var criteriaField = criteria[0];\n if (database[k][0] !== criteriaField) {\n continue;\n }\n hasMatchingCriteria = true;\n for (var p = 1; p < criteria.length; ++p) {\n currentCriteriaResult = currentCriteriaResult || eval(database[k][l] + criteria[p]); // jshint ignore:line\n }\n }\n if (hasMatchingCriteria) {\n matches[l] = matches[l] && currentCriteriaResult;\n }\n }\n }\n\n var result = [];\n for (var n = 0; n < database[0].length; ++n) {\n if (matches[n]) {\n result.push(n - 1);\n }\n }\n\n return result;\n}\n\n// Database functions\nexports.DAVERAGE = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n var sum = 0;\n\n utils.arrayEach(resultIndexes, function(value) {\n sum += targetFields[value];\n });\n\n return resultIndexes.length === 0 ? error.div0 : sum / resultIndexes.length;\n};\n\nexports.DCOUNT = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n\n return stats.COUNT(targetValues);\n};\n\nexports.DCOUNTA = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n\n return stats.COUNTA(targetValues);\n};\n\nexports.DGET = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n // Return error if no record meets the criteria\n if (resultIndexes.length === 0) {\n return error.value;\n }\n // Returns the #NUM! error value because more than one record meets the\n // criteria\n if (resultIndexes.length > 1) {\n return error.num;\n }\n\n return targetFields[resultIndexes[0]];\n};\n\nexports.DMAX = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var maxValue = targetFields[resultIndexes[0]];\n\n utils.arrayEach(resultIndexes, function(value) {\n if (maxValue < targetFields[value]) {\n maxValue = targetFields[value];\n }\n });\n\n return maxValue;\n};\n\nexports.DMIN = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var minValue = targetFields[resultIndexes[0]];\n\n utils.arrayEach(resultIndexes, function(value) {\n if (minValue > targetFields[value]) {\n minValue = targetFields[value];\n }\n });\n\n return minValue;\n};\n\nexports.DPRODUCT = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n targetValues = compact(targetValues);\n\n var result = 1;\n\n utils.arrayEach(targetValues, function(value) {\n result *= value;\n });\n\n return result;\n};\n\nexports.DSTDEV = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n targetValues = compact(targetValues);\n\n return stats.STDEV.S(targetValues);\n};\n\nexports.DSTDEVP = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n targetValues = compact(targetValues);\n\n return stats.STDEV.P(targetValues);\n};\n\nexports.DSUM = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n\n return maths.SUM(targetValues);\n};\n\nexports.DVAR = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n\n return stats.VAR.S(targetValues);\n};\n\nexports.DVARP = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== "string")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === "string") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n\n return stats.VAR.P(targetValues);\n};\n\n\n//# sourceURL=webpack://fxParser/./node_modules/@cohacks/fxjs/lib/database.js?')},"./node_modules/@cohacks/fxjs/lib/date-time.js":
/*!*****************************************************!*\
!*** ./node_modules/@cohacks/fxjs/lib/date-time.js ***!
\*****************************************************/
/*! no static exports found */function(module,exports,__webpack_require__){eval("var error = __webpack_require__(/*! ./error */ \"./node_modules/@cohacks/fxjs/lib/error.js\");\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/@cohacks/fxjs/lib/utils.js\");\n\nvar d1900 = new Date(1900, 0, 1);\nvar WEEK_STARTS = [\n undefined,\n 0,\n 1,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 0\n];\nvar WEEK_TYPES = [\n [],\n [1, 2, 3, 4, 5, 6, 7],\n [7, 1, 2, 3, 4, 5, 6],\n [6, 0, 1, 2, 3, 4, 5],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [7, 1, 2, 3, 4, 5, 6],\n [6, 7, 1, 2, 3, 4, 5],\n [5, 6, 7, 1, 2, 3, 4],\n [4, 5, 6, 7, 1, 2, 3],\n [3, 4, 5, 6, 7, 1, 2],\n [2, 3, 4, 5, 6, 7, 1],\n [1, 2, 3, 4, 5, 6, 7]\n];\nvar WEEKEND_TYPES = [\n [],\n [6, 0],\n [0, 1],\n [1, 2],\n [2, 3],\n [3, 4],\n [4, 5],\n [5, 6],\n undefined,\n undefined,\n undefined, [0, 0],\n [1, 1],\n [2, 2],\n [3, 3],\n [4, 4],\n [5, 5],\n [6, 6]\n];\n\nexports.DATE = function(year, month, day) {\n var result;\n\n year = utils.parseNumber(year);\n month = utils.parseNumber(month);\n day = utils.parseNumber(day);\n\n if (utils.anyIsError(year, month, day)) {\n result = error.value;\n\n } else if (year < 0 || month < 0 || day < 0) {\n result = error.num;\n\n } else {\n result = new Date(year, month - 1, day);\n }\n\n return result;\n};\n\nexports.DATEVALUE = function(date_text) {\n if (typeof date_text !== 'string') {\n return error.value;\n }\n var date = Date.parse(date_text);\n\n if (isNaN(date)) {\n return error.value;\n }\n if (date <= -2203891200000) {\n return (date - d1900) / 86400000 + 1;\n }\n\n return (date - d1900) / 86400000 + 2;\n};\n\nexports.DAY = function(serial_number) {\n var date = utils.parseDate(serial_number);\n if (date instanceof Error) {\n return date;\n }\n\n return date.getDate();\n};\n\nexports.DAYS = function(end_date, start_date) {\n end_date = utils.parseDate(end_date);\n start_date = utils.parseDate(start_date);\n\n if (end_date instanceof Error) {\n return end_date;\n }\n if (start_date instanceof Error) {\n return start_date;\n }\n\n return serial(end_date) - serial(start_date);\n};\n\nexports.DAYS360 = function(start_date, end_date, method) {\n method = utils.parseBool(method);\n start_date = utils.parseDate(start_date);\n end_date = utils.parseDate(end_date);\n\n if (start_date instanceof Error) {\n return start_date;\n }\n if (end_date instanceof Error) {\n return end_date;\n }\n if (method instanceof Error) {\n return method;\n }\n var sm = start_date.getMonth();\n var em = end_date.getMonth();\n var sd, ed;\n\n if (method) {\n sd = start_date.getDate() === 31 ? 30 : start_date.getDate();\n ed = end_date.getDate() === 31 ? 30 : end_date.getDate();\n } else {\n var smd = new Date(start_date.getFullYear(), sm + 1, 0).getDate();\n var emd = new Date(end_date.getFullYear(), em + 1, 0).getDate();\n sd = start_date.getDate() === smd ? 30 : start_date.getDate();\n if (end_date.getDate() === emd) {\n if (sd < 30) {\n em++;\n ed = 1;\n } else {\n ed = 30;\n }\n } else {\n ed = end_date.getDate();\n }\n }\n\n return 360 * (end_date.getFullYear() - start_date.getFullYear()) +\n 30 * (em - sm) + (ed - sd);\n};\n\nexports.EDATE = function(start_date, months) {\n start_date = utils.parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date;\n }\n if (isNaN(months)) {\n return error.value;\n }\n months = parseInt(months, 10);\n start_date.setMonth(start_date.getMonth() + months);\n\n return serial(start_date);\n};\n\nexports.EOMONTH = function(start_date, months) {\n start_date = utils.parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date;\n }\n if (isNaN(months)) {\n return error.value;\n }\n months = parseInt(months, 10);\n\n return serial(new Date(start_date.getFullYear(), start_date.getMonth() + months + 1, 0));\n};\n\nexports.HOUR = function(serial_number) {\n serial_number = utils.parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number;\n }\n\n return serial_number.getHours();\n};\n\nexports.INTERVAL = function (second) {\n if (typeof second !== 'number' && typeof second !== 'string') {\n return error.value;\n } else {\n second = parseInt(second, 10);\n }\n\n var year = Math.floor(second/946080000);\n second = second%946080000;\n var month = Math.floor(second/2592000);\n second = second%2592000;\n var day = Math.floor(second/86400);\n second = second%86400;\n\n var hour = Math.floor(second/3600);\n second = second%3600;\n var min = Math.floor(second/60);\n second = second%60;\n var sec = second;\n\n year = (year > 0) ? year + 'Y' : '';\n month = (month > 0) ? month + 'M' : '';\n day = (day > 0) ? day + 'D' : '';\n hour = (hour > 0) ? hour + 'H' : '';\n min = (min > 0) ? min + 'M' : '';\n sec = (sec > 0) ? sec + 'S' : '';\n\n return 'P' + year + month + day + 'T' + hour + min + sec;\n};\n\nexports.ISOWEEKNUM = function(date) {\n date = utils.parseDate(date);\n\n if (date instanceof Error) {\n return date;\n }\n\n date.setHours(0, 0, 0);\n date.setDate(date.getDate() + 4 - (date.getDay() || 7));\n var yearStart = new Date(date.getFullYear(), 0, 1);\n\n return Math.ceil((((date - yearStart) / 86400000) + 1) / 7);\n};\n\nexports.MINUTE = function(serial_number) {\n serial_number = utils.parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number;\n }\n\n return serial_number.getMinutes();\n};\n\nexports.MONTH = function(serial_number) {\n serial_number = utils.parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number;\n }\n\n return serial_number.getMonth() + 1;\n};\n\nexports.NETWORKDAYS = function(start_date, end_date, holidays) {\n return this.NETWORKDAYS.INTL(start_date, end_date, 1, holidays);\n};\n\nexports.NETWORKDAYS.INTL = function(start_date, end_date, weekend, holidays) {\n start_date = utils.parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date;\n }\n end_date = utils.parseDate(end_date);\n\n if (end_date instanceof Error) {\n return end_date;\n }\n if (weekend === undefined) {\n weekend = WEEKEND_TYPES[1];\n } else {\n weekend = WEEKEND_TYPES[weekend];\n }\n if (!(weekend instanceof Array)) {\n return error.value;\n }\n if (holidays === undefined) {\n holidays = [];\n } else if (!(holidays instanceof Array)) {\n holidays = [holidays];\n }\n\n for (var i = 0; i < holidays.length; i++) {\n var h = utils.parseDate(holidays[i]);\n if (h instanceof Error) {\n return h;\n }\n holidays[i] = h;\n }\n var days = (end_date - start_date) / (1000 * 60 * 60 * 24) + 1;\n var total = days;\n var day = start_date;\n for (i = 0; i < days; i++) {\n var d = (new Date().getTimezoneOffset() > 0) ? day.getUTCDay() : day.getDay();\n var dec = false;\n if (d === weekend[0] || d === weekend[1]) {\n dec = true;\n }\n for (var j = 0; j < holidays.length; j++) {\n var holiday = holidays[j];\n if (holiday.getDate() === day.getDate() &&\n holiday.getMonth() === day.getMonth() &&\n holiday.getFullYear() === day.getFullYear()) {\n dec = true;\n break;\n }\n }\n if (dec) {\n total--;\n }\n day.setDate(day.getDate() + 1);\n }\n\n return total;\n};\n\nexports.NOW = function() {\n return new Date();\n};\n\nexports.SECOND = function(serial_number) {\n serial_number = utils.parseDate(serial_number);\n if (serial_number instanceof Error) {\n return serial_number;\n }\n\n return serial_number.getSeconds();\n};\n\nexports.TIME = function(hour, minute, second) {\n hour = utils.parseNumber(hour);\n minute = utils.parseNumber(minute);\n second = utils.parseNumber(second);\n if (utils.anyIsError(hour, minute, second)) {\n return error.value;\n }\n if (hour < 0 || minute < 0 || second < 0) {\n return error.num;\n }\n\n return (3600 * hour + 60 * minute + second) / 86400;\n};\n\nexports.TIMEVALUE = function(time_text) {\n time_text = utils.parseDate(time_text);\n\n if (time_text instanceof Error) {\n return time_text;\n }\n\n return (3600 * time_text.getHours() + 60 * time_text.getMinutes() + time_text.getSeconds()) / 86400;\n};\n\nexports.TODAY = function() {\n return new Date();\n};\n\nexports.WEEKDAY = function(serial_number, return_type) {\n serial_number = utils.parseDate(serial_number);\n if (serial_number instanceof Error) {\n return serial_number;\n }\n if (return_type === undefined) {\n return_type = 1;\n }\n var day = serial_number.getDay();\n\n return WEEK_TYPES[return_type][day];\n};\n\nexports.WEEKNUM = function(serial_number, return_type) {\n serial_number = utils.parseDate(serial_number);\n if (serial_number instanceof Error) {\n return serial_number;\n }\n if (return_type === undefined) {\n return_type = 1;\n }\n if (return_type === 21) {\n return this.ISOWEEKNUM(serial_number);\n }\n var week_start = WEEK_STARTS[return_type];\n var jan = new Date(serial_number.getFullYear(), 0, 1);\n var inc = jan.getDay() < week_start ? 1 : 0;\n jan -= Math.abs(jan.getDay() - week_start) * 24 * 60 * 60 * 1000;\n\n return Math.floor(((serial_number - jan) / (1000 * 60 * 60 * 24)) / 7 + 1) + inc;\n};\n\nexports.WORKDAY = function(start_date, days, holidays) {\n return this.WORKDAY.INTL(start_date, days, 1, holidays);\n};\n\nexports.WORKDAY.INTL = function(start_date, days, weekend, holidays) {\n start_date = utils.parseDate(start_date);\n if (start_date instanceof Error) {\n return start_date;\n }\n days = utils.parseNumber(days);\n if (days instanceof Error) {\n return days;\n }\n if (days < 0) {\n return error.num;\n }\n if (weekend === undefined) {\n weekend = WEEKEND_TYPES[1];\n } else {\n weekend = WEEKEND_TYPES[weekend];\n }\n if (!(weekend instanceof Array)) {\n return error.value;\n }\n if (holidays === undefined) {\n holidays = [];\n } else if (!(holidays instanceof Array)) {\n holidays = [holidays];\n }\n for (var i = 0; i < holidays.length; i++) {\n var h = utils.parseDate(holidays[i]);\n if (h instanceof Error) {\n return h;\n }\n holidays[i] = h;\n }\n var d = 0;\n while (d < days) {\n start_date.setDate(start_date.getDate() + 1);\n var day = start_date.getDay();\n if (day === weekend[0] || day === weekend[1]) {\n continue;\n }\n for (var j = 0; j < holidays.length; j++) {\n var holiday = holidays[j];\n if (holiday.getDate() === start_date.getDate() &&\n holiday.getMonth() === start_date.getMonth() &&\n holiday.getFullYear() === start_date.getFullYear()) {\n d--;\n break;\n }\n }\n d++;\n }\n\n return start_date;\n};\n\nexports.YEAR = function(serial_number) {\n serial_number = utils.parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number;\n }\n\n return serial_number.getFullYear();\n};\n\nfunction isLeapYear(year) {\n return new Date(year, 1, 29).getMonth() === 1;\n}\n\n// TODO : Use DAYS ?\nfunction daysBetween(start_date, end_date) {\n return Math.ceil((end_date - start_date) / 1000 / 60 / 60 / 24);\n}\n\nexports.YEARFRAC = function(start_date, end_date, basis) {\n start_date = utils.parseDate(start_date);\n if (start_date instanceof Error) {\n return start_date;\n }\n end_date = utils.parseDate(end_date);\n if (end_date instanceof Error) {\n return end_date;\n }\n\n basis = basis || 0;\n var sd = start_date.getDate();\n var sm = start_date.getMonth() + 1;\n var sy = start_date.getFullYear();\n var ed = end_date.getDate();\n var em = end_date.getMonth() + 1;\n var ey = end_date.getFullYear();\n\n switch (basis) {\n case 0:\n // US (NASD) 30/360\n if (sd === 31 && ed === 31) {\n sd = 30;\n ed = 30;\n } else if (sd === 31) {\n sd = 30;\n } else if (sd === 30 && ed === 31) {\n ed = 30;\n }\n return ((ed + em * 30 + ey * 360) - (sd + sm * 30 + sy * 360)) / 360;\n case 1:\n // Actual/actual\n var feb29Between = function(date1, date2) {\n var year1 = date1.getFullYear();\n var mar1year1 = new Date(year1, 2, 1);\n if (isLeapYear(year1) && date1 < mar1year1 && date2 >= mar1year1) {\n return true;\n }\n var year2 = date2.getFullYear();\n var mar1year2 = new Date(year2, 2, 1);\n return (isLeapYear(year2) && date2 >= mar1year2 && date1 < mar1year2);\n };\n var ylength = 365;\n if (sy === ey || ((sy + 1) === ey) && ((sm > em) || ((sm === em) && (sd >= ed)))) {\n if ((sy === ey && isLeapYear(sy)) ||\n feb29Between(start_date, end_date) ||\n (em === 1 && ed === 29)) {\n ylength = 366;\n }\n return daysBetween(start_date, end_date) / ylength;\n }\n var years = (ey - sy) + 1;\n var days = (new Date(ey + 1, 0, 1) - new Date(sy, 0, 1)) / 1000 / 60 / 60 / 24;\n var average = days / years;\n return daysBetween(start_date, end_date) / average;\n case 2:\n // Actual/360\n return daysBetween(start_date, end_date) / 360;\n case 3:\n // Actual/365\n return daysBetween(start_date, end_date) / 365;\n case 4:\n // European 30/360\n return ((ed + em * 30 + ey * 360) - (sd + sm * 30 + sy * 360)) / 360;\n }\n};\n\nfunction serial(date) {\n var addOn = (date > -2203891200000) ? 2 : 1;\n\n return (date - d1900) / 86400000 + addOn;\n}\n\n\n//# sourceURL=webpack://fxParser/./node_modules/@cohacks/fxjs/lib/date-time.js?")},"./node_modules/@cohacks/fxjs/lib/engineering.js":
/*!*******************************************************!*\
!*** ./node_modules/@cohacks/fxjs/lib/engineering.js ***!
\*******************************************************/
/*! no static exports found */function(module,exports,__webpack_require__){eval('var error = __webpack_require__(/*! ./error */ "./node_modules/@cohacks/fxjs/lib/error.js");\nvar jStat = __webpack_require__(/*! jStat */ "./node_modules/jStat/dist/jstat.js").jStat;\nvar text = __webpack_require__(/*! ./text */ "./node_modules/@cohacks/fxjs/lib/text.js");\nvar utils = __webpack_require__(/*! ./utils */ "./node_modules/@cohacks/fxjs/lib/utils.js");\nvar bessel = __webpack_require__(/*! bessel */ "./node_modules/bessel/bessel.js");\n\nfunction isValidBinaryNumber(number) {\n return (/^[01]{1,10}$/).test(number);\n}\n\nexports.BESSELI = function(x, n) {\n x = utils.parseNumber(x);\n n = utils.parseNumber(n);\n if (utils.anyIsError(x, n)) {\n return error.value;\n }\n\n return bessel.besseli(x, n);\n};\n\nexports.BESSELJ = function(x, n) {\n x = utils.parseNumber(x);\n n = utils.parseNumber(n);\n if (utils.anyIsError(x, n)) {\n return error.value;\n }\n\n return bessel.besselj(x, n);\n};\n\nexports.BESSELK = function(x, n) {\n x = utils.parseNumber(x);\n n = utils.parseNumber(n);\n if (utils.anyIsError(x, n)) {\n return error.value;\n }\n\n return bessel.besselk(x, n);\n};\n\nexports.BESSELY = function(x, n) {\n x = utils.parseNumber(x);\n n = utils.parseNumber(n);\n if (utils.anyIsError(x, n)) {\n return error.value;\n }\n\n return bessel.bessely(x, n);\n};\n\nexports.BIN2DEC = function(number) {\n // Return error if number is not binary or contains more than 10 characters (10 digits)\n if (!isValidBinaryNumber(number)) {\n return error.num;\n }\n\n // Convert binary number to decimal\n var result = parseInt(number, 2);\n\n // Handle negative numbers\n var stringified = number.toString();\n if (stringified.length === 10 && stringified.substring(0, 1) === \'1\') {\n return parseInt(stringified.substring(1), 2) - 512;\n } else {\n return result;\n }\n};\n\n\nexports.BIN2HEX = function(number, places) {\n // Return error if number is not binary or contains more than 10 characters (10 digits)\n if (!isValidBinaryNumber(number)) {\n return error.num;\n }\n\n // Ignore places and return a 10-character hexadecimal number if number is negative\n var stringified = number.toString();\n if (stringified.length === 10 && stringified.substring(0, 1) === \'1\') {\n return (1099511627264 + parseInt(stringified.substring(1), 2)).toString(16);\n }\n\n // Convert binary number to hexadecimal\n var result = parseInt(number, 2).toString(16);\n\n // Return hexadecimal number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT(\'0\', places - result.length) + result : error.num;\n }\n};\n\nexports.BIN2OCT = function(number, places) {\n // Return error if number is not binary or contains more than 10 characters (10 digits)\n if (!isValidBinaryNumber(number)) {\n return error.num;\n }\n\n // Ignore places and return a 10-character octal number if number is negative\n var stringified = number.toString();\n if (stringified.length === 10 && stringified.substring(0, 1) === \'1\') {\n return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8);\n }\n\n // Convert binary number to octal\n var result = parseInt(number, 2).toString(8);\n\n // Return octal number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT(\'0\', places - result.length) + result : error.num;\n }\n};\n\nexports.BITAND = function(number1, number2) {\n // Return error if either number is a non-numeric value\n number1 = utils.parseNumber(number1);\n number2 = utils.parseNumber(number2);\n if (utils.anyIsError(number1, number2)) {\n return error.value;\n }\n\n // Return error if either number is less than 0\n if (number1 < 0 || number2 < 0) {\n return error.num;\n }\n\n // Return error if either number is a non-integer\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n return error.num;\n }\n\n // Return error if either number is greater than (2^48)-1\n if (number1 > 281474976710655 || number2 > 281474976710655) {\n return error.num;\n }\n\n // Return bitwise AND of two numbers\n return number1 & number2;\n};\n\nexports.BITLSHIFT = function(number, shift) {\n number = utils.parseNumber(number);\n shift = utils.parseNumber(shift);\n if (utils.anyIsError(number, shift)) {\n return error.value;\n }\n\n // Return error if number is less than 0\n if (number < 0) {\n return error.num;\n }\n\n // Return error if number is a non-integer\n if (Math.floor(number) !== number) {\n return error.num;\n }\n\n // Return error if number is greater than (2^48)-1\n if (number > 281474976710655) {\n return error.num;\n }\n\n // Return error if the absolute value of shift is greater than 53\n if (Math.abs(shift) > 53) {\n return error.num;\n }\n\n // Return number shifted by shift bits to the left or to the right if shift is negative\n return (shift >= 0) ? number << shift : number >> -shift;\n};\n\nexports.BITOR = function(number1, number2) {\n number1 = utils.parseNumber(number1);\n number2 = utils.parseNumber(number2);\n if (utils.anyIsError(number1, number2)) {\n return error.value;\n }\n\n // Return error if either number is less than 0\n if (number1 < 0 || number2 < 0) {\n return error.num;\n }\n\n // Return error if either number is a non-integer\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n return error.num;\n }\n\n // Return error if either number is greater than (2^48)-1\n if (number1 > 281474976710655 || number2 > 281474976710655) {\n return error.num;\n }\n\n // Return bitwise OR of two numbers\n return number1 | number2;\n};\n\nexports.BITRSHIFT = function(number, shift) {\n number = utils.parseNumber(number);\n shift = utils.parseNumber(shift);\n if (utils.anyIsError(number, shift)) {\n return error.value;\n }\n\n // Return error if number is less than 0\n if (number < 0) {\n return error.num;\n }\n\n // Return error if number is a non-integer\n if (Math.floor(number) !== number) {\n return error.num;\n }\n\n // Return error if number is greater than (2^48)-1\n if (number > 281474976710655) {\n return error.num;\n }\n\n // Return error if the absolute value of shift is greater than 53\n if (Math.abs(shift) > 53) {\n return error.num;\n }\n\n // Return number shifted by shift bits to the right or to the left if shift is negative\n return (shift >= 0) ? number >> shift : number << -shift;\n};\n\nexports.BITXOR = function(number1, number2) {\n number1 = utils.parseNumber(number1);\n number2 = utils.parseNumber(number2);\n if (utils.anyIsError(number1, number2)) {\n return error.value;\n }\n\n // Return error if either number is less than 0\n if (number1 < 0 || number2 < 0) {\n return error.num;\n }\n\n // Return error if either number is a non-integer\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n return error.num;\n }\n\n // Return error if either number is greater than (2^48)-1\n if (number1 > 281474976710655 || number2 > 281474976710655) {\n return error.num;\n }\n\n // Return bitwise XOR of two numbers\n return number1 ^ number2;\n};\n\nexports.COMPLEX = function(real, imaginary, suffix) {\n real = utils.parseNumber(real);\n imaginary = utils.parseNumber(imaginary);\n if (utils.anyIsError(real, imaginary)) {\n return real;\n }\n\n // Set suffix\n suffix = (suffix === undefined) ? \'i\' : suffix;\n\n // Return error if suffix is neither "i" nor "j"\n if (suffix !== \'i\' && suffix !== \'j\') {\n return error.value;\n }\n\n // Return complex number\n if (real === 0 && imaginary === 0) {\n return 0;\n } else if (real === 0) {\n return (imaginary === 1) ? suffix : imaginary.toString() + suffix;\n } else if (imaginary === 0) {\n return real.toString();\n } else {\n var sign = (imaginary > 0) ? \'+\' : \'\';\n return real.toString() + sign + ((imaginary === 1) ? suffix : imaginary.toString() + suffix);\n }\n};\n\nexports.CONVERT = function(number, from_unit, to_unit) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n\n // List of units supported by CONVERT and units defined by the International System of Units\n // [Name, Symbol, Alternate symbols, Quantity, ISU, CONVERT, Conversion ratio]\n var units = [\n ["a.u. of action", "?", null, "action", false, false, 1.05457168181818e-34],\n ["a.u. of charge", "e", null, "electric_charge", false, false, 1.60217653141414e-19],\n ["a.u. of energy", "Eh", null, "energy", false, false, 4.35974417757576e-18],\n ["a.u. of length", "a?", null, "length", false, false, 5.29177210818182e-11],\n ["a.u. of mass", "m?", null, "mass", false, false, 9.10938261616162e-31],\n ["a.u. of time", "?/Eh", null, "time", false, false, 2.41888432650516e-17],\n ["admiralty knot", "admkn", null, "speed", false, true, 0.514773333],\n ["ampere", "A", null, "electric_current", true, false, 1],\n ["ampere per meter", "A/m", null, "magnetic_field_intensity", true, false, 1],\n ["ångström", "Å", ["ang"], "length", false, true, 1e-10],\n ["are", "ar", null, "area", false, true, 100],\n ["astronomical unit", "ua", null, "length", false, false, 1.49597870691667e-11],\n ["bar", "bar", null, "pressure", false, false, 100000],\n ["barn", "b", null, "area", false, false, 1e-28],\n ["becquerel", "Bq", null, "radioactivity", true, false, 1],\n ["bit", "bit", ["b"], "information", false, true, 1],\n ["btu", "BTU", ["btu"], "energy", false, true, 1055.05585262],\n ["byte", "byte", null, "information", false, true, 8],\n ["candela", "cd", null, "luminous_intensity", true, false, 1],\n ["candela per square metre", "cd/m?", null, "luminance", true, false, 1],\n ["coulomb", "C", null, "electric_charge", true, false, 1],\n ["cubic ångström", "ang3", ["ang^3"], "volume", false, true, 1e-30],\n ["cubic foot", "ft3", ["ft^3"], "volume", false, true, 0.028316846592],\n ["cubic inch", "in3", ["in^3"], "volume", false, true, 0.000016387064],\n ["cubic light-year", "ly3", ["ly^3"], "volume", false, true, 8.46786664623715e-47],\n ["cubic metre", "m?", null, "volume", true, true, 1],\n ["cubic mile", "mi3", ["mi^3"], "volume", false, true, 4168181825.44058],\n ["cubic nautical mile", "Nmi3", ["Nmi^3"], "volume", false, true, 6352182208],\n ["cubic Pica", "Pica3", ["Picapt3", "Pica^3", "Picapt^3"], "volume", false, true, 7.58660370370369e-8],\n ["cubic yard", "yd3", ["yd^3"], "volume", false, true, 0.764554857984],\n ["cup", "cup", null, "volume", false, true, 0.0002365882365],\n ["dalton", "Da", ["u"], "mass", false, false, 1.66053886282828e-27],\n ["day", "d", ["day"], "time", false, true, 86400],\n ["degree", "°", null, "angle", false, false, 0.0174532925199433],\n ["degrees Rankine", "Rank", null, "temperature", false, true, 0.555555555555556],\n ["dyne", "dyn", ["dy"], "force", false, true, 0.00001],\n ["electronvolt", "eV", ["ev"], "energy", false, true, 1.60217656514141],\n ["ell", "ell", null, "length", false, true, 1.143],\n ["erg", "erg", ["e"], "energy", false, true, 1e-7],\n ["farad", "F", null, "electric_capacitance", true, false, 1],\n ["fluid ounce", "oz", null, "volume", false, true, 0.0000295735295625],\n ["foot", "ft", null, "length", false, true, 0.3048],\n ["foot-pound", "flb", null, "energy", false, true, 1.3558179483314],\n ["gal", "Gal", null, "acceleration", false, false, 0.01],\n ["gallon", "gal", null, "volume", false, true, 0.003785411784],\n ["gauss", "G", ["ga"], "magnetic_flux_density", false, true, 1],\n ["grain", "grain", null, "mass", false, true, 0.0000647989],\n ["gram", "g", null, "mass", false, true, 0.001],\n ["gray", "Gy", null, "absorbed_dose", true, false, 1],\n ["gross registered ton", "GRT", ["regton"], "volume", false, true, 2.8316846592],\n ["hectare", "ha", null, "area", false, true, 10000],\n ["henry", "H", null, "inductance", true, false, 1],\n ["hertz", "Hz", null, "frequency", true, false, 1],\n ["horsepower", "HP", ["h"], "power", false, true, 745.69987158227],\n ["horsepower-hour", "HPh", ["hh", "hph"], "energy", false, true, 2684519.538],\n ["hour", "h", ["hr"], "time", false, true, 3600],\n ["imperial gallon (U.K.)", "uk_gal", null, "volume", false, true, 0.00454609],\n ["imperial hundredweight", "lcwt", ["uk_cwt", "hweight"], "mass", false, true, 50.802345],\n ["imperial quart (U.K)", "uk_qt", null, "volume", false, true, 0.0011365225],\n ["imperial ton", "brton", ["uk_ton", "LTON"], "mass", false, true, 1016.046909],\n ["inch", "in", null, "length", false, true, 0.0254],\n ["international acre", "uk_acre", null, "area", false, true, 4046.8564224],\n ["IT calorie", "cal", null, "energy", false, true, 4.1868],\n ["joule", "J", null, "energy", true, true, 1],\n ["katal", "kat", null, "catalytic_activity", true, false, 1],\n ["kelvin", "K", ["kel"], "temperature", true, true, 1],\n ["kilogram", "kg", null, "mass", true, true, 1],\n ["knot", "kn", null, "speed", false, true, 0.514444444444444],\n ["light-year", "ly", null, "length", false, true, 9460730472580800],\n ["litre", "L", ["l", "lt"], "volume", false, true, 0.001],\n ["lumen", "lm", null, "luminous_flux", true, false, 1],\n ["lux", "lx", null, "illuminance", true, false, 1],\n ["maxwell", "Mx", null, "magnetic_flux", false, false, 1e-18],\n ["measurement ton", "MTON", null, "volume", false, true, 1.13267386368],\n ["meter per hour", "m/h", ["m/hr"], "speed", false, true, 0.00027777777777778],\n ["meter per second", "m/s", ["m/sec"], "speed", true, true, 1],\n ["meter per second squared", "m?s??", null, "acceleration", true, false, 1],\n ["parsec", "pc", ["parsec"], "length", false, true, 30856775814671900],\n ["meter squared per second", "m?/s", null, "kinematic_viscosity", true, false, 1],\n ["metre", "m", null, "length", true, true, 1],\n ["miles per hour", "mph", null, "speed", false, true, 0.44704],\n ["millimetre of mercury", "mmHg", null, "pressure", false, false, 133.322],\n ["minute", "?", null, "angle", false, false, 0.000290888208665722],\n ["minute", "min", ["mn"], "time", false, true, 60],\n ["modern teaspoon", "tspm", null, "volume", false, true, 0.000005],\n ["mole", "mol", null, "amount_of_substance", true, false, 1],\n ["morgen", "Morgen", null, "area", false, true, 2500],\n ["n.u. of action", "?", null, "action", false, false, 1.05457168181818e-34],\n ["n.u. of mass", "m?", null, "mass", false, false, 9.10938261616162e-31],\n ["n.u. of speed", "c?", null, "speed", false, false, 299792458],\n ["n.u. of time", "?/(me?c??)", null, "time", false, false, 1.28808866778687e-21],\n ["nautical mile", "M", ["Nmi"], "length", false, true, 1852],\n ["newton", "N", null, "force", true, true, 1],\n ["œrsted", "Oe ", null, "magnetic_field_intensity", false, false, 79.5774715459477],\n ["ohm", "Ω", null, "electric_resistance", true, false, 1],\n ["ounce mass", "ozm", null, "mass", false, true, 0.028349523125],\n ["pascal", "Pa", null, "pressure", true, false, 1],\n ["pascal second", "Pa?s", null, "dynamic_viscosity", true, false, 1],\n ["pferdestärke", "PS", null, "power", false, true, 735.49875],\n ["phot", "ph", null, "illuminance", false, false, 0.0001],\n ["pica (1/6 inch)", "pica", null, "length", false, true, 0.00035277777777778],\n ["pica (1/72 inch)", "Pica", ["Picapt"], "length", false, true, 0.00423333333333333],\n ["poise", "P", null, "dynamic_viscosity", false, false, 0.1],\n ["pond", "pond", null, "force", false, true, 0.00980665],\n ["pound force", "lbf", null, "force", false, true, 4.4482216152605],\n ["pound mass", "lbm", null, "mass", false, true, 0.45359237],\n ["quart", "qt", null, "volume", false, true, 0.000946352946],\n ["radian", "rad", null, "angle", true, false, 1],\n ["second", "?", null, "angle", false, false, 0.00000484813681109536],\n ["second", "s", ["sec"], "time", true, true, 1],\n ["short hundredweight", "cwt", ["shweight"], "mass", false, true, 45.359237],\n ["siemens", "S", null, "electrical_conductance", true, false, 1],\n ["sievert", "Sv", null, "equival