@syncfusion/ej2-calculate 35.1.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +263 -0
- package/README.md +132 -0
- package/base.d.ts +4 -0
- package/base.js +4 -0
- package/common.d.ts +4 -0
- package/common.js +4 -0
- package/dist/ej2-calculate.umd.min.js +11 -0
- package/dist/ej2-calculate.umd.min.js.map +1 -0
- package/dist/es6/ej2-calculate.es2015.js +24801 -0
- package/dist/es6/ej2-calculate.es2015.js.map +1 -0
- package/dist/es6/ej2-calculate.es5.js +27229 -0
- package/dist/es6/ej2-calculate.es5.js.map +1 -0
- package/dist/global/ej2-calculate.min.js +11 -0
- package/dist/global/ej2-calculate.min.js.map +1 -0
- package/dist/global/index.d.ts +14 -0
- package/formulas.d.ts +4 -0
- package/formulas.js +4 -0
- package/index.d.ts +4 -0
- package/index.js +4 -0
- package/license +10 -0
- package/package.json +30 -0
- package/src/base/calculate-model.d.ts +4 -0
- package/src/base/calculate-model.js +0 -0
- package/src/base/calculate.d.ts +1105 -0
- package/src/base/calculate.js +4720 -0
- package/src/base/index.d.ts +8 -0
- package/src/base/index.js +7 -0
- package/src/base/parser.d.ts +208 -0
- package/src/base/parser.js +1512 -0
- package/src/common/address.d.ts +59 -0
- package/src/common/address.js +96 -0
- package/src/common/cell-ref.d.ts +32 -0
- package/src/common/cell-ref.js +112 -0
- package/src/common/common.d.ts +44 -0
- package/src/common/common.js +134 -0
- package/src/common/enum.d.ts +94 -0
- package/src/common/enum.js +97 -0
- package/src/common/index.d.ts +9 -0
- package/src/common/index.js +8 -0
- package/src/common/interface.d.ts +122 -0
- package/src/common/interface.js +0 -0
- package/src/common/l10n.d.ts +24 -0
- package/src/common/l10n.js +54 -0
- package/src/common/number-date.d.ts +26 -0
- package/src/common/number-date.js +38 -0
- package/src/common/sheet-info.d.ts +10 -0
- package/src/common/sheet-info.js +17 -0
- package/src/common/sort.d.ts +17 -0
- package/src/common/sort.js +44 -0
- package/src/formulas/array.d.ts +47 -0
- package/src/formulas/array.js +718 -0
- package/src/formulas/basic.d.ts +47 -0
- package/src/formulas/basic.js +181 -0
- package/src/formulas/complex-numbers.d.ts +207 -0
- package/src/formulas/complex-numbers.js +549 -0
- package/src/formulas/database.d.ts +152 -0
- package/src/formulas/database.js +579 -0
- package/src/formulas/date-time-extra.d.ts +97 -0
- package/src/formulas/date-time-extra.js +415 -0
- package/src/formulas/date-time-intl.d.ts +57 -0
- package/src/formulas/date-time-intl.js +309 -0
- package/src/formulas/date-time.d.ts +164 -0
- package/src/formulas/date-time.js +1021 -0
- package/src/formulas/engineering-base.d.ts +150 -0
- package/src/formulas/engineering-base.js +404 -0
- package/src/formulas/engineering-bessel.d.ts +65 -0
- package/src/formulas/engineering-bessel.js +167 -0
- package/src/formulas/engineering-convert.d.ts +35 -0
- package/src/formulas/engineering-convert.js +120 -0
- package/src/formulas/engineering-misc.d.ts +64 -0
- package/src/formulas/engineering-misc.js +168 -0
- package/src/formulas/financial-amortization-ecma.d.ts +87 -0
- package/src/formulas/financial-amortization-ecma.js +288 -0
- package/src/formulas/financial-annuity.d.ts +104 -0
- package/src/formulas/financial-annuity.js +419 -0
- package/src/formulas/financial-bond-helpers.d.ts +106 -0
- package/src/formulas/financial-bond-helpers.js +190 -0
- package/src/formulas/financial-cashflow.d.ts +47 -0
- package/src/formulas/financial-cashflow.js +203 -0
- package/src/formulas/financial-coupons.d.ts +227 -0
- package/src/formulas/financial-coupons.js +810 -0
- package/src/formulas/financial-depreciation.d.ts +64 -0
- package/src/formulas/financial-depreciation.js +247 -0
- package/src/formulas/financial-rates.d.ts +54 -0
- package/src/formulas/financial-rates.js +140 -0
- package/src/formulas/financial-securities.d.ts +126 -0
- package/src/formulas/financial-securities.js +488 -0
- package/src/formulas/formula-math-helpers.d.ts +212 -0
- package/src/formulas/formula-math-helpers.js +599 -0
- package/src/formulas/formula-module-base.d.ts +54 -0
- package/src/formulas/formula-module-base.js +125 -0
- package/src/formulas/formula-owner.d.ts +17 -0
- package/src/formulas/formula-owner.js +0 -0
- package/src/formulas/index.d.ts +68 -0
- package/src/formulas/index.js +67 -0
- package/src/formulas/information-advanced.d.ts +44 -0
- package/src/formulas/information-advanced.js +157 -0
- package/src/formulas/information-ecma.d.ts +33 -0
- package/src/formulas/information-ecma.js +88 -0
- package/src/formulas/information-extra.d.ts +146 -0
- package/src/formulas/information-extra.js +351 -0
- package/src/formulas/information.d.ts +34 -0
- package/src/formulas/information.js +78 -0
- package/src/formulas/logical-extra.d.ts +75 -0
- package/src/formulas/logical-extra.js +217 -0
- package/src/formulas/logical.d.ts +83 -0
- package/src/formulas/logical.js +296 -0
- package/src/formulas/lookup-array.d.ts +98 -0
- package/src/formulas/lookup-array.js +364 -0
- package/src/formulas/lookup-ref-extra.d.ts +64 -0
- package/src/formulas/lookup-ref-extra.js +180 -0
- package/src/formulas/lookup-ref.d.ts +84 -0
- package/src/formulas/lookup-ref.js +263 -0
- package/src/formulas/lookup.d.ts +114 -0
- package/src/formulas/lookup.js +881 -0
- package/src/formulas/math-aggregate.d.ts +74 -0
- package/src/formulas/math-aggregate.js +376 -0
- package/src/formulas/math-ceiling-ecma.d.ts +42 -0
- package/src/formulas/math-ceiling-ecma.js +123 -0
- package/src/formulas/math-combinatorics.d.ts +75 -0
- package/src/formulas/math-combinatorics.js +290 -0
- package/src/formulas/math-misc.d.ts +164 -0
- package/src/formulas/math-misc.js +889 -0
- package/src/formulas/math-number.d.ts +76 -0
- package/src/formulas/math-number.js +261 -0
- package/src/formulas/math-rounding.d.ts +115 -0
- package/src/formulas/math-rounding.js +728 -0
- package/src/formulas/math-trig-hyperbolic.d.ts +55 -0
- package/src/formulas/math-trig-hyperbolic.js +113 -0
- package/src/formulas/math-trig.d.ts +165 -0
- package/src/formulas/math-trig.js +334 -0
- package/src/formulas/matrix-base.d.ts +13 -0
- package/src/formulas/matrix-base.js +169 -0
- package/src/formulas/matrix.d.ts +64 -0
- package/src/formulas/matrix.js +161 -0
- package/src/formulas/regression-ecma.d.ts +66 -0
- package/src/formulas/regression-ecma.js +234 -0
- package/src/formulas/statistical-advanced.d.ts +125 -0
- package/src/formulas/statistical-advanced.js +756 -0
- package/src/formulas/statistical-correlation.d.ts +75 -0
- package/src/formulas/statistical-correlation.js +198 -0
- package/src/formulas/statistical-dispersion.d.ts +108 -0
- package/src/formulas/statistical-dispersion.js +337 -0
- package/src/formulas/statistical-distribution-extended.d.ts +176 -0
- package/src/formulas/statistical-distribution-extended.js +668 -0
- package/src/formulas/statistical-distribution.d.ts +104 -0
- package/src/formulas/statistical-distribution.js +368 -0
- package/src/formulas/statistical-ecma.d.ts +95 -0
- package/src/formulas/statistical-ecma.js +392 -0
- package/src/formulas/statistical-extended.d.ts +136 -0
- package/src/formulas/statistical-extended.js +340 -0
- package/src/formulas/statistical-ifs.d.ts +46 -0
- package/src/formulas/statistical-ifs.js +180 -0
- package/src/formulas/statistical-moments.d.ts +84 -0
- package/src/formulas/statistical-moments.js +269 -0
- package/src/formulas/statistical-percentile.d.ts +56 -0
- package/src/formulas/statistical-percentile.js +195 -0
- package/src/formulas/statistical-sample-base.d.ts +14 -0
- package/src/formulas/statistical-sample-base.js +124 -0
- package/src/formulas/statistical.d.ts +135 -0
- package/src/formulas/statistical.js +542 -0
- package/src/formulas/text-advanced.d.ts +64 -0
- package/src/formulas/text-advanced.js +222 -0
- package/src/formulas/text-ecma.d.ts +54 -0
- package/src/formulas/text-ecma.js +106 -0
- package/src/formulas/text-extra.d.ts +216 -0
- package/src/formulas/text-extra.js +657 -0
- package/src/formulas/text.d.ts +125 -0
- package/src/formulas/text.js +628 -0
- package/src/global.js +1 -0
- package/src/index.d.ts +14 -0
- package/src/index.js +14 -0
- package/tslint.json +111 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ej2-calculate.umd.min.js","sources":["../src/common/enum.js","../src/common/common.js","../src/common/l10n.js","../src/common/number-date.js","../src/formulas/formula-module-base.js","../src/formulas/math-aggregate.js","../src/common/cell-ref.js","../src/formulas/math-rounding.js","../src/formulas/math-misc.js","../src/formulas/math-trig.js","../src/formulas/math-trig-hyperbolic.js","../src/formulas/formula-math-helpers.js","../src/formulas/math-combinatorics.js","../src/formulas/math-number.js","../src/common/address.js","../src/formulas/matrix-base.js","../src/formulas/matrix.js","../src/formulas/engineering-base.js","../src/formulas/engineering-misc.js","../src/formulas/engineering-convert.js","../src/formulas/engineering-bessel.js","../src/formulas/financial-annuity.js","../src/formulas/financial-depreciation.js","../src/formulas/financial-rates.js","../src/formulas/financial-cashflow.js","../src/formulas/financial-securities.js","../src/formulas/statistical.js","../src/formulas/statistical-advanced.js","../src/formulas/statistical-dispersion.js","../src/formulas/statistical-sample-base.js","../src/formulas/statistical-moments.js","../src/formulas/statistical-correlation.js","../src/formulas/statistical-percentile.js","../src/formulas/statistical-distribution.js","../src/formulas/statistical-ifs.js","../src/formulas/statistical-extended.js","../src/formulas/statistical-distribution-extended.js","../src/formulas/complex-numbers.js","../src/formulas/date-time.js","../src/formulas/date-time-extra.js","../src/formulas/logical.js","../src/formulas/logical-extra.js","../src/formulas/lookup.js","../src/formulas/lookup-ref.js","../src/formulas/lookup-ref-extra.js","../src/formulas/lookup-array.js","../src/common/sort.js","../src/formulas/array.js","../src/formulas/text.js","../src/formulas/text-extra.js","../src/formulas/text-advanced.js","../src/formulas/information.js","../src/formulas/information-extra.js","../src/formulas/information-advanced.js","../src/formulas/date-time-intl.js","../src/formulas/math-ceiling-ecma.js","../src/formulas/information-ecma.js","../src/formulas/text-ecma.js","../src/formulas/financial-bond-helpers.js","../src/formulas/financial-coupons.js","../src/formulas/financial-amortization-ecma.js","../src/formulas/statistical-ecma.js","../src/formulas/database.js","../src/formulas/regression-ecma.js","../src/formulas/basic.js","../src/common/sheet-info.js","../src/base/parser.js","../src/base/calculate.js"],"sourcesContent":["/**\n * Indexes into {@link Calculate.getErrorStrings} for Excel-compatible error tokens.\n *\n * @hidden\n *\n * @example\n * ```ts\n * const na = engine.getErrorStrings()[CommonErrors.NA]; // '#N/A'\n * ```\n */\nexport var CommonErrors;\n(function (CommonErrors) {\n /** `#N/A` */\n CommonErrors[CommonErrors[\"NA\"] = 0] = \"NA\";\n /** `#VALUE!` */\n CommonErrors[CommonErrors[\"Value\"] = 1] = \"Value\";\n /** `#REF!` */\n CommonErrors[CommonErrors[\"Ref\"] = 2] = \"Ref\";\n /** `#DIV/0!` */\n CommonErrors[CommonErrors[\"DivZero\"] = 3] = \"DivZero\";\n /** `#NUM!` */\n CommonErrors[CommonErrors[\"Num\"] = 4] = \"Num\";\n /** `#NAME?` */\n CommonErrors[CommonErrors[\"Name\"] = 5] = \"Name\";\n /** `#NULL!` */\n CommonErrors[CommonErrors[\"Null\"] = 6] = \"Null\";\n /** `#CALC!` */\n CommonErrors[CommonErrors[\"Calc\"] = 7] = \"Calc\";\n})(CommonErrors || (CommonErrors = {}));\n/**\n * Indexes into {@link Calculate.formulaErrorStrings} for parser/engine failure messages.\n *\n * @hidden\n */\nexport var FormulasErrorsStrings;\n(function (FormulasErrorsStrings) {\n FormulasErrorsStrings[FormulasErrorsStrings[\"OperatorsCannotStartWithExpression\"] = 0] = \"OperatorsCannotStartWithExpression\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"ReservedWordAND\"] = 1] = \"ReservedWordAND\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"ReservedWordXOR\"] = 2] = \"ReservedWordXOR\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"ReservedWordIf\"] = 3] = \"ReservedWordIf\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"NumberContains2DecimalPoints\"] = 4] = \"NumberContains2DecimalPoints\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"ReservedWordElse\"] = 5] = \"ReservedWordElse\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"ReservedWordNOT\"] = 6] = \"ReservedWordNOT\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"InvalidCharInNumber\"] = 7] = \"InvalidCharInNumber\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"InvalidCharactersFollowingWithOperator\"] = 6] = \"InvalidCharactersFollowingWithOperator\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"MismatchedParentheses\"] = 8] = \"MismatchedParentheses\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"UnknownFormulaName\"] = 9] = \"UnknownFormulaName\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"RequiresASingleArgument\"] = 10] = \"RequiresASingleArgument\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"Requires3Args\"] = 11] = \"Requires3Args\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"InvalidMathArgument\"] = 12] = \"InvalidMathArgument\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"Requires2Args\"] = 13] = \"Requires2Args\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"BadIndex\"] = 14] = \"BadIndex\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"TooComplex\"] = 15] = \"TooComplex\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"CircularReference\"] = 16] = \"CircularReference\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"MissingFormula\"] = 17] = \"MissingFormula\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"ImproperFormula\"] = 18] = \"ImproperFormula\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"InvalidExpression\"] = 19] = \"InvalidExpression\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"CellEmpty\"] = 20] = \"CellEmpty\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"BadFormula\"] = 21] = \"BadFormula\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"EmptyExpression\"] = 22] = \"EmptyExpression\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"VirtualModeRequired\"] = 23] = \"VirtualModeRequired\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"MismatchedTics\"] = 24] = \"MismatchedTics\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"WrongNumberArguments\"] = 25] = \"WrongNumberArguments\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"InvalidArguments\"] = 26] = \"InvalidArguments\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"IterationsDoNotConverge\"] = 27] = \"IterationsDoNotConverge\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"CalculationOverflow\"] = 29] = \"CalculationOverflow\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"AlreadyRegistered\"] = 28] = \"AlreadyRegistered\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"MissingSheet\"] = 30] = \"MissingSheet\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"CannotParse\"] = 31] = \"CannotParse\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"ExpressionCannotEndWithAnOperator\"] = 32] = \"ExpressionCannotEndWithAnOperator\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"Spill\"] = 33] = \"Spill\";\n FormulasErrorsStrings[FormulasErrorsStrings[\"Div\"] = 34] = \"Div\";\n})(FormulasErrorsStrings || (FormulasErrorsStrings = {}));\n/**\n * Excel file format extensions recognized by Calculate helpers.\n *\n * @hidden\n */\nexport var ExcelFileFormats;\n(function (ExcelFileFormats) {\n ExcelFileFormats[\"xlsx\"] = \"xlsx\";\n ExcelFileFormats[\"xlsm\"] = \"xlsm\";\n ExcelFileFormats[\"xlsb\"] = \"xlsb\";\n ExcelFileFormats[\"xltx\"] = \"xltx\";\n ExcelFileFormats[\"xltm\"] = \"xltm\";\n ExcelFileFormats[\"xls\"] = \"xls\";\n ExcelFileFormats[\"xml\"] = \"xml\";\n ExcelFileFormats[\"xlam\"] = \"xlam\";\n ExcelFileFormats[\"xla\"] = \"xla\";\n ExcelFileFormats[\"xlw\"] = \"xlw\";\n ExcelFileFormats[\"xlr\"] = \"xlr\";\n ExcelFileFormats[\"prn\"] = \"prn\";\n ExcelFileFormats[\"txt\"] = \"txt\";\n ExcelFileFormats[\"csv\"] = \"csv\";\n ExcelFileFormats[\"dif\"] = \"dif\";\n ExcelFileFormats[\"slk\"] = \"slk\";\n})(ExcelFileFormats || (ExcelFileFormats = {}));\n","import { ExcelFileFormats } from './enum';\n/**\n * Shared Calculate helper module used by spreadsheet integrations.\n *\n * @hidden\n */\nvar CalculateCommon = /** @class */ (function () {\n /**\n * @param {Object} parent - Owning Calculate engine.\n */\n function CalculateCommon(parent) {\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Get the module name.\n */\n CalculateCommon.prototype.getModuleName = function () {\n return 'calc-common';\n };\n return CalculateCommon;\n}());\nexport { CalculateCommon };\n/**\n * To check whether the object is undefined.\n *\n * @hidden\n * @param {Object} value - To check the object is undefined\n * @returns {boolean} - Returns boolean value.\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * @hidden\n * @param {string} value - specify the value\n * @returns {string} - get Skeleton Value.\n */\nexport function getSkeletonVal(value) {\n switch (value) {\n case 'dd-MMM-yyyy':\n case 'dd MMM yyyy':\n value = 'medium';\n break;\n case 'MMM yyyy':\n value = 'yMMM';\n break;\n case 'MM/dd/yyyy':\n case 'dd/MM/yyyy':\n case 'dd/MM/yy':\n value = 'short';\n break;\n case 'dddd MMMM dd yyyy': //long\n case 'dd MMMM yyyy':\n value = 'long';\n break;\n case 'd MMMM yyyy':\n value = 'yMMMd';\n break;\n case 'yyyy':\n value = 'y';\n break;\n case 'h:mm':\n value = 'Hm';\n break;\n case 'h:mm tt':\n value = 'hm';\n break;\n case 'h':\n value = 'H';\n break;\n case 'h tt':\n value = 'h';\n break;\n case 'h:mm:ss tt':\n value = 'hms';\n break;\n case 'h:mm:ss':\n value = 'Hms';\n break;\n case 'd':\n value = 'd';\n break;\n case 'd dddd':\n value = 'Ed';\n break;\n case 'M':\n value = 'M';\n break;\n case 'Md':\n value = 'Md';\n break;\n case 'MMM':\n value = 'MMM';\n break;\n case 'ddd MMM d':\n value = 'MMMEd';\n break;\n case 'MMM d':\n value = 'MMMd';\n break;\n case 'M/yyyy':\n value = 'yM';\n break;\n case 'ddd':\n value = 'E';\n break;\n default:\n value = '';\n break;\n }\n return value;\n}\n/**\n * To check whether the formula contains external file link.\n *\n * @hidden\n * @param {string} formula - To check the string contains external file link.\n * @returns {boolean} - Returns boolean value.\n * @private\n */\nexport function isExternalFileLink(formula) {\n var isExternalFile = false;\n for (var format in ExcelFileFormats) {\n if (formula.indexOf('.' + format + ']') > -1) {\n isExternalFile = true;\n break;\n }\n }\n return isExternalFile;\n}\n","/**\n * Localization defaults for `@syncfusion/ej2-calculate`.\n *\n * ## What is localized\n * Human-readable parser / engine failure prose (wrong argument counts, mismatched\n * parentheses, and similar messages shown via {@link FailureEventArgs} or returned\n * from evaluation).\n *\n * ## What is intentionally NOT localized\n * Excel-compatible literals required for formula language and file interchange:\n * - Error tokens: `#N/A`, `#VALUE!`, `#REF!`, `#DIV/0!`, `#NUM!`, `#NAME?`, `#NULL!`,\n * `#CALC!`, `#SPILL!`, `#CIRCULARREF!`\n * - Logical literals: `TRUE` / `FALSE`\n * - English function names (`SUM`, `IF`, …)\n *\n * Culture-sensitive **separators** (argument, decimal, date) are configured via\n * {@link Calculate} getters/setters and host `locale`, not via these string keys.\n *\n * Load overrides with Syncfusion `L10n.load({ 'fr-FR': { calculate: { ... } } })`.\n */\n/** Default English locale bag for control name `calculate`. */\nexport var calculateDefaultLocale = {\n OperatorsCannotStartWithExpression: 'binary operators cannot start an expression',\n CannotParse: 'cannot parse',\n BadLibrary: 'bad library',\n InvalidCharInFrontOf: 'invalid char in front of',\n NumberContains2DecimalPoints: 'number contains 2 decimal points',\n ExpressionCannotEndWithAnOperator: 'expression cannot end with an operator',\n InvalidCharactersFollowingWithOperator: 'invalid characters following an operator',\n InvalidCharInNumber: 'invalid character in number',\n MismatchedParentheses: 'mismatched parentheses',\n UnknownFormulaName: 'unknown formula name',\n RequiresASingleArgument: 'requires a single argument',\n Requires3Args: 'requires 3 arguments',\n InvalidMathArgument: 'invalid Math argument',\n Requires2Args: 'requires 2 arguments',\n TooComplex: 'too complex',\n MissingFormula: 'missing formula',\n ImproperFormula: 'improper formula',\n InvalidExpression: 'invalid expression',\n CellEmpty: 'cell empty',\n BadFormula: 'bad formula',\n EmptyExpression: 'empty expression',\n MismatchedTics: 'mismatched string quotes',\n WrongNumberArguments: 'wrong number of arguments',\n InvalidArguments: 'invalid arguments',\n IterationsDoNotConverge: 'iterations do not converge',\n AlreadyRegistered: 'Control is already registered',\n CalculationOverflow: 'Calculation overflow',\n MissingSheet: 'Missing sheet',\n CannotParseUnderscore: 'cannot_parse',\n ExpressionCannotEndWithAnOperatorUnderscore: 'expression_cannot_end_with_an_operator',\n CategoryAll: 'All'\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Returns whether `date` is a valid JavaScript `Date` instance.\n *\n * @hidden\n * @param {number | string} date - Value to test.\n * @returns {Date | Object} - `true` when `date` is a valid `Date`.\n */\nexport function isDateTime(date) {\n return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.valueOf());\n}\n/**\n * Returns whether `val` is numeric (number or numeric string).\n *\n * @hidden\n * @param {string | number} val - Value to test.\n * @returns {number} - `true` when numeric.\n */\nexport function isNumber(val) {\n return val - parseFloat(val) >= 0;\n}\n/**\n * Convert a Date (or date-like value) to an Excel serial number.\n *\n * @hidden\n * @param {any} val - Specifies the value.\n * @param {boolean} isTime - Include time fraction.\n * @param {boolean} isTimeOnly - Value is time without date.\n * @returns {number} - Excel serial number.\n */\nexport function dateToInt(val, isTime, isTimeOnly) {\n var startDate = new Date('01/01/1900');\n var date = isDateTime(val) ? val : new Date(val);\n var startDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), startDate.getHours(), startDate.getMinutes(), startDate.getSeconds(), startDate.getMilliseconds());\n var dateUTC = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n var diffDays = ((dateUTC - startDateUTC) / (1000 * 3600 * 24));\n return (isTime ? diffDays : parseInt(diffDays.toString(), 10)) + (isTimeOnly ? 0 : (diffDays > 60 ? 2 : 1));\n}\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\n/**\n * Base class for formula category modules registered with {@link BasicFormulas}.\n *\n * Provides shared argument parsing helpers used across Compute handlers.\n *\n * @hidden\n */\nvar FormulaModuleBase = /** @class */ (function () {\n /**\n * @param {FormulaOwner} owner - Formula registration owner whose `parent` is the Calculate engine.\n */\n function FormulaModuleBase(owner) {\n this.owner = owner;\n this.parent = owner.parent;\n }\n /**\n * @hidden\n * @param {string} value - specify the value\n * @returns {number} - Returns parse double value.\n */\n FormulaModuleBase.prototype.parseDouble = function (value) {\n var val = this.parent.parseFloat(value.toString());\n return !isNaN(val) ? val : NaN;\n };\n /**\n * @hidden\n * @param {string} range - Cell / range text.\n * @returns {string} - Sheet token prefix when present.\n */\n FormulaModuleBase.prototype.getSheetReference = function (range) {\n return range.indexOf(this.parent.sheetToken) === 0 && range.lastIndexOf(this.parent.sheetToken) > range.indexOf(this.parent.sheetToken) ? range.substring(0, range.lastIndexOf(this.parent.sheetToken) + 1) : '';\n };\n /**\n * @hidden\n * @param {string[]} ranges - IFS ranges / criteria.\n * @param {string} isAvgIfs - AVERAGEIFS marker.\n * @returns {string | number} - Aggregated IFS result.\n */\n FormulaModuleBase.prototype.calculateIFS = function (ranges, isAvgIfs) {\n var _this = this;\n if (isNullOrUndefined(ranges) || ranges[0] === '' || ranges.length < 2 || ranges.length > 127 || ranges.length % 2 === 0) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (ranges.length === 3 && ranges[2] !== '\"\"') { // SUMIFS and AVERAGEIFS OR operation will contains only 3 arguments.\n if (ranges[2].includes(this.parent.tic + this.parent.tic)) {\n var result_1 = '';\n var sumVal_1;\n var separator_1 = this.parent.getParseArgumentSeparator();\n var criterias = ranges[2].split(this.parent.tic + this.parent.tic);\n criterias.forEach(function (criteria) {\n criteria = criteria.trim().split(_this.parent.tic).join('');\n if (criteria) {\n sumVal_1 = _this.parent.computeIfsFormulas([ranges[0], ranges[1], criteria], _this.parent.falseValue, isAvgIfs).toString();\n result_1 += (result_1 ? separator_1 : '') + sumVal_1;\n }\n });\n return result_1;\n }\n }\n return this.parent.computeIfsFormulas(ranges, this.parent.falseValue, isAvgIfs);\n };\n /**\n * Resolve an argument to a display/text value (strips quotes for literals).\n *\n * @hidden\n * @param {string} arg - Formula argument token.\n * @returns {string} - Resolved text (may be an error token).\n */\n FormulaModuleBase.prototype.resolveTextArg = function (arg) {\n if (isNullOrUndefined(arg)) {\n return '';\n }\n var value = this.parent.getValueFromArg(arg);\n var errCollection = this.parent.getErrorStrings();\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (!this.parent.isCellReference(arg)) {\n value = this.parent.removeTics(value);\n }\n return value;\n };\n /**\n * Resolve an argument to a number (booleans → 1/0).\n *\n * @hidden\n * @param {string} arg - Formula argument token.\n * @returns {number | string} - Number or error token.\n */\n FormulaModuleBase.prototype.resolveNumberArg = function (arg) {\n var errCollection = this.parent.getErrorStrings();\n var value = this.parent.getValueFromArg(arg);\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (value === '') {\n return 0;\n }\n var upper = value.toUpperCase();\n if (upper === this.parent.trueValue) {\n return 1;\n }\n if (upper === this.parent.falseValue) {\n return 0;\n }\n if (!this.parent.isCellReference(arg)) {\n value = this.parent.removeTics(value);\n }\n if (value.indexOf('%') > -1) {\n var pct = value.replace('%', '');\n if (this.parent.isNumber(pct)) {\n return this.parent.parseFloat(pct) / 100;\n }\n }\n var num = this.parent.parseFloat(value);\n if (isNaN(num)) {\n return errCollection[CommonErrors.Value];\n }\n return num;\n };\n return FormulaModuleBase;\n}());\nexport { FormulaModuleBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNumber } from '../common/number-date';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Aggregation functions that summarize ranges of numeric values (sums, counts, products, and conditional totals).\n *\n * Registered functions: SUM, SUMIF, SUMIFS, SUMPRODUCT, PRODUCT.\n *\n * @hidden\n */\nvar MathAggregateFormulas = /** @class */ (function (_super) {\n __extends(MathAggregateFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function MathAggregateFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'SUM', category: 'Math & Trig', description: 'Sums individual values, cell references or ranges.' },\n { formulaName: 'SUMIF', category: 'Math & Trig', description: 'It will sum up cells that meet the given criteria.' },\n { formulaName: 'SUMIFS', category: 'Math & Trig', description: 'Sums the cells specified by a given set of conditionsor criteria.' },\n { formulaName: 'SUMPRODUCT', category: 'Math & Trig', description: 'Returns sum of the product of given ranges of arrays.' },\n { formulaName: 'PRODUCT', category: 'Math & Trig', description: 'Multiplies all the numbers given as arguments and returns the product.' }\n ];\n return _this;\n }\n /**\n * Sums individual values, cell references or ranges.\n *\n * Excel: `SUM(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=SUM(A1:A3)');\n * ```\n */\n MathAggregateFormulas.prototype.ComputeSUM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var isSubtotalFormula = false;\n if (args.length) {\n var lastArgument = args[args.length - 1];\n if (lastArgument === 'isSubtotal') {\n isSubtotalFormula = true;\n args.pop();\n }\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var sum = 0;\n var val;\n var orgValue;\n var maxDecimalLength = 0;\n if (!isNullOrUndefined(args)) {\n var argArr = args;\n var setMaxDecimalLength = function (val) {\n if (val.toString().indexOf('.') > -1) {\n maxDecimalLength = Math.max(maxDecimalLength, val.split('.')[1].length);\n }\n };\n for (var i = 0; i < argArr.length; i++) {\n var argValue = argArr[i].toString();\n if (argValue.indexOf(':') > -1 && this.parent.isCellReference(argValue)) {\n var cellCollection = this.parent.getCellCollection(argValue.split(this.parent.tic).join(''));\n for (var j = 0; j < cellCollection.length; j++) {\n val = !isSubtotalFormula ? this.parent.getValueFromArg(cellCollection[j]) :\n this.parent.getValueFromArg(cellCollection[j], null, null, true);\n if (isSubtotalFormula && val.includes('SUBTOTAL(')) {\n continue;\n }\n if (this.parent.getErrorStrings().indexOf(val) > -1) {\n return val;\n }\n if (isNullOrUndefined(val[0]) || isNaN(this.parent.parseFloat(val))) {\n continue;\n }\n setMaxDecimalLength(val);\n sum = sum + this.parent.parseFloat(val);\n }\n }\n else {\n if (argArr[i].indexOf(this.parent.tic) > -1) {\n if (isNaN(this.parent.parseFloat(argArr[i].split(this.parent.tic).join(''))) ||\n argArr[i].split(this.parent.tic).join('').trim() === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n if (argArr[i].split(this.parent.tic).join('') === this.parent.trueValue) {\n argArr[i] = '1';\n }\n if (argArr[i].split(this.parent.tic).join('') === this.parent.falseValue) {\n argArr[i] = '0';\n }\n orgValue = !isSubtotalFormula ? this.parent.getValueFromArg(argArr[i].split(this.parent.tic).join('')) :\n this.parent.getValueFromArg(argArr[i].split(this.parent.tic).join(''), null, null, true);\n if (isSubtotalFormula && orgValue.includes('SUBTOTAL(')) {\n continue;\n }\n if (this.parent.getErrorStrings().indexOf(orgValue) > -1) {\n return orgValue;\n }\n if (isNullOrUndefined(orgValue) || isNaN(this.parent.parseFloat(orgValue))) {\n continue;\n }\n if (orgValue.length > 0) {\n setMaxDecimalLength(orgValue);\n sum = sum + this.parent.parseFloat(orgValue + '');\n }\n }\n }\n }\n return sum.toString().indexOf('.') > -1 ? sum.toFixed(maxDecimalLength) : sum;\n };\n /**\n * It will sum up cells that meet the given criteria.\n *\n * Excel: `SUMIF(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathAggregateFormulas.prototype.ComputeSUMIF = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n if (argArr[0].indexOf(':') < 0 && !this.parent.isCellReference(argArr[0]) ||\n (argArr[2] && argArr[2].indexOf(':') < 0 && !this.parent.isCellReference(argArr[2]))) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.ImproperFormula];\n }\n if (argArr.length > 3 || argArr.length < 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var result = this.parent.computeSumIfAndAvgIf(args, false);\n if (typeof result === 'string' && (this.parent.formulaErrorStrings.indexOf(result)\n || this.parent.getErrorStrings().indexOf(result))) {\n return result;\n }\n return result[0];\n };\n /**\n * Sums the cells specified by a given set of conditionsor criteria.\n *\n * Excel: `SUMIFS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathAggregateFormulas.prototype.ComputeSUMIFS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var sum = this.calculateIFS(args);\n return sum;\n };\n /**\n * Returns sum of the product of given ranges of arrays.\n *\n * Excel: `SUMPRODUCT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathAggregateFormulas.prototype.ComputeSUMPRODUCT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _a, _b;\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var sum = 0;\n var count = 0;\n var index;\n var mulValues = null;\n var ranges = args;\n var len = [];\n for (var i = 0; i < ranges.length; i++) {\n var cells = this.parent.getCellCollection(ranges[i]);\n if (cells[0] === '#REF!') {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n len.push(cells.length);\n }\n for (var j = 0; j < len.length; j++) {\n if (len[j] && len[j + 1] && len[j] !== len[j + 1]) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n for (var k = 0; k < ranges.length; ++k) {\n var range = ranges[k];\n if (!range.startsWith(this.parent.tic) && this.parent.isCellReference(range)) {\n var i = range.indexOf(':');\n var startRow = this.parent.rowIndex(range.substr(0, i));\n var endRow = this.parent.rowIndex(range.substr(i + 1));\n if (!(startRow !== -1 || endRow === -1) === (startRow === -1 || endRow !== -1)) {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n if (startRow > endRow) {\n _a = [endRow, startRow], startRow = _a[0], endRow = _a[1];\n }\n var col1 = this.parent.colIndex(range.substr(0, i));\n var col2 = this.parent.colIndex(range.substr(i + 1));\n if (col1 > col2) {\n _b = [col2, col1], col1 = _b[0], col2 = _b[1];\n }\n if (mulValues === null) {\n count = (endRow - startRow + 1) * (col2 - col1 + 1);\n mulValues = [];\n for (i = 0; i < count; ++i) {\n mulValues[i] = 1; //To create required index.\n }\n }\n i = 0;\n for (var row = startRow; row <= endRow; ++row) {\n for (var col = col1; col <= col2; ++col) {\n var cellRef = this.getSheetReference(range) + this.parent.convertAlpha(col) + (row);\n var result = this.parent.getValueFromArg(cellRef);\n if (this.parent.getErrorStrings().indexOf(result) > -1) {\n return result;\n }\n if (!isNaN(this.parent.parseFloat(result))) {\n //To return #VALUE! error when array dimensions are mismatched.\n if (isNaN(mulValues[i])) {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n mulValues[i] = mulValues[i] * this.parent.parseFloat(result);\n }\n else {\n mulValues[i] = 0;\n }\n i++;\n }\n }\n }\n else {\n var s1 = this.parent.getValueFromArg(range);\n index = s1.indexOf('\"');\n if (this.parent.getErrorStrings().indexOf(s1) > -1) {\n return s1;\n }\n else if (index > -1) {\n return 0;\n }\n else {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n }\n for (var i = 0; i < count; ++i) {\n sum += mulValues[i];\n }\n return sum;\n };\n /**\n * Multiplies all the numbers given as arguments and returns the product.\n *\n * Excel: `PRODUCT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathAggregateFormulas.prototype.ComputePRODUCT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var isSubtotalFormula = false;\n if (args.length && args[args.length - 1] === 'isSubtotal') {\n isSubtotalFormula = true;\n args.pop();\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var product = 1;\n var val;\n var orgValue;\n var argsHit = true;\n var parseVal;\n if (!isNullOrUndefined(args)) {\n var argArr = args;\n for (var i = 0; i < argArr.length; i++) {\n var rangevalue = argArr[i];\n if (rangevalue.indexOf(':') > -1 && this.parent.isCellReference(rangevalue)) {\n var cellCollection = this.parent.getCellCollection(rangevalue);\n for (var j = 0; j < cellCollection.length; j++) {\n val = !isSubtotalFormula ? this.parent.getValueFromArg(cellCollection[j]) :\n this.parent.getValueFromArg(cellCollection[j], null, null, true);\n if (isSubtotalFormula && val.includes('SUBTOTAL(')) {\n continue;\n }\n if (!isNumber(val)) {\n continue;\n }\n if (this.parent.getErrorStrings().indexOf(val) > -1) {\n return val;\n }\n parseVal = this.parent.parseFloat(val);\n if (!isNaN(parseVal)) {\n if (val.length > 0) {\n product = product * parseVal;\n argsHit = false;\n }\n }\n }\n }\n else if (rangevalue.indexOf(':') === -1 && this.parent.isCellReference(rangevalue)) {\n orgValue = !isSubtotalFormula ? this.parent.getValueFromArg(argArr[i]) :\n this.parent.getValueFromArg(argArr[i], null, null, true);\n if (isSubtotalFormula && orgValue.includes('SUBTOTAL(')) {\n continue;\n }\n if (!isNumber(orgValue)) {\n continue;\n }\n if (this.parent.getErrorStrings().indexOf(orgValue) > -1) {\n return orgValue;\n }\n }\n else {\n orgValue = argArr[i];\n var isEmptyStr = orgValue.indexOf(this.parent.tic) > -1 && orgValue.split(this.parent.tic).join('').trim() === '';\n if (isEmptyStr || (argArr[i].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(orgValue.split(this.parent.tic).join(''))))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n orgValue = this.parent.getValueFromArg(argArr[i].split(this.parent.tic).join(''));\n orgValue = (orgValue === this.parent.trueValue) ? '1' : (orgValue === this.parent.falseValue) ? '0' : orgValue.split(this.parent.tic).join('');\n if (this.parent.getErrorStrings().indexOf(orgValue) > -1) {\n return orgValue;\n }\n }\n parseVal = this.parent.parseFloat(orgValue);\n if (!isNaN(parseVal)) {\n if (orgValue.length > 0) {\n product = product * parseVal;\n argsHit = false;\n }\n }\n }\n }\n return argsHit ? '0' : product.toString();\n };\n return MathAggregateFormulas;\n}(FormulaModuleBase));\nexport { MathAggregateFormulas };\n","/**\n * Check whether the value is character or not.\n *\n * @hidden\n * @param {string} value - Specify the value to check.\n * @returns {boolean} - Returns boolean value.\n */\nexport function isChar(value) {\n if ((value.charCodeAt(0) >= 65 && value.charCodeAt(0) <= 90) || (value.charCodeAt(0) >= 97 && value.charCodeAt(0) <= 122)) {\n return true;\n }\n return false;\n}\n/**\n * Resolve column index from cell text (1-based Excel style).\n *\n * @hidden\n * @param {string} cell - Cell text.\n * @returns {number} - Column index.\n */\nexport function columnIndex(cell) {\n var j = 0;\n var k = 0;\n cell = cell.toUpperCase();\n if (j < cell.length && cell[j] === '!') {\n j++;\n while (j < cell.length && cell[j] !== '!') {\n j++;\n }\n j++;\n }\n while (j < cell.length && isChar(cell[j])) {\n var charCode = cell[j].charCodeAt(0);\n k = k * 26 + charCode - 64;\n j++;\n }\n if (k === 0) {\n return -1;\n }\n return k;\n}\n/**\n * Check whether the value is a valid single cell reference.\n *\n * @hidden\n * @param {string} value - Specify the value to check.\n * @returns {boolean} - Returns boolean value.\n */\nexport function isValidCellReference(value) {\n var text = value;\n var endNum = 0;\n var textLength = text.length;\n for (var i = 0; i < textLength; i++) {\n if (isChar(text[i])) {\n endNum++;\n }\n }\n var cellText = text.substring(0, endNum);\n var cellTextLength = cellText.length;\n if (cellTextLength !== textLength) {\n if (cellTextLength < 4) {\n if (textLength !== 1 && (isNaN(parseInt(text, 10)))) {\n var cellColIndex = columnIndex(cellText);\n // XFD is the last column, 16384 - Maximum number of columns in excel.\n if (cellColIndex < 1 || cellColIndex > 16384) {\n return false;\n }\n var rowText = text.substring(endNum, textLength);\n if (rowText.length > 0) {\n var isNumeric = true;\n for (var j = 0; j < rowText.length; j++) {\n var charCode = rowText.charCodeAt(j);\n if (charCode < 48 || charCode > 57) {\n isNumeric = false;\n break;\n }\n }\n if (isNumeric) {\n var cellNumber = parseFloat(rowText);\n if (cellNumber > 0 && cellNumber < 1048577) { // 1048576 - Maximum number of rows in excel.\n return true;\n }\n }\n }\n }\n }\n }\n return false;\n}\n/**\n * Check whether the value is cell reference or not.\n *\n * @hidden\n * @param {string} value - Specify the value to check.\n * @returns {boolean} - Returns boolean value.\n */\nexport function isCellReference(value) {\n var range = value;\n range = range.split('$').join('');\n if (range.indexOf(':') > -1) {\n var rangeSplit = range.split(':');\n if (isValidCellReference(rangeSplit[0]) && isValidCellReference(rangeSplit[1])) {\n return true;\n }\n }\n else if (range.indexOf(':') < 0) {\n if (isValidCellReference(range)) {\n return true;\n }\n }\n return false;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isCellReference } from '../common/cell-ref';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Rounding and truncation functions for numeric precision control, including CEILING, FLOOR, ROUND, and TRUNC variants.\n *\n * Registers 9 functions including ROUND, ROUNDUP, ROUNDDOWN, FLOOR, CEILING, and others.\n *\n * @hidden\n */\nvar MathRoundingFormulas = /** @class */ (function (_super) {\n __extends(MathRoundingFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function MathRoundingFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'ROUND', category: 'Math & Trig', description: 'Rounds a number to a specified number of digits.' },\n { formulaName: 'ROUNDUP', category: 'Math & Trig', description: 'Rounds a number away from zero.' },\n { formulaName: 'ROUNDDOWN', category: 'Math & Trig', description: 'Rounds a number down, toward zero.' },\n { formulaName: 'FLOOR', category: 'Math & Trig', description: 'Returns the round a number down to the nearest integer.' },\n { formulaName: 'CEILING', category: 'Math & Trig', description: 'Returns a number rounded up to a multiple of another number.' },\n { formulaName: 'INT', category: 'Math & Trig', description: 'Returns a number to the nearest integer.' },\n { formulaName: 'TRUNC', category: 'Math & Trig', description: 'Returns the truncated value of a number to a specified number of decimal places.' },\n { formulaName: 'ODD', category: 'Math & Trig', description: 'Rounds a positive number up and negative number down to the nearest odd integer.' },\n { formulaName: 'EVEN', category: 'Math & Trig', description: 'Rounds a positive number up and negative number down to the nearest even integer.' }\n ];\n return _this;\n }\n /**\n * Rounds a number to a specified number of digits.\n *\n * Excel: `ROUND(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=ROUND(3.1415,2)');\n * ```\n */\n MathRoundingFormulas.prototype.ComputeROUND = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!args.length || args.length === 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var argArr = args;\n if (args.length === 1) {\n var orgValue = (argArr[0].split(this.parent.tic).join('') === 'TRUE')\n ? '1'\n : (argArr[0].split(this.parent.tic).join('') === 'FALSE')\n ? '0'\n : argArr[0];\n if (isNaN(this.parent.parseFloat(orgValue))) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n return Math.round(this.parent.parseFloat(orgValue)).toString();\n }\n var numStr = this.parent.getValueFromArg(argArr[0]);\n if (this.parent.getErrorStrings().indexOf(numStr) > -1) {\n return numStr;\n }\n var digStr = this.parent.getValueFromArg(argArr[1]);\n if (this.parent.getErrorStrings().indexOf(digStr) > -1) {\n return digStr;\n }\n numStr = numStr === 'TRUE' ? '1' : numStr === 'FALSE' ? '0' : numStr;\n digStr = digStr === 'TRUE' ? '1' : digStr === 'FALSE' ? '0' : digStr;\n numStr = numStr.split(this.parent.tic).join('');\n digStr = digStr.split(this.parent.tic).join('');\n var isInvalidNumStr = isNaN(Number(numStr)) || numStr.trim() === '';\n var isInvalidDigStr = isNaN(Number(digStr)) || digStr.trim() === '';\n if (((argArr[0].indexOf('\"') > -1 || this.parent.isCellReference(argArr[0])) && isInvalidNumStr)\n || ((argArr[1].indexOf('\"') > -1 || this.parent.isCellReference(argArr[1])) && isInvalidDigStr)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if ((numStr === '' && digStr === '') || numStr === '') {\n return 0;\n }\n var x = this.parent.parseFloat(numStr);\n var digits = this.parent.parseFloat(digStr);\n var round;\n if (!isNaN(digits) && !isNaN(x) && digits > 0) {\n round = this.parent.parseFloat(this.preciseRound(x, digits, 'ROUND'));\n }\n else {\n var mult = Math.pow(10, -digits);\n round = Math.round(x / mult) * mult;\n }\n return round.toString();\n };\n MathRoundingFormulas.prototype.preciseRound = function (numValue, decimalValue, formula) {\n var factor = Math.pow(10, decimalValue);\n var absValue = Math.abs(numValue) * factor;\n var sign = numValue >= 0 ? 1 : -1;\n var result = formula === 'ROUND' ? Math.round(absValue) : formula === 'ROUNDDOWN' ?\n Math.floor(absValue) : Math.ceil(absValue);\n return (sign * (result / factor)).toFixed(decimalValue);\n };\n /**\n * Rounds a number away from zero.\n *\n * Excel: `ROUNDUP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathRoundingFormulas.prototype.ComputeROUNDUP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var str;\n var arg1;\n var arg2;\n var num;\n var len = args.length;\n if (len === 1 && args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (len !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (this.parent.isCellReference(args[0])) {\n arg1 = this.parent.getValueFromArg(args[0]) || '0';\n }\n else {\n if (args[0].indexOf(this.parent.tic) > -1 && (args[0].split(this.parent.tic).join('') === this.parent.trueValue ||\n args[0].split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n arg1 = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');\n }\n if (this.parent.getErrorStrings().indexOf(arg1) > -1) {\n return arg1;\n }\n if (this.parent.isCellReference(args[1])) {\n arg2 = this.parent.getValueFromArg(args[1]) || '0';\n }\n else {\n if (args[1].indexOf(this.parent.tic) > -1 && (args[1].split(this.parent.tic).join('') === this.parent.trueValue ||\n args[1].split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n arg2 = this.parent.getValueFromArg(args[1]).split(this.parent.tic).join('');\n }\n if (this.parent.getErrorStrings().indexOf(arg2) > -1) {\n return arg2;\n }\n arg1 = arg1.toUpperCase() === 'TRUE' ? '1' : (arg1 === 'FALSE' ? '0' : arg1);\n arg2 = arg2.toUpperCase() === 'TRUE' ? '1' : (arg2 === 'FALSE' ? '0' : arg2);\n var isInvalidNumStr = isNaN(Number(arg1)) || arg1.trim() === '';\n var isInvalidDigStr = isNaN(Number(arg2)) || arg2.trim() === '';\n if (((args[0].indexOf('\"') > -1 || this.parent.isCellReference(args[0])) && isInvalidNumStr)\n || ((args[1].indexOf('\"') > -1 || this.parent.isCellReference(args[1])) && isInvalidDigStr)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var digits = Math.ceil(this.parent.parseFloat(arg2));\n num = this.parent.parseFloat(arg1);\n if (digits > 0) {\n var decimalArr = arg1.split('.');\n var decimalCount = decimalArr.length === 2 ? (decimalArr[1].length >= digits ? digits : decimalArr[1].length) : 0;\n num = this.parent.parseFloat(this.preciseRound(num, decimalCount, 'ROUNDUP'));\n str = num.toString();\n if (isNaN(num)) {\n if (digits.toString().indexOf('\"') > -1) {\n str = this.parent.getErrorStrings()[CommonErrors.Value];\n }\n else {\n str = this.parent.getErrorStrings()[CommonErrors.Name];\n }\n }\n }\n else {\n if (num > 0) {\n num = (num / Math.pow(10, -digits)) + .49999;\n }\n else if (num < 0) {\n num = (num / Math.pow(10, -digits)) - .49999;\n }\n if (num > 0 && digits < -9) {\n num = 1 * Math.pow(10, -digits);\n }\n else {\n num = this.parent.parseFloat(num.toFixed(0)) * Math.pow(10, -digits);\n }\n str = num.toString();\n if (isNaN(num)) {\n str = (digits.toString().indexOf('\"') > -1) ? this.parent.getErrorStrings()[CommonErrors.Value] :\n str = this.parent.getErrorStrings()[CommonErrors.Name];\n }\n }\n return str;\n };\n /**\n * Rounds a number down, toward zero.\n *\n * Excel: `ROUNDDOWN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathRoundingFormulas.prototype.ComputeROUNDDOWN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result;\n var arg1;\n var arg2;\n var num;\n var len = args.length;\n if (len === 1 && args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (len !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (this.parent.isCellReference(args[0])) {\n arg1 = this.parent.getValueFromArg(args[0]) || '0';\n }\n else {\n if (args[0].indexOf(this.parent.tic) > -1 && (args[0].split(this.parent.tic).join('') === this.parent.trueValue ||\n args[0].split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n arg1 = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');\n }\n if (this.parent.getErrorStrings().indexOf(arg1) > -1) {\n return arg1;\n }\n if (this.parent.isCellReference(args[1])) {\n arg2 = this.parent.getValueFromArg(args[1]) || '0';\n }\n else {\n if (args[1].indexOf(this.parent.tic) > -1 && (args[1].split(this.parent.tic).join('') === this.parent.trueValue ||\n args[1].split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n arg2 = this.parent.getValueFromArg(args[1]).split(this.parent.tic).join('');\n }\n if (this.parent.getErrorStrings().indexOf(arg2) > -1) {\n return arg2;\n }\n arg1 = arg1.toUpperCase() === 'TRUE' ? '1' : (arg1 === 'FALSE' ? '0' : arg1);\n arg2 = arg2.toUpperCase() === 'TRUE' ? '1' : (arg2 === 'FALSE' ? '0' : arg2);\n var isInvalidNumStr = isNaN(Number(arg1)) || arg1.trim() === '';\n var isInvalidDigStr = isNaN(Number(arg2)) || arg2.trim() === '';\n if (((args[0].indexOf('\"') > -1 || this.parent.isCellReference(args[0])) && isInvalidNumStr)\n || ((args[1].indexOf('\"') > -1 || this.parent.isCellReference(args[1])) && isInvalidDigStr)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var digits = Math.ceil(this.parent.parseFloat(arg2));\n num = this.parent.parseFloat(arg1);\n if (digits > 0) {\n var decimalIndex = arg1.indexOf('.');\n var decimalCount = 0;\n if (decimalIndex !== -1) {\n decimalCount = arg1.length - decimalIndex - 1;\n decimalCount = decimalCount >= digits ? digits : decimalCount;\n }\n num = this.parent.parseFloat(this.preciseRound(num, decimalCount, 'ROUNDDOWN'));\n result = num.toString();\n if (isNaN(num)) {\n if (digits.toString().indexOf('\"') > -1) {\n result = this.parent.getErrorStrings()[CommonErrors.Value];\n }\n else {\n result = this.parent.getErrorStrings()[CommonErrors.Name];\n }\n }\n }\n else {\n if (num > 0) {\n num = (num / Math.pow(10, -digits)) - .49999;\n }\n else if (num < 0) {\n num = (num / Math.pow(10, -digits)) + .49999;\n }\n if (num > 0 && digits < -9) {\n num = 1 * Math.pow(10, -digits);\n }\n else {\n num = this.parent.parseFloat(num.toFixed(0)) * Math.pow(10, -digits);\n }\n result = num.toString();\n if (isNaN(num)) {\n result = (digits.toString().indexOf('\"') > -1) ? this.parent.getErrorStrings()[CommonErrors.Value] :\n result = this.parent.getErrorStrings()[CommonErrors.Name];\n }\n }\n return result;\n };\n /**\n * Returns the round a number down to the nearest integer.\n *\n * Excel: `FLOOR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathRoundingFormulas.prototype.ComputeFLOOR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var argArr = args;\n var argCount = argArr.length;\n var value;\n if (argCount !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if ((argArr[0] === '' && argArr[1] === '') || (argArr[0] === '' && !argArr[1].includes('\"'))) {\n return 0;\n }\n else if (argArr[1] === '' && !argArr[0].includes('\"')) {\n argArr[1] = '0';\n }\n for (var i = 0; i < argArr.length; i++) {\n var argVal = argArr[i].split(this.parent.tic).join('').trim();\n if (argVal === '' || (argArr[i].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(argVal)))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (isCellReference(argArr[i])) {\n value = this.parent.getValueFromArg(argArr[i]) || '0';\n value = (value === this.parent.trueValue) ? '1' : (value === this.parent.falseValue) ? '0' : value;\n if (value.toUpperCase().match(/[A-Z]/) || value.includes('\"') || !this.parent.isNumber(value)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n value = this.parent.getValueFromArg(argArr[i].split(this.parent.tic).join(''));\n value = value === this.parent.trueValue ? '1' : (value === this.parent.falseValue ? '0' : value);\n if (value.toUpperCase().match(/[A-Z]/) || value.includes('\"') || !this.parent.isNumber(value)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n argArr[i] = value;\n }\n var fnum = this.parent.parseFloat(argArr[0]);\n var significance = this.parent.parseFloat(argArr[1]);\n if (fnum > 0 && significance < 0) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n if ((fnum > 0 || fnum < 0) && significance === 0) {\n return this.parent.getErrorStrings()[CommonErrors.DivZero];\n }\n if (isNaN(fnum)) {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n if (fnum === 0 && significance === 0) {\n return 0;\n }\n return Math.floor(fnum / significance) * significance;\n };\n /**\n * Returns a number rounded up to a multiple of another number.\n *\n * Excel: `CEILING(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathRoundingFormulas.prototype.ComputeCEILING = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var argArr = args;\n var argCount = argArr.length;\n var value;\n if (argCount !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if ((argArr[0] === '' && argArr[1] === '') || (argArr[0] === '' && !argArr[1].includes('\"'))) {\n return 0;\n }\n else if (argArr[1] === '' && !argArr[0].includes('\"')) {\n argArr[1] = '0';\n }\n for (var i = 0; i < argArr.length; i++) {\n var argVal = argArr[i].split(this.parent.tic).join('').trim();\n if (argVal === '' || (argArr[i].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(argVal)))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (isCellReference(argArr[i])) {\n value = this.parent.getValueFromArg(argArr[i]) || '0';\n value = (value === this.parent.trueValue) ? '1' : (value === this.parent.falseValue) ? '0' : value;\n if (value.toUpperCase().match(/[A-Z]/) || value.includes('\"') || !this.parent.isNumber(value)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n value = this.parent.getValueFromArg(argArr[i].split(this.parent.tic).join(''));\n value = (value === this.parent.trueValue) ? '1' : (value === this.parent.falseValue) ? '0' : value;\n if (value.toUpperCase().match(/[A-Z]/) || value.includes('\"') || !this.parent.isNumber(value)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n argArr[i] = value;\n }\n var cnum = this.parent.parseFloat(argArr[0]);\n var significance = this.parent.parseFloat(argArr[1]);\n if (cnum > 0 && significance < 0) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n if (isNaN(cnum)) {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n if ((cnum > 0 || cnum === 0) && significance === 0) {\n return 0;\n }\n return Math.ceil(cnum / significance) * significance;\n };\n /**\n * Returns a number to the nearest integer.\n *\n * Excel: `INT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathRoundingFormulas.prototype.ComputeINT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argsValue;\n var errCollection = this.parent.getErrorStrings();\n if (args[0] === '' && args.length === 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n argsValue = this.parent.getValueFromArg(args[0]);\n if (errCollection.indexOf(argsValue) > -1) {\n return argsValue;\n }\n if (argsValue.toUpperCase() === this.parent.trueValue) {\n argsValue = '1';\n }\n else if (argsValue.toUpperCase() === this.parent.falseValue) {\n argsValue = '0';\n }\n if (!this.parent.isCellReference(args[0])) {\n if (args[0].indexOf(this.parent.tic + this.parent.tic) === -1) {\n argsValue = argsValue.split(this.parent.tic).join('');\n }\n if (argsValue.trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n }\n if (argsValue.indexOf('%') > -1) {\n argsValue = (Number(argsValue.split('%')[0]) * 0.01).toString();\n }\n if (isNaN(this.parent.parseFloat(argsValue))) {\n return errCollection[CommonErrors.Value];\n }\n argsValue = this.parent.parseFloat(argsValue);\n argsValue = Math.floor(argsValue);\n return argsValue;\n };\n /**\n * Returns the truncated value of a number to a specified number of decimal places.\n *\n * Excel: `TRUNC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n MathRoundingFormulas.prototype.ComputeTRUNC = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var orgNumValue;\n var orgDigitValue = 0;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args[0] === '' && args.length === 1)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length === 0 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var processArgs = function (orgValue) {\n var actualValue = _this.parent.getValueFromArg(orgValue);\n if (errCollection.indexOf(actualValue) > -1) {\n return actualValue;\n }\n if (actualValue === _this.parent.trueValue) {\n actualValue = '1';\n }\n else if (actualValue === _this.parent.falseValue) {\n actualValue = '0';\n }\n else if (!_this.parent.isCellReference(orgValue)) {\n if (orgValue.indexOf(_this.parent.tic) > -1 && _this.parent.removeTics(orgValue).match(/^(\\d*\\.\\d+|\\d+)\\s*[*]\\s*(\\d*\\.\\d+|\\d+)$/)) {\n actualValue = _this.parent.getValueFromArg(_this.parent.removeTics(orgValue));\n }\n else if (actualValue.indexOf(_this.parent.tic) > -1) {\n actualValue = _this.parent.removeTics(actualValue);\n if (actualValue.trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n else if (actualValue.indexOf(':') > -1) {\n var values = actualValue.split(':');\n if (values.length <= 3) {\n if (!_this.parent.isNumber(values[0]) || !_this.parent.isNumber(values[1])) {\n return errCollection[CommonErrors.Value];\n }\n var hours = Number(values[0]) + Number((Number(values[1]) / 60));\n if (values.length === 3) {\n if (!_this.parent.isNumber(values[2])) {\n return errCollection[CommonErrors.Value];\n }\n hours += Number(Number(values[2]) / 3600);\n }\n actualValue = (hours / 24).toString();\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n }\n }\n if (actualValue.split('%').length === 2 && _this.parent.isNumber(actualValue.split('%')[0])) {\n actualValue = (Number(actualValue.split('%')[0]) * 0.01).toString();\n }\n }\n return actualValue;\n };\n if (!isNullOrUndefined(args[0])) {\n orgNumValue = processArgs(args[0]);\n if (errCollection.indexOf(orgNumValue) > -1) {\n return orgNumValue;\n }\n orgNumValue = this.parent.parseFloat(orgNumValue);\n if (isNaN(orgNumValue)) {\n return errCollection[CommonErrors.Value];\n }\n }\n if (!isNullOrUndefined(args[1])) {\n orgDigitValue = processArgs(args[1]);\n if (errCollection.indexOf(orgDigitValue) > -1) {\n return orgDigitValue;\n }\n orgDigitValue = this.parent.parseFloat(orgDigitValue);\n if (isNaN(orgDigitValue)) {\n return errCollection[CommonErrors.Value];\n }\n }\n orgDigitValue = Math.pow(10, Math.floor(orgDigitValue));\n orgNumValue = Number(orgNumValue);\n return ((orgNumValue < 0 ? -1 : 1) * Math.floor(orgDigitValue * Math.abs(orgNumValue)) / orgDigitValue).toString();\n };\n /**\n * Rounds a positive number up and negative number down to the nearest odd integer.\n *\n * Excel: `ODD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathRoundingFormulas.prototype.ComputeODD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1 || args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var argVal = args[0].split(this.parent.tic).join('').trim();\n if (argVal === '' || (args[0].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(argVal)))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var val;\n if (isCellReference(args[0])) {\n val = this.parent.getValueFromArg(args[0]);\n if (this.parent.getErrorStrings().indexOf(val) > -1) {\n return val;\n }\n if (val === this.parent.trueValue) {\n val = '1';\n }\n else if (val === '' || val === this.parent.falseValue) {\n val = '0';\n }\n else if (val.toUpperCase().match(/[A-Z]/) || val.includes('\"') || !this.parent.isNumber(val)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n val = this.parent.getValueFromArg(args[0].split(this.parent.tic).join(''));\n if (val === '#NAME?') {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n if (val === this.parent.trueValue) {\n val = '1';\n }\n else if (val === '' || val === this.parent.falseValue) {\n val = '0';\n }\n else if (val.toUpperCase().match(/[A-Z]/) || !this.parent.isNumber(val)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n var result = Math.ceil(parseInt(val, 10));\n var isOne = result === 0;\n result = result % 2 === 0 ? (result > 0 ? result + 1 : result - 1) : result;\n if (Math.ceil(parseInt(val, 10)) % 2 !== 0) {\n if (parseInt(val, 10) > 0 && parseFloat(val) > parseInt(val, 10)) {\n result = result + 2;\n }\n else if (parseInt(val, 10) < 0 && parseFloat(val) < parseInt(val, 10)) {\n result = result - 2;\n }\n }\n if (isNaN(result)) {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n return isOne ? 1 : result;\n };\n /**\n * Rounds a positive number up and negative number down to the nearest even integer.\n *\n * Excel: `EVEN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathRoundingFormulas.prototype.ComputeEVEN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1 || args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var argVal = args[0].split(this.parent.tic).join('').trim();\n if (argVal === '' || (args[0].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(argVal)))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var value1;\n if (isCellReference(args[0])) {\n value1 = this.parent.getValueFromArg(args[0]);\n if (this.parent.getErrorStrings().indexOf(value1) > -1) {\n return value1;\n }\n if (value1 === this.parent.trueValue) {\n value1 = '1';\n }\n else if (value1 === '' || value1 === this.parent.falseValue) {\n value1 = '0';\n }\n else if (value1.toUpperCase().match(/[A-Z]/) || value1.includes('\"') || !this.parent.isNumber(value1)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n value1 = this.parent.getValueFromArg(args[0].split(this.parent.tic).join(''));\n if (value1 === '#NAME?') {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n if (value1 === this.parent.trueValue) {\n value1 = '1';\n }\n else if (value1 === '' || value1 === this.parent.falseValue) {\n value1 = '0';\n }\n else if (value1.toUpperCase().match(/[A-Z]/) || !this.parent.isNumber(value1)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n var result = Math.ceil(parseInt(value1, 10));\n result = result % 2 === 0 ? result : (result > 0 ? result + 1 : result - 1);\n if (Math.ceil(parseInt(value1, 10)) % 2 === 0) {\n if (parseInt(value1, 10) > 0 && parseFloat(value1) > parseInt(value1, 10)) {\n result = result + 2;\n }\n else if (parseInt(value1, 10) < 0 && parseFloat(value1) < parseInt(value1, 10)) {\n result = result - 2;\n }\n }\n if (isNaN(result)) {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n return result;\n };\n return MathRoundingFormulas;\n}(FormulaModuleBase));\nexport { MathRoundingFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isCellReference } from '../common/cell-ref';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Core numeric utilities: absolute value, random numbers, logarithms, powers, roots, factorials, and angle/unit conversions.\n *\n * Registers 14 functions including ABS, RAND, RANDBETWEEN, RADIANS, DEGREES, and others.\n *\n * @hidden\n */\nvar MathMiscFormulas = /** @class */ (function (_super) {\n __extends(MathMiscFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function MathMiscFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'ABS', category: 'Math & Trig', description: 'Returns the absolute value of a number.' },\n { formulaName: 'RAND', category: 'Math & Trig', description: 'Return a random number between 0 and 1.' },\n { formulaName: 'RANDBETWEEN', category: 'Math & Trig', description: 'Returns an integer random number in a specified range.' },\n { formulaName: 'RADIANS', category: 'Math & Trig', description: 'Converts degrees to radians.' },\n { formulaName: 'DEGREES', category: 'Math & Trig', description: 'Converts radians to degrees.' },\n { formulaName: 'PI', category: 'Math & Trig', description: 'Returns the value of pi.' },\n { formulaName: 'MOD', category: 'Math & Trig', description: 'Returns a remainder after a number is divided by divisor.' },\n { formulaName: 'FACT', category: 'Math & Trig', description: 'Returns the factorial of a number.' },\n { formulaName: 'DECIMAL', category: 'Math & Trig', description: 'Converts a text representation of a number in a given base into a decimal number.' },\n { formulaName: 'LN', category: 'Math & Trig', description: 'Returns the natural logarithm of a number.' },\n { formulaName: 'LOG', category: 'Math & Trig', description: 'Returns the logarithm of a number to the base that you specify.' },\n { formulaName: 'POWER', category: 'Math & Trig', description: 'Returns the result of a number raised to power.' },\n { formulaName: 'SQRT', category: 'Math & Trig', description: 'Returns the square root of a positive number.' },\n { formulaName: 'EXP', category: 'Math & Trig', description: 'Returns e raised to the power of the given number.' }\n ];\n return _this;\n }\n /**\n * Returns the absolute value of a number.\n *\n * Excel: `ABS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=ABS(-5)');\n * ```\n */\n MathMiscFormulas.prototype.ComputeABS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n var cellvalue = '';\n var absVal;\n if (args.length === 0 || args.length > 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (argArr[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var argVal = argArr[0].split(this.parent.tic).join('').trim();\n if (argVal === '' || (argArr[0].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(argVal)))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (this.parent.isCellReference(argArr[0])) {\n cellvalue = this.parent.getValueFromArg(argArr[0]);\n if (this.parent.getErrorStrings().indexOf(cellvalue) > -1) {\n return cellvalue;\n }\n if (cellvalue === this.parent.trueValue) {\n cellvalue = '1';\n }\n if (cellvalue === '' || cellvalue === this.parent.falseValue) {\n cellvalue = '0';\n }\n absVal = this.parent.parseFloat(cellvalue);\n if (isNaN(absVal) && !this.parent.isNumber(cellvalue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n cellvalue = this.parent.getValueFromArg(argArr[0]).split(this.parent.tic).join();\n if (cellvalue === this.parent.trueValue) {\n cellvalue = '1';\n }\n if (cellvalue === this.parent.falseValue) {\n cellvalue = '0';\n }\n if (this.parent.getErrorStrings().indexOf(cellvalue) > -1) {\n return cellvalue;\n }\n absVal = this.parent.parseFloat(cellvalue);\n if (isNaN(absVal) && !this.parent.isNumber(cellvalue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n return Math.abs(absVal);\n };\n /**\n * Return a random number between 0 and 1.\n *\n * Excel: `RAND(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n MathMiscFormulas.prototype.ComputeRAND = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length === 1 && args[0] === '') {\n args.length = 0;\n }\n if (args.length > 0) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n return Math.random().toString();\n };\n /**\n * Returns an integer random number in a specified range.\n *\n * Excel: `RANDBETWEEN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathMiscFormulas.prototype.ComputeRANDBETWEEN = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var min;\n var max;\n if (args.length === 1 && args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var errCollection = this.parent.getErrorStrings();\n var processArgs = function (orgValue) {\n var actualValue;\n actualValue = _this.parent.getValueFromArg(orgValue);\n if (errCollection.indexOf(actualValue) > -1) {\n return actualValue;\n }\n if (_this.parent.isCellReference(orgValue)) {\n if (actualValue === '') {\n actualValue = '0';\n }\n else if (orgValue.indexOf(':') > -1 || actualValue.match(/^(\\d*\\.\\d+|\\d+)\\s*[+\\-*/]\\s*(\\d*\\.\\d+|\\d+)$/)) {\n return errCollection[CommonErrors.Value];\n }\n }\n else {\n if (actualValue === '') {\n return errCollection[CommonErrors.NA];\n }\n else if (orgValue.indexOf(_this.parent.tic) > -1 && _this.parent.removeTics(orgValue).match(/^(\\d*\\.\\d+|\\d+)\\s*[+*]\\s*(\\d*\\.\\d+|\\d+)$/)) {\n return errCollection[CommonErrors.Value];\n }\n else if (actualValue.indexOf(_this.parent.tic) > -1) {\n actualValue = _this.parent.removeTics(actualValue);\n if (actualValue.indexOf(':') > -1) {\n var values = actualValue.split(':');\n if (values.length <= 3) {\n if (!_this.parent.isNumber(values[0]) || !_this.parent.isNumber(values[1])) {\n return errCollection[CommonErrors.Value];\n }\n var hours = Number(values[0]) + Number((Number(values[1]) / 60));\n if (values.length === 3) {\n if (!_this.parent.isNumber(values[2])) {\n return errCollection[CommonErrors.Value];\n }\n hours += Number(Number(values[2]) / 3600);\n }\n actualValue = (hours / 24).toString();\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n }\n }\n if (actualValue.split('%').length === 2 && _this.parent.isNumber(actualValue.split('%')[0])) {\n actualValue = (Number(actualValue.split('%')[0]) * 0.01).toString();\n }\n }\n actualValue = parseFloat(actualValue);\n if (isNaN(actualValue)) {\n return errCollection[CommonErrors.Value];\n }\n return actualValue;\n };\n max = processArgs(args[1]);\n if (errCollection.indexOf(max) > -1) {\n return max;\n }\n min = processArgs(args[0]);\n if (errCollection.indexOf(min) > -1) {\n return min;\n }\n if (min === 0 && max === 0) {\n return '0';\n }\n else if (max < min) {\n return errCollection[CommonErrors.Num];\n }\n else {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor((Math.random() * ((max - min) + 1)) + min);\n }\n };\n /**\n * Converts degrees to radians.\n *\n * Excel: `RADIANS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathMiscFormulas.prototype.ComputeRADIANS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args[0] === '' && args.length === 1) ||\n (args[0].split('!').length === 2 && args[0].indexOf(this.parent.tic) === -1)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n else if (args[0].indexOf(':') > -1 || args[0].split(this.parent.tic).join('').trim() === '' ||\n args[0].split(this.parent.tic).join('').trim() === '!' || args[0].split('!').length === 2) {\n return errCollection[CommonErrors.Value];\n }\n value = this.parent.getValueFromArg(args[0]).trim();\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if ((value.indexOf(this.parent.tic) > -1 && args[0].indexOf(this.parent.tic) === -1) ||\n value.split(this.parent.tic).length > 3) {\n return errCollection[CommonErrors.Value];\n }\n if (value.toUpperCase() === this.parent.trueValue) {\n value = '1';\n }\n else if (value.toUpperCase() === this.parent.falseValue) {\n value = '0';\n }\n else if (value.split('%').length === 2 && this.parent.isNumber(value.split('%')[0])) {\n value = (Number(value.split('%')[0]) / 100).toString();\n }\n value = this.parent.parseFloat(value.split(this.parent.tic).join(''));\n if (!isNaN(value)) {\n value = Math.PI * (value) / 180;\n }\n else {\n if (this.parent.isCellReference(args[0]) || args[0].indexOf(this.parent.tic) > -1) {\n return errCollection[CommonErrors.Value];\n }\n else {\n return errCollection[CommonErrors.Name];\n }\n }\n return value;\n };\n /**\n * Converts radians to degrees.\n *\n * Excel: `DEGREES(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathMiscFormulas.prototype.ComputeDEGREES = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args[0] === '' && args.length === 1)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var val = this.parent.getValueFromArg(args[0]).trim();\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (this.parent.isCellReference(args[0])) {\n if (val === '' || val.indexOf(':') > -1) {\n return 0;\n }\n else if (val.indexOf(this.parent.tic) > -1 || (isNaN(Number(val)) && !isNaN(parseInt(val, 10)))) {\n return errCollection[CommonErrors.Value];\n }\n }\n else if (val.indexOf('\"TRUE\"') > -1) {\n return errCollection[CommonErrors.Value];\n }\n val = val.split(this.parent.tic).join('');\n if (val.toUpperCase() === this.parent.trueValue) {\n val = '1';\n }\n else if (val.toUpperCase() === this.parent.falseValue) {\n val = '0';\n }\n else if (val.indexOf('%') > -1) {\n val = (Number(val.split('%')[0]) / 100).toString();\n }\n else if (val.toUpperCase().match(/[A-Z]/) || isNaN(parseInt(val, 10))) {\n return errCollection[CommonErrors.Value];\n }\n return parseFloat(val) * (180 / (Math.PI));\n };\n /**\n * Returns the value of pi.\n *\n * Excel: `PI(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathMiscFormulas.prototype.ComputePI = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result;\n if (args && args[0] !== '') {\n result = this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else {\n result = Math.PI;\n }\n return result;\n };\n /**\n * Returns a remainder after a number is divided by divisor.\n *\n * Excel: `MOD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathMiscFormulas.prototype.ComputeMOD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n if (args[1] === '' && !args[0].includes('\"')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.Div];\n }\n else if (args[0] === '' && !args[1].includes('\"')) {\n return 0;\n }\n for (var i = 0; i < args.length; i++) {\n var argVal = args[i].split(this.parent.tic).join('').trim();\n if (argVal === '' || (args[i].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(argVal)))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (isCellReference(args[i])) {\n value = this.parent.getValueFromArg(args[i]) || '0';\n value = (value === this.parent.trueValue) ? '1' : (value === this.parent.falseValue) ? '0' : value;\n if (value.toUpperCase().match(/[A-Z]/) || value.includes('\"') || !this.parent.isNumber(value)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n value = this.parent.getValueFromArg(args[i].split(this.parent.tic).join(''));\n value = (value === this.parent.trueValue) ? '1' : (value === this.parent.falseValue) ? '0' : value;\n if (this.parent.getErrorStrings().indexOf(value) > -1) {\n return value;\n }\n }\n args[i] = value;\n }\n var value1 = args[0];\n var value2 = args[1];\n if (value2 === '0' || value2 === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.Div];\n }\n else if (value1 === '0' || value1 === '') {\n return 0;\n }\n value1 = parseFloat(value1);\n value2 = parseFloat(value2);\n var result = ((value1 % value2) + value2) % value2;\n if (isNaN(result)) {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n return result;\n };\n /**\n * Returns the factorial of a number.\n *\n * Excel: `FACT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathMiscFormulas.prototype.ComputeFACT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var fact = 1;\n var errCollection = this.parent.getErrorStrings();\n if (args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var getValue = args[0];\n if (this.parent.isCellReference(args[0]) || isNaN(Number(getValue.split(this.parent.tic).join('')))) {\n getValue = this.parent.getValueFromArg(args[0]);\n if (errCollection.indexOf(getValue) > -1) {\n return getValue;\n }\n if (getValue.startsWith(this.parent.tic) ||\n getValue.match(/^(\\d*\\.\\d+|\\d+)\\s*[+\\-*/]\\s*(\\d*\\.\\d+|\\d+)$/)) {\n return errCollection[CommonErrors.Value];\n }\n else if (getValue === '') {\n return 1;\n }\n }\n getValue = getValue.split(this.parent.tic).join('').trim();\n if (errCollection.indexOf(getValue) > -1) {\n return getValue;\n }\n if (getValue.toUpperCase() === this.parent.trueValue || getValue.toUpperCase() === this.parent.falseValue) {\n return 1;\n }\n if (getValue.indexOf('%') > -1) {\n getValue = (Number(getValue.split('%')[0]) / 100).toString();\n }\n var value = parseInt(getValue, 10);\n if ((value < 0) || (value > 170)) {\n return errCollection[CommonErrors.Num];\n }\n else if (getValue.toUpperCase().match(/[A-Z]/) || getValue === '') {\n return errCollection[CommonErrors.Value];\n }\n else if (getValue.indexOf(':') > -1) {\n return 0;\n }\n for (var i = 1; i <= value; i++) {\n fact = fact * i;\n }\n return fact;\n };\n /**\n * Converts a text representation of a number in a given base into a decimal number.\n *\n * Excel: `DECIMAL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathMiscFormulas.prototype.ComputeDECIMAL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n var specialChars = /[@#$%^&*()?:{}|<>+-]/g;\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args[0].match(specialChars)) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n else if (args[1].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(args[1].split(this.parent.tic).join('')))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n else {\n var val = void 0;\n var val1 = void 0;\n if (this.parent.isCellReference(args[0].toString())) {\n val = this.parent.getValueFromArg(args[0]);\n }\n else {\n val = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');\n }\n if (this.parent.isCellReference(args[1].toString())) {\n val1 = this.parent.getValueFromArg(args[1]);\n }\n else {\n val1 = this.parent.getValueFromArg(args[1]).split(this.parent.tic).join('');\n }\n var num = parseInt(val, 10);\n var radix = parseInt(val1, 10);\n if (this.parent.getErrorStrings().indexOf(val) > -1) {\n return val;\n }\n else if (this.parent.getErrorStrings().indexOf(val1) > -1) {\n return val1;\n }\n else if (val === '' && val1 !== '') {\n return 0;\n }\n else if (val === '' || (num < 0) || (!isNaN(num) && !Number.isInteger(parseFloat(val)))) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n else if (val1 === '' || (radix < 2 || radix > 36) || isNaN(radix)) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n else if (isNaN(this.parent.parseFloat(val)) && this.parent.parseFloat(val1) <= 10) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n value = parseInt(val, parseInt(val1, 10));\n }\n return isNaN(value) ? this.parent.getErrorStrings()[CommonErrors.Num] : value;\n };\n /**\n * Returns the natural logarithm of a number.\n *\n * Excel: `LN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathMiscFormulas.prototype.ComputeLN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var cellvalue;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args[0] === '' && args.length === 1)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length === 0 || args.length > 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n cellvalue = this.parent.getValueFromArg(args[0]);\n if (errCollection.indexOf(cellvalue) > -1) {\n return cellvalue;\n }\n if (cellvalue.toUpperCase() === this.parent.trueValue) {\n cellvalue = '1';\n }\n else if (cellvalue.toUpperCase() === this.parent.falseValue) {\n cellvalue = '0';\n }\n if (!this.parent.isCellReference(args[0])) {\n cellvalue = this.parent.removeTics(cellvalue);\n if (cellvalue.trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n }\n if (cellvalue.split('%').length === 2 && this.parent.isNumber(cellvalue.split('%')[0])) {\n cellvalue = (Number(cellvalue.split('%')[0]) * 0.01).toString();\n }\n cellvalue = this.parent.parseFloat(cellvalue);\n if (cellvalue <= 0) {\n return errCollection[CommonErrors.Num];\n }\n else if (isNaN(cellvalue)) {\n return errCollection[CommonErrors.Value];\n }\n return Math.log(cellvalue);\n };\n /**\n * Returns the logarithm of a number to the base that you specify.\n *\n * Excel: `LOG(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathMiscFormulas.prototype.ComputeLOG = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var orgNumValue;\n var orgBaseValue;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var processArgs = function (orgValue) {\n var actualValue = _this.parent.getValueFromArg(orgValue);\n if (actualValue === _this.parent.trueValue) {\n actualValue = '1';\n }\n else if (actualValue === _this.parent.falseValue) {\n actualValue = '0';\n }\n if (!_this.parent.isCellReference(orgValue) && actualValue !== '') {\n if (actualValue.indexOf(_this.parent.tic) > -1 && errCollection.indexOf(actualValue.split(_this.parent.tic).join('')) === -1) {\n actualValue = _this.parent.removeTics(actualValue);\n if (actualValue.trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n else if (actualValue.indexOf(':') > -1) {\n var values = actualValue.split(':');\n if (values.length <= 3) {\n if (!_this.parent.isNumber(values[0]) || !_this.parent.isNumber(values[1])) {\n return errCollection[CommonErrors.Value];\n }\n var hours = Number(values[0]) + Number((Number(values[1]) / 60));\n if (values.length === 3) {\n if (!_this.parent.isNumber(values[2])) {\n return errCollection[CommonErrors.Value];\n }\n hours += Number(Number(values[2]) / 3600);\n }\n actualValue = (hours / 24).toString();\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n }\n }\n if (actualValue.split('%').length === 2 && _this.parent.isNumber(actualValue.split('%')[0])) {\n actualValue = (Number(actualValue.split('%')[0]) * 0.01).toString();\n }\n }\n return actualValue;\n };\n if (!isNullOrUndefined(args[0])) {\n orgNumValue = processArgs(args[0]);\n if (errCollection.indexOf(orgNumValue) > -1) {\n return orgNumValue;\n }\n orgNumValue = this.parent.parseFloat(orgNumValue);\n }\n orgBaseValue = 10;\n if (!isNullOrUndefined(args[1])) {\n orgBaseValue = processArgs(args[1]);\n if (errCollection.indexOf(orgBaseValue) > -1) {\n return orgBaseValue;\n }\n orgBaseValue = this.parent.parseFloat(orgBaseValue);\n }\n orgNumValue = Number(orgNumValue);\n if (isNaN(orgNumValue) || isNaN(orgBaseValue)) {\n return errCollection[CommonErrors.Value];\n }\n else if (orgNumValue <= 0 || orgBaseValue <= 0) {\n return errCollection[CommonErrors.Num];\n }\n else if (orgBaseValue === 1) {\n return errCollection[CommonErrors.DivZero];\n }\n return ((Math.log(orgNumValue) / Math.LN10) / (Math.log(orgBaseValue) / Math.LN10)).toString();\n };\n /**\n * Returns the result of a number raised to power.\n *\n * Excel: `POWER(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n MathMiscFormulas.prototype.ComputePOWER = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var power;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0].trim() === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n else if (args[0].trim() === '' && args[1].trim() === '') {\n return errCollection[CommonErrors.Num];\n }\n var processArgs = function (actualValue) {\n var value = _this.parent.getValueFromArg(actualValue);\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (value.toUpperCase() === _this.parent.trueValue) {\n value = '1';\n }\n else if (value.toUpperCase() === _this.parent.falseValue) {\n value = '0';\n }\n if (value.indexOf(_this.parent.tic) > -1) {\n value = _this.parent.removeTics(value);\n if (actualValue.indexOf(_this.parent.tic) === -1 || value.trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n }\n if (value.split('%').length === 2 && _this.parent.isNumber(value.split('%')[0])) {\n value = (Number(value.split('%')[0]) / 100).toString();\n }\n else if (value.indexOf('/') > -1 && _this.parent.isNumber(value.split('/').join(''))) {\n return errCollection[CommonErrors.Num];\n }\n value = _this.parent.parseFloat(value);\n if (isNaN(value)) {\n return errCollection[CommonErrors.Value];\n }\n return value;\n };\n var numValue = processArgs(args[0]);\n if (errCollection.indexOf(numValue) > -1) {\n return numValue;\n }\n var powValue = processArgs(args[1]);\n if (errCollection.indexOf(powValue) > -1) {\n return powValue;\n }\n if (!isNaN(numValue) && !isNaN(powValue)) {\n if (numValue === 0 && powValue < 0) {\n return errCollection[CommonErrors.DivZero];\n }\n if (numValue === 0 && powValue === 0) {\n return errCollection[CommonErrors.Num];\n }\n power = Math.pow(numValue, powValue);\n if (isNaN(power) || power === Infinity) {\n return errCollection[CommonErrors.Num];\n }\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n return power.toString();\n };\n /**\n * Returns the square root of a positive number.\n *\n * Excel: `SQRT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathMiscFormulas.prototype.ComputeSQRT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var sqrtValue;\n var arrValue = args[0];\n if (args.length === 0 || args.length > 1 || arrValue === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n else if (arrValue.split(this.parent.tic).join('').trim() === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (this.parent.isCellReference(arrValue)) {\n sqrtValue = this.parent.getValueFromArg(arrValue) || '0';\n if (sqrtValue.indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n if (arrValue.indexOf(this.parent.tic) > -1 && (arrValue.split(this.parent.tic).join('') === this.parent.trueValue ||\n arrValue.split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n sqrtValue = this.parent.getValueFromArg(arrValue).split(this.parent.tic).join('');\n }\n if (this.parent.getErrorStrings().indexOf(sqrtValue) > -1) {\n return sqrtValue;\n }\n sqrtValue = sqrtValue === this.parent.trueValue ? '1' : sqrtValue === this.parent.falseValue ? '0' : sqrtValue;\n var parsedValue = this.parent.parseFloat(sqrtValue);\n if (parsedValue < 0) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n else if (isNaN(parsedValue) ||\n (arrValue.indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(arrValue)))) {\n var dateTimeCheck = this.parent.hostParseDate(isNaN(parsedValue) ?\n sqrtValue : arrValue.split(this.parent.tic).join(''));\n if (dateTimeCheck.isDate || dateTimeCheck.isTime) {\n sqrtValue = dateTimeCheck.value;\n }\n else {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n return Math.sqrt(this.parent.parseFloat(sqrtValue));\n };\n /**\n * Returns e raised to the power of the given number.\n *\n * Excel: `EXP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n MathMiscFormulas.prototype.ComputeEXP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var orgNumValue;\n var errCollection = this.parent.getErrorStrings();\n if (args[0] === '' && args.length === 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n else if (args[0].split(this.parent.tic).join('').trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n orgNumValue = this.parent.getValueFromArg(args[0]);\n if (errCollection.indexOf(orgNumValue) > -1) {\n return orgNumValue;\n }\n if (orgNumValue.indexOf(this.parent.tic) > -1 && (this.parent.isCellReference(args[0]) ||\n isNaN(Number(orgNumValue.split(this.parent.tic).join(''))))) {\n return errCollection[CommonErrors.Value];\n }\n orgNumValue = orgNumValue.split(this.parent.tic).join('');\n if (orgNumValue === this.parent.trueValue) {\n orgNumValue = '1';\n }\n else if ((orgNumValue === this.parent.falseValue) || (orgNumValue === '')) {\n orgNumValue = '0';\n }\n else if (orgNumValue.indexOf('%') > -1) {\n orgNumValue = (Number(orgNumValue.split('%')[0]) / 100).toString();\n }\n else if (orgNumValue.indexOf(':') > -1) {\n return '0';\n }\n var logNumValue = this.parent.parseFloat(orgNumValue);\n if (isNaN(logNumValue)) {\n return errCollection[CommonErrors.Value];\n }\n else if (logNumValue > 709) {\n return errCollection[CommonErrors.Num];\n }\n return Math.exp(logNumValue).toString();\n };\n return MathMiscFormulas;\n}(FormulaModuleBase));\nexport { MathMiscFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Standard trigonometric functions (SIN, COS, TAN, and inverses) operating on angles in radians.\n *\n * Registers 14 functions including SIN, COS, TAN, ASIN, ACOS, and others.\n *\n * @hidden\n */\nvar MathTrigFormulas = /** @class */ (function (_super) {\n __extends(MathTrigFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function MathTrigFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'SIN', category: 'Math & Trig', description: 'Returns the sine of an angle.' },\n { formulaName: 'COS', category: 'Math & Trig', description: 'Returns the cosine of an angle.' },\n { formulaName: 'TAN', category: 'Math & Trig', description: 'Returns the tangent of an angle.' },\n { formulaName: 'ASIN', category: 'Math & Trig', description: 'Returns the arcsine of a number.' },\n { formulaName: 'ACOS', category: 'Math & Trig', description: 'Returns the arccosine of a number.' },\n { formulaName: 'ATAN', category: 'Math & Trig', description: 'Returns the arctangent of a number.' },\n { formulaName: 'ATAN2', category: 'Math & Trig', description: 'Returns the arctangent from x- and y-coordinates.' },\n { formulaName: 'SINH', category: 'Math & Trig', description: 'Returns the hyperbolic sine of a number.' },\n { formulaName: 'COSH', category: 'Math & Trig', description: 'Returns the hyperbolic cosine of a number.' },\n { formulaName: 'TANH', category: 'Math & Trig', description: 'Returns the hyperbolic tangent of a number.' },\n { formulaName: 'SIGN', category: 'Math & Trig', description: 'Returns the sign of a number.' },\n { formulaName: 'LOG10', category: 'Math & Trig', description: 'Returns the base-10 logarithm of a number.' },\n { formulaName: 'QUOTIENT', category: 'Math & Trig', description: 'Returns the integer portion of a division.' },\n { formulaName: 'SQRTPI', category: 'Math & Trig', description: 'Returns the square root of a number multiplied by pi.' }\n ];\n return _this;\n }\n MathTrigFormulas.prototype.unaryMath = function (args, fn, domainCheck) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1 || args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var num = this.resolveNumberArg(args[0]);\n if (typeof num === 'string') {\n return num;\n }\n if (domainCheck && !domainCheck(num)) {\n return errCollection[CommonErrors.Num];\n }\n return fn(num).toString();\n };\n /**\n * Returns the sine of an angle.\n *\n * Excel: `SIN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=SIN(1)');\n * ```\n */\n MathTrigFormulas.prototype.ComputeSIN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.sin);\n };\n /**\n * Returns the cosine of an angle.\n *\n * Excel: `COS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeCOS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.cos);\n };\n /**\n * Returns the tangent of an angle.\n *\n * Excel: `TAN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeTAN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.tan);\n };\n /**\n * Returns the arcsine of a number.\n *\n * Excel: `ASIN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeASIN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.asin, function (n) { return n >= -1 && n <= 1; });\n };\n /**\n * Returns the arccosine of a number.\n *\n * Excel: `ACOS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeACOS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.acos, function (n) { return n >= -1 && n <= 1; });\n };\n /**\n * Returns the arctangent of a number.\n *\n * Excel: `ATAN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeATAN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.atan);\n };\n /**\n * Returns the hyperbolic sine of a number.\n *\n * Excel: `SINH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeSINH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.sinh);\n };\n /**\n * Returns the hyperbolic cosine of a number.\n *\n * Excel: `COSH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeCOSH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.cosh);\n };\n /**\n * Returns the hyperbolic tangent of a number.\n *\n * Excel: `TANH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeTANH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.tanh);\n };\n /**\n * Returns the base-10 logarithm of a number.\n *\n * Excel: `LOG10(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeLOG10 = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.log10, function (n) { return n > 0; });\n };\n /**\n * Returns the square root of a number multiplied by pi.\n *\n * Excel: `SQRTPI(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeSQRTPI = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, function (n) { return Math.sqrt(n * Math.PI); }, function (n) { return n >= 0; });\n };\n /**\n * Returns the arctangent from x- and y-coordinates.\n *\n * Excel: `ATAN2(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeATAN2 = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var y = this.resolveNumberArg(args[1]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof y === 'string') {\n return y;\n }\n if (x === 0 && y === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n // Excel ATAN2(x_num, y_num) is atan2(y, x) in JS terms (x first).\n return Math.atan2(y, x).toString();\n };\n /**\n * Returns the sign of a number.\n *\n * Excel: `SIGN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeSIGN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var num = this.resolveNumberArg(args[0]);\n if (typeof num === 'string') {\n return num;\n }\n return (num > 0 ? 1 : num < 0 ? -1 : 0).toString();\n };\n /**\n * Returns the integer portion of a division.\n *\n * Excel: `QUOTIENT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigFormulas.prototype.ComputeQUOTIENT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var numerator = this.resolveNumberArg(args[0]);\n var denominator = this.resolveNumberArg(args[1]);\n if (typeof numerator === 'string') {\n return numerator;\n }\n if (typeof denominator === 'string') {\n return denominator;\n }\n if (denominator === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n return Math.trunc(numerator / denominator).toString();\n };\n return MathTrigFormulas;\n}(FormulaModuleBase));\nexport { MathTrigFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Hyperbolic trigonometric functions and their inverses for exponential growth/decay modeling.\n *\n * Registered functions: ACOSH, ASINH, ATANH.\n *\n * @hidden\n */\nvar MathTrigHyperbolicFormulas = /** @class */ (function (_super) {\n __extends(MathTrigHyperbolicFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function MathTrigHyperbolicFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'ACOSH', category: 'Math & Trig', description: 'Returns the inverse hyperbolic cosine of a number.' },\n { formulaName: 'ASINH', category: 'Math & Trig', description: 'Returns the inverse hyperbolic sine of a number.' },\n { formulaName: 'ATANH', category: 'Math & Trig', description: 'Returns the inverse hyperbolic tangent of a number.' }\n ];\n return _this;\n }\n MathTrigHyperbolicFormulas.prototype.unaryMath = function (args, fn, domainCheck) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1 || args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var num = this.resolveNumberArg(args[0]);\n if (typeof num === 'string') {\n return num;\n }\n if (domainCheck && !domainCheck(num)) {\n return errCollection[CommonErrors.Num];\n }\n var result = fn(num);\n if (!isFinite(result)) {\n return errCollection[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the inverse hyperbolic cosine of a number.\n *\n * Excel: `ACOSH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=ACOSH(1)');\n * ```\n */\n MathTrigHyperbolicFormulas.prototype.ComputeACOSH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.acosh, function (n) { return n >= 1; });\n };\n /**\n * Returns the inverse hyperbolic sine of a number.\n *\n * Excel: `ASINH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigHyperbolicFormulas.prototype.ComputeASINH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.asinh);\n };\n /**\n * Returns the inverse hyperbolic tangent of a number.\n *\n * Excel: `ATANH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathTrigHyperbolicFormulas.prototype.ComputeATANH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.unaryMath(args, Math.atanh, function (n) { return n > -1 && n < 1; });\n };\n return MathTrigHyperbolicFormulas;\n}(FormulaModuleBase));\nexport { MathTrigHyperbolicFormulas };\n","/**\n * Shared numeric helpers for formula modules (erf, normal distribution, complex numbers).\n *\n * @hidden\n */\n/**\n * erf helper.\n *\n * @param {number} x - x argument.\n * @returns {number} - erf result.\n */\nexport function erf(x) {\n var sign = x < 0 ? -1 : 1;\n var ax = Math.abs(x);\n var t = 1 / (1 + 0.3275911 * ax);\n var y = 1 - (((((1.061405429 * t - 1.453152027) * t) + 1.421413741) * t -\n 0.284496736) * t + 0.254829592) * t * Math.exp(-ax * ax);\n return sign * y;\n}\n/**\n * erfc helper.\n *\n * @param {number} x - x argument.\n * @returns {number} - erfc result.\n */\nexport function erfc(x) {\n return 1 - erf(x);\n}\n/**\n * normCDF helper.\n *\n * @param {number} x - x argument.\n * @param {number} mean - mean argument.\n * @param {number} stdDev - stdDev argument.\n * @returns {number} - normCDF result.\n */\nexport function normCDF(x, mean, stdDev) {\n if (mean === void 0) { mean = 0; }\n if (stdDev === void 0) { stdDev = 1; }\n if (stdDev <= 0) {\n return NaN;\n }\n var z = (x - mean) / (stdDev * Math.SQRT2);\n return 0.5 * (1 + erf(z));\n}\n/**\n * normInv helper.\n *\n * @param {number} p - p argument.\n * @param {number} mean - mean argument.\n * @param {number} stdDev - stdDev argument.\n * @returns {number} - normInv result.\n */\nexport function normInv(p, mean, stdDev) {\n if (mean === void 0) { mean = 0; }\n if (stdDev === void 0) { stdDev = 1; }\n if (p <= 0 || p >= 1 || stdDev <= 0) {\n return NaN;\n }\n var a = [\n -3.969683028665376e+01, 2.209460984245205e+02, -2.759285104469687e+02,\n 1.383577518672690e+02, -3.066479806614716e+01, 2.506628277459239e+00\n ];\n var b = [\n -5.447609879822406e+01, 1.615858368580409e+02, -1.556989798598866e+02,\n 6.680131188771972e+01, -1.328068155288572e+01\n ];\n var c = [\n -7.784894002430293e-03, -3.223964580411018e-01, -2.400758277161838e+00,\n -2.549732539343734e+00, 4.374664141464968e+00, 2.938163982698783e+00\n ];\n var d = [\n 7.784695709041462e-03, 3.224671290700398e-01, 2.445134137142996e+00, 3.754408661907416e+00\n ];\n var pLow = 0.02425;\n var pHigh = 1 - pLow;\n var q;\n var r;\n if (p < pLow) {\n q = Math.sqrt(-2 * Math.log(p));\n r = (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /\n ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);\n }\n else if (p <= pHigh) {\n q = p - 0.5;\n r = q * q;\n r = (((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) * q /\n (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1);\n }\n else {\n q = Math.sqrt(-2 * Math.log(1 - p));\n r = -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /\n ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);\n }\n return mean + stdDev * r;\n}\n/**\n * parseComplexText helper.\n *\n * @param {string} text - text argument.\n * @returns {ComplexValue | null} - parseComplexText result.\n */\nexport function parseComplexText(text) {\n var trimmed = text.trim();\n if (trimmed === '') {\n return null;\n }\n // eslint-disable-next-line security/detect-unsafe-regex\n var direct = trimmed.match(/^(-?\\d+(?:\\.\\d+)?)([+-]\\d+(?:\\.\\d+)?)[ij]$/i);\n if (direct) {\n return { re: parseFloat(direct[1]), im: parseFloat(direct[2]) };\n }\n // eslint-disable-next-line security/detect-unsafe-regex\n var imagOnly = trimmed.match(/^([+-]?\\d+(?:\\.\\d+)?)[ij]$/i);\n if (imagOnly) {\n return { re: 0, im: parseFloat(imagOnly[1]) };\n }\n // eslint-disable-next-line security/detect-unsafe-regex\n var realOnly = trimmed.match(/^(-?\\d+(?:\\.\\d+)?)$/);\n if (realOnly) {\n return { re: parseFloat(realOnly[1]), im: 0 };\n }\n return null;\n}\n/**\n * formatComplex helper.\n *\n * @param {number} re - re argument.\n * @param {number} im - im argument.\n * @param {string} suffix - suffix argument.\n * @returns {string} - formatComplex result.\n */\nexport function formatComplex(re, im, suffix) {\n if (suffix === void 0) { suffix = 'i'; }\n if (im === 0) {\n return re.toString();\n }\n if (re === 0) {\n return im.toString() + suffix;\n }\n var sign = im >= 0 ? '+' : '-';\n return re.toString() + sign + Math.abs(im).toString() + suffix;\n}\n/**\n * factorial helper.\n *\n * @param {number} n - n argument.\n * @returns {number} - factorial result.\n */\nexport function factorial(n) {\n if (n < 0 || n > 170) {\n return NaN;\n }\n var result = 1;\n for (var i = 2; i <= n; i++) {\n result *= i;\n }\n return result;\n}\n/**\n * binomialCoeff helper.\n *\n * @param {number} n - n argument.\n * @param {number} k - k argument.\n * @returns {number} - binomialCoeff result.\n */\nexport function binomialCoeff(n, k) {\n if (k < 0 || k > n) {\n return 0;\n }\n k = Math.min(k, n - k);\n var result = 1;\n for (var i = 1; i <= k; i++) {\n result = result * (n - k + i) / i;\n }\n return result;\n}\n/**\n * logGamma helper.\n *\n * @param {number} x - x argument.\n * @returns {number} - logGamma result.\n */\nexport function logGamma(x) {\n if (x <= 0) {\n return NaN;\n }\n var g = 7;\n var coef = [\n 0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.32342877765313,\n -176.61502916214059, 12.507343278686905, -0.13857109526572012, Number('9.984369578019571e-6'),\n 1.5056327351493116e-7\n ];\n if (x < 0.5) {\n return Math.log(Math.PI / Math.sin(Math.PI * x)) - logGamma(1 - x);\n }\n x -= 1;\n var a = coef[0];\n for (var i = 1; i < g + 2; i++) {\n a += coef[i] / (x + i);\n }\n var t = x + g + 0.5;\n return 0.5 * Math.log(2 * Math.PI) + (x + 0.5) * Math.log(t) - t + Math.log(a);\n}\n/**\n * gamma helper.\n *\n * @param {number} x - x argument.\n * @returns {number} - gamma result.\n */\nexport function gamma(x) {\n var lg = logGamma(x);\n return isFinite(lg) ? Math.exp(lg) : NaN;\n}\n/**\n * lowerRegularizedGamma helper.\n *\n * @param {number} a - a argument.\n * @param {number} x - x argument.\n * @returns {number} - lowerRegularizedGamma result.\n */\nexport function lowerRegularizedGamma(a, x) {\n if (x < 0 || a <= 0) {\n return NaN;\n }\n if (x === 0) {\n return 0;\n }\n if (x > 1e6) {\n return 1;\n }\n var sum = 1 / a;\n var term = sum;\n for (var n = 1; n < 200; n++) {\n term *= x / (a + n);\n sum += term;\n if (Math.abs(term) < 1e-12 * Math.abs(sum)) {\n break;\n }\n }\n return sum * Math.exp(-x + a * Math.log(x) - logGamma(a));\n}\n/**\n * chiSquareCDF helper.\n *\n * @param {number} x - x argument.\n * @param {number} df - df argument.\n * @returns {number} - chiSquareCDF result.\n */\nexport function chiSquareCDF(x, df) {\n if (x < 0 || df <= 0) {\n return NaN;\n }\n return lowerRegularizedGamma(df / 2, x / 2);\n}\n/**\n * chiSquareInv helper.\n *\n * @param {number} p - p argument.\n * @param {number} df - df argument.\n * @returns {number} - chiSquareInv result.\n */\nexport function chiSquareInv(p, df) {\n if (p <= 0 || p >= 1 || df <= 0) {\n return NaN;\n }\n var lo = 0;\n var hi = Math.max(100, df + 10 * Math.sqrt(2 * df));\n for (var i = 0; i < 100; i++) {\n var mid = (lo + hi) / 2;\n var cdf = chiSquareCDF(mid, df);\n if (cdf < p) {\n lo = mid;\n }\n else {\n hi = mid;\n }\n }\n return (lo + hi) / 2;\n}\n/**\n * fCDF helper.\n *\n * @param {number} x - x argument.\n * @param {number} d1 - d1 argument.\n * @param {number} d2 - d2 argument.\n * @returns {number} - fCDF result.\n */\nexport function fCDF(x, d1, d2) {\n if (x < 0 || d1 <= 0 || d2 <= 0) {\n return NaN;\n }\n var z = (d1 * x) / (d1 * x + d2);\n return betaRegularized(d1 / 2, d2 / 2, z);\n}\n/**\n * betaRegularized helper.\n *\n * @param {number} a - a argument.\n * @param {number} b - b argument.\n * @param {number} x - x argument.\n * @returns {number} - betaRegularized result.\n */\nfunction betaRegularized(a, b, x) {\n if (x <= 0) {\n return 0;\n }\n if (x >= 1) {\n return 1;\n }\n var lnBeta = logGamma(a) + logGamma(b) - logGamma(a + b);\n var front = Math.exp(a * Math.log(x) + b * Math.log(1 - x) - lnBeta) / a;\n var f = 1;\n var c = 1;\n var d = 0;\n for (var m = 0; m <= 200; m++) {\n var m2 = 2 * m;\n var aa = m * (b - m) * x / ((a + m2 - 1) * (a + m2));\n d = 1 + aa * d;\n if (Math.abs(d) < 1e-30) {\n d = 1e-30;\n }\n c = 1 + aa / c;\n if (Math.abs(c) < 1e-30) {\n c = 1e-30;\n }\n d = 1 / d;\n f *= d * c;\n aa = -(a + m) * (a + b + m) * x / ((a + m2) * (a + m2 + 1));\n d = 1 + aa * d;\n if (Math.abs(d) < 1e-30) {\n d = 1e-30;\n }\n c = 1 + aa / c;\n if (Math.abs(c) < 1e-30) {\n c = 1e-30;\n }\n d = 1 / d;\n var delta = d * c;\n f *= delta;\n if (Math.abs(delta - 1) < 1e-10) {\n break;\n }\n }\n return front * (f - 1);\n}\n/**\n * fInv helper.\n *\n * @param {number} p - p argument.\n * @param {number} d1 - d1 argument.\n * @param {number} d2 - d2 argument.\n * @returns {number} - fInv result.\n */\nexport function fInv(p, d1, d2) {\n if (p <= 0 || p >= 1 || d1 <= 0 || d2 <= 0) {\n return NaN;\n }\n var lo = 0;\n var hi = 1000;\n while (fCDF(hi, d1, d2) < p) {\n hi *= 2;\n if (hi > 1e12) {\n break;\n }\n }\n for (var i = 0; i < 100; i++) {\n var mid = (lo + hi) / 2;\n if (fCDF(mid, d1, d2) < p) {\n lo = mid;\n }\n else {\n hi = mid;\n }\n }\n return (lo + hi) / 2;\n}\n/**\n * besselI helper.\n *\n * @param {number} n - n argument.\n * @param {number} x - x argument.\n * @returns {number} - besselI result.\n */\nexport function besselI(n, x) {\n if (x < 0) {\n return besselI(n, -x);\n }\n var nn = Math.abs(Math.floor(n));\n var sum = 0;\n for (var k = 0; k < 100; k++) {\n var term = Math.pow(x / 2, 2 * k + nn) / (factorial(k) * factorial(k + nn));\n sum += term;\n if (k > 10 && term < 1e-15 * sum) {\n break;\n }\n }\n return sum;\n}\n/**\n * besselJ helper.\n *\n * @param {number} n - n argument.\n * @param {number} x - x argument.\n * @returns {number} - besselJ result.\n */\nexport function besselJ(n, x) {\n var nn = Math.abs(Math.floor(n));\n var sum = 0;\n for (var k = 0; k < 100; k++) {\n var sign = k % 2 === 0 ? 1 : -1;\n var term = sign * Math.pow(x / 2, 2 * k + nn) / (factorial(k) * factorial(k + nn));\n sum += term;\n if (k > 10 && Math.abs(term) < 1e-15 * Math.abs(sum)) {\n break;\n }\n }\n return sum;\n}\n/**\n * besselK helper.\n *\n * @param {number} n - n argument.\n * @param {number} x - x argument.\n * @returns {number} - besselK result.\n */\nexport function besselK(n, x) {\n if (x <= 0) {\n return NaN;\n }\n var nn = Math.abs(Math.floor(n));\n if (nn === 0) {\n return (Math.PI / 2) * (besselI(0, x) - besselJ(0, x));\n }\n return (Math.PI / 2) * (besselI(nn, x) - besselJ(nn, x));\n}\n/**\n * Bessel Y_0(x), x > 0.\n *\n * @param {number} x - Order-zero argument.\n * @returns {number} - Y0 approximation.\n */\nfunction besselY0(x) {\n var j0 = besselJ(0, x);\n var innerSum = 0;\n for (var k = 1; k < 100; k++) {\n var partial = 0;\n for (var j = 1; j <= k; j++) {\n partial += 1 / j;\n }\n innerSum += Math.pow(x / 2, 2 * k) / (factorial(k) * factorial(k)) * partial;\n }\n return (2 / Math.PI) * (j0 * (Math.log(x / 2) + 0.5772156649) - innerSum);\n}\n/**\n * Bessel Y_1(x), x > 0.\n *\n * @param {number} x - Order-one argument.\n * @returns {number} - Y1 approximation.\n */\nfunction besselY1(x) {\n var j1 = besselJ(1, x);\n var innerSum = 0;\n for (var k = 0; k < 100; k++) {\n var sign = k % 2 === 0 ? 1 : -1;\n innerSum += sign * Math.pow(x / 2, 2 * k + 1) / (factorial(k) * factorial(k + 1) * (2 * k + 1));\n }\n return (2 / Math.PI) * (j1 * Math.log(x / 2) - 1 / (x / 2) + innerSum);\n}\n/**\n * besselY helper.\n *\n * @param {number} n - n argument.\n * @param {number} x - x argument.\n * @returns {number} - besselY result.\n */\nexport function besselY(n, x) {\n if (x <= 0) {\n return NaN;\n }\n var nn = Math.abs(Math.floor(n));\n if (nn === 0) {\n return besselY0(x);\n }\n var y0 = besselY0(x);\n var y1 = besselY1(x);\n if (nn === 1) {\n return y1;\n }\n for (var i = 1; i < nn; i++) {\n var yn = (2 * i / x) * y1 - y0;\n y0 = y1;\n y1 = yn;\n }\n return y1;\n}\n/**\n * logNormCDF helper.\n *\n * @param {number} x - x argument.\n * @param {number} mean - mean argument.\n * @param {number} stdDev - stdDev argument.\n * @returns {number} - logNormCDF result.\n */\nexport function logNormCDF(x, mean, stdDev) {\n if (x <= 0 || stdDev <= 0) {\n return NaN;\n }\n return normCDF(Math.log(x), mean, stdDev);\n}\n/**\n * logNormInv helper.\n *\n * @param {number} p - p argument.\n * @param {number} mean - mean argument.\n * @param {number} stdDev - stdDev argument.\n * @returns {number} - logNormInv result.\n */\nexport function logNormInv(p, mean, stdDev) {\n return Math.exp(normInv(p, mean, stdDev));\n}\n/**\n * tCDF helper.\n *\n * @param {number} x - x argument.\n * @param {number} df - df argument.\n * @returns {number} - tCDF result.\n */\nexport function tCDF(x, df) {\n if (df <= 0) {\n return NaN;\n }\n var t2 = x * x;\n var ib = betaRegularized(df / 2, 0.5, df / (df + t2));\n return x >= 0 ? 1 - 0.5 * ib : 0.5 * ib;\n}\n/**\n * tInv helper.\n *\n * @param {number} p - p argument.\n * @param {number} df - df argument.\n * @returns {number} - tInv result.\n */\nexport function tInv(p, df) {\n if (p <= 0 || p >= 1 || df <= 0) {\n return NaN;\n }\n var lo = -100;\n var hi = 100;\n for (var i = 0; i < 100; i++) {\n var mid = (lo + hi) / 2;\n if (tCDF(mid, df) < p) {\n lo = mid;\n }\n else {\n hi = mid;\n }\n }\n return (lo + hi) / 2;\n}\n/**\n * betaDist helper.\n *\n * @param {number} x - x argument.\n * @param {number} alpha - alpha argument.\n * @param {number} betaParam - betaParam argument.\n * @returns {number} - betaDist result.\n */\nexport function betaDist(x, alpha, betaParam) {\n if (x < 0 || x > 1 || alpha <= 0 || betaParam <= 0) {\n return NaN;\n }\n return betaRegularized(alpha, betaParam, x);\n}\n/**\n * betaInv helper.\n *\n * @param {number} p - p argument.\n * @param {number} alpha - alpha argument.\n * @param {number} betaParam - betaParam argument.\n * @returns {number} - betaInv result.\n */\nexport function betaInv(p, alpha, betaParam) {\n if (p <= 0 || p >= 1 || alpha <= 0 || betaParam <= 0) {\n return NaN;\n }\n var lo = 0;\n var hi = 1;\n for (var i = 0; i < 100; i++) {\n var mid = (lo + hi) / 2;\n if (betaRegularized(alpha, betaParam, mid) < p) {\n lo = mid;\n }\n else {\n hi = mid;\n }\n }\n return (lo + hi) / 2;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\nimport { factorial } from './formula-math-helpers';\n/**\n * Combinatorial functions for permutations, combinations, and greatest-common-divisor calculations.\n *\n * Registered functions: FACTDOUBLE, MULTINOMIAL, PERMUT, SERIESSUM, ROMAN.\n *\n * @hidden\n */\nvar MathCombinatoricsFormulas = /** @class */ (function (_super) {\n __extends(MathCombinatoricsFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function MathCombinatoricsFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'FACTDOUBLE', category: 'Math & Trig', description: 'Returns the double factorial of a number.' },\n { formulaName: 'MULTINOMIAL', category: 'Math & Trig', description: 'Returns the multinomial of a set of numbers.' },\n { formulaName: 'PERMUT', category: 'Math & Trig', description: 'Returns the number of permutations for a given number of objects.' },\n { formulaName: 'SERIESSUM', category: 'Math & Trig', description: 'Returns the sum of a power series.' },\n { formulaName: 'ROMAN', category: 'Math & Trig', description: 'Converts an Arabic numeral to Roman, as text.' }\n ];\n return _this;\n }\n /**\n * Returns the double factorial of a number.\n *\n * Excel: `FACTDOUBLE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=FACTDOUBLE(1)');\n * ```\n */\n MathCombinatoricsFormulas.prototype.ComputeFACTDOUBLE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var num = this.resolveNumberArg(args[0]);\n if (typeof num === 'string') {\n return num;\n }\n var n = Math.floor(num);\n if (n < 0 || n > 300) {\n return errCollection[CommonErrors.Num];\n }\n var result = 1;\n for (var i = n; i > 0; i -= 2) {\n result *= i;\n }\n return result.toString();\n };\n /**\n * Returns the multinomial of a set of numbers.\n *\n * Excel: `MULTINOMIAL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathCombinatoricsFormulas.prototype.ComputeMULTINOMIAL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var values = [];\n for (var i = 0; i < args.length; i++) {\n var num = this.resolveNumberArg(args[i]);\n if (typeof num === 'string') {\n return num;\n }\n var n = Math.floor(num);\n if (n < 0) {\n return errCollection[CommonErrors.Num];\n }\n values.push(n);\n }\n var sum = values.reduce(function (a, b) { return a + b; }, 0);\n var denom = 1;\n for (var i = 0; i < values.length; i++) {\n denom *= factorial(values[i]);\n }\n var result = factorial(sum) / denom;\n return result.toString();\n };\n /**\n * Returns the number of permutations for a given number of objects.\n *\n * Excel: `PERMUT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathCombinatoricsFormulas.prototype.ComputePERMUT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var nArg = this.resolveNumberArg(args[0]);\n var kArg = this.resolveNumberArg(args[1]);\n if (typeof nArg === 'string') {\n return nArg;\n }\n if (typeof kArg === 'string') {\n return kArg;\n }\n var n = Math.floor(nArg);\n var k = Math.floor(kArg);\n if (n < 0 || k < 0 || n < k) {\n return errCollection[CommonErrors.Num];\n }\n var result = 1;\n for (var i = 0; i < k; i++) {\n result *= n - i;\n }\n return result.toString();\n };\n /**\n * Returns the sum of a power series.\n *\n * Excel: `SERIESSUM(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathCombinatoricsFormulas.prototype.ComputeSERIESSUM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var n = this.resolveNumberArg(args[1]);\n var m = this.resolveNumberArg(args[2]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof n === 'string') {\n return n;\n }\n if (typeof m === 'string') {\n return m;\n }\n var coeffs = [];\n for (var i = 3; i < args.length; i++) {\n var c = this.resolveNumberArg(args[i]);\n if (typeof c === 'string') {\n return c;\n }\n coeffs.push(c);\n }\n var sum = 0;\n for (var i = 0; i < coeffs.length; i++) {\n var power = n + i * m;\n sum += coeffs[i] * Math.pow(x, power);\n }\n return sum.toString();\n };\n /**\n * Converts an Arabic numeral to Roman, as text.\n *\n * Excel: `ROMAN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathCombinatoricsFormulas.prototype.ComputeROMAN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var numArg = this.resolveNumberArg(args[0]);\n if (typeof numArg === 'string') {\n return numArg;\n }\n var form = 0;\n if (args.length === 2) {\n var formArg = this.resolveNumberArg(args[1]);\n if (typeof formArg === 'string') {\n return formArg;\n }\n form = Math.floor(formArg);\n if (form < 0 || form > 4) {\n return errCollection[CommonErrors.Value];\n }\n }\n var n = Math.floor(numArg);\n if (n < 0 || n > 3999) {\n return errCollection[CommonErrors.Value];\n }\n if (n === 0) {\n return '';\n }\n return this.toRoman(n, form);\n };\n MathCombinatoricsFormulas.prototype.toRoman = function (num, form) {\n var thousands = ['', 'M', 'MM', 'MMM'];\n var hundredsClassic = [\n ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'],\n ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'],\n ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'],\n ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'],\n ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM']\n ];\n var tensClassic = [\n ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'],\n ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'],\n ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'],\n ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'],\n ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC']\n ];\n var onesClassic = [\n ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'],\n ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'],\n ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'],\n ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'],\n ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']\n ];\n var f = Math.min(form, 4);\n var result = thousands[Math.floor(num / 1000)];\n result += hundredsClassic[f][Math.floor((num % 1000) / 100)];\n result += tensClassic[f][Math.floor((num % 100) / 10)];\n result += onesClassic[f][num % 10];\n if (form === 1) {\n result = result.replace(/XLV/g, 'VL').replace(/XCV/g, 'VC').replace(/CDL/g, 'LD')\n .replace(/CML/g, 'LM').replace(/CMVC/g, 'LMVL');\n }\n else if (form === 2) {\n result = result.replace(/IV/g, 'IIII').replace(/IX/g, 'VIIII')\n .replace(/XL/g, 'XXXX').replace(/XC/g, 'LXXXX')\n .replace(/CD/g, 'CCCC').replace(/CM/g, 'DCCCC');\n }\n else if (form === 3) {\n result = result.replace(/IV/g, 'IIII').replace(/IX/g, 'VIIII')\n .replace(/XL/g, 'XXXX').replace(/XC/g, 'LXXXX')\n .replace(/CD/g, 'CCCC').replace(/CM/g, 'DCCCC');\n }\n else if (form === 4) {\n result = result.replace(/V/g, 'IV').replace(/L/g, 'XL').replace(/D/g, 'CD');\n }\n return result;\n };\n return MathCombinatoricsFormulas;\n}(FormulaModuleBase));\nexport { MathCombinatoricsFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Number-theoretic helpers such as GCD, LCM, and integer decomposition utilities.\n *\n * Registered functions: GCD, LCM, MROUND, COMBIN, SUMSQ.\n *\n * @hidden\n */\nvar MathNumberFormulas = /** @class */ (function (_super) {\n __extends(MathNumberFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function MathNumberFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'GCD', category: 'Math & Trig', description: 'Returns the greatest common divisor.' },\n { formulaName: 'LCM', category: 'Math & Trig', description: 'Returns the least common multiple.' },\n { formulaName: 'MROUND', category: 'Math & Trig', description: 'Returns a number rounded to the desired multiple.' },\n { formulaName: 'COMBIN', category: 'Math & Trig', description: 'Returns the number of combinations for a given number of objects.' },\n { formulaName: 'SUMSQ', category: 'Math & Trig', description: 'Returns the sum of the squares of the arguments.' }\n ];\n return _this;\n }\n MathNumberFormulas.prototype.collectNumbers = function (args) {\n var errCollection = this.parent.getErrorStrings();\n var nums = [];\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n if (arg === '') {\n continue;\n }\n if (this.parent.isCellReference(arg) && arg.indexOf(':') > -1) {\n var cells = this.parent.getCellCollection(arg);\n var list = Array.isArray(cells) ? cells : [cells];\n for (var c = 0; c < list.length; c++) {\n var val = this.parent.getValueFromArg(list[c]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (val !== '' && this.parent.isNumber(val)) {\n nums.push(this.parent.parseFloat(val));\n }\n }\n }\n else {\n var num = this.resolveNumberArg(arg);\n if (typeof num === 'string') {\n return num;\n }\n nums.push(num);\n }\n }\n return nums;\n };\n MathNumberFormulas.prototype.gcd2 = function (a, b) {\n var x = Math.abs(Math.floor(a));\n var y = Math.abs(Math.floor(b));\n while (y) {\n var t = y;\n y = x % y;\n x = t;\n }\n return x;\n };\n /**\n * Returns the greatest common divisor.\n *\n * Excel: `GCD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=GCD(1)');\n * ```\n */\n MathNumberFormulas.prototype.ComputeGCD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectNumbers(args);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return errCollection[CommonErrors.Value];\n }\n for (var i = 0; i < nums.length; i++) {\n if (nums[i] < 0) {\n return errCollection[CommonErrors.Num];\n }\n }\n var result = Math.floor(nums[0]);\n for (var i = 1; i < nums.length; i++) {\n result = this.gcd2(result, nums[i]);\n }\n return result.toString();\n };\n /**\n * Returns the least common multiple.\n *\n * Excel: `LCM(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathNumberFormulas.prototype.ComputeLCM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectNumbers(args);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return errCollection[CommonErrors.Value];\n }\n for (var i = 0; i < nums.length; i++) {\n if (nums[i] < 0) {\n return errCollection[CommonErrors.Num];\n }\n }\n var result = Math.floor(nums[0]);\n for (var i = 1; i < nums.length; i++) {\n var n = Math.floor(nums[i]);\n result = result === 0 || n === 0 ? 0 : Math.abs(result * n) / this.gcd2(result, n);\n }\n return result.toString();\n };\n /**\n * Returns a number rounded to the desired multiple.\n *\n * Excel: `MROUND(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathNumberFormulas.prototype.ComputeMROUND = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var number = this.resolveNumberArg(args[0]);\n var multiple = this.resolveNumberArg(args[1]);\n if (typeof number === 'string') {\n return number;\n }\n if (typeof multiple === 'string') {\n return multiple;\n }\n if (multiple === 0) {\n return '0';\n }\n if ((number > 0 && multiple < 0) || (number < 0 && multiple > 0)) {\n return errCollection[CommonErrors.Num];\n }\n return (Math.round(number / multiple) * multiple).toString();\n };\n /**\n * Returns the number of combinations for a given number of objects.\n *\n * Excel: `COMBIN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathNumberFormulas.prototype.ComputeCOMBIN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var nArg = this.resolveNumberArg(args[0]);\n var kArg = this.resolveNumberArg(args[1]);\n if (typeof nArg === 'string') {\n return nArg;\n }\n if (typeof kArg === 'string') {\n return kArg;\n }\n var n = Math.floor(nArg);\n var k = Math.floor(kArg);\n if (n < 0 || k < 0 || n < k) {\n return errCollection[CommonErrors.Num];\n }\n var result = 1;\n for (var i = 1; i <= k; i++) {\n result = result * (n - k + i) / i;\n }\n return Math.round(result).toString();\n };\n /**\n * Returns the sum of the squares of the arguments.\n *\n * Excel: `SUMSQ(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathNumberFormulas.prototype.ComputeSUMSQ = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectNumbers(args);\n if (typeof nums === 'string') {\n return nums;\n }\n var sum = 0;\n for (var i = 0; i < nums.length; i++) {\n sum += nums[i] * nums[i];\n }\n return sum.toString();\n };\n return MathNumberFormulas;\n}(FormulaModuleBase));\nexport { MathNumberFormulas };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Returns the 0-based column index for Excel column letters (for example `\"A\"` → `0`).\n *\n * @hidden\n * @param {string} text - Specifies the text.\n * @returns {number} - Column index (0-based).\n */\nexport function getColIndex(text) {\n var colIdx = 0;\n text = text.split('').reverse().join('');\n for (var i = text.length - 1; i >= 0; i--) {\n colIdx += (text[i].charCodeAt(0) - 64) * (Math.pow(26, i));\n }\n return colIdx - 1;\n}\n/**\n * Returns Excel column letters for a 1-based column index (for example `1` → `\"A\"`).\n *\n * @hidden\n * @param {number} colIndex - 1-based column index.\n * @returns {string} - Column header text.\n */\nexport function getColumnHeaderText(colIndex) {\n var alphabet = 'Z';\n if (colIndex / 26 > 1) {\n return getColumnHeaderText((colIndex % 26 === 0) ? (colIndex / 26 - 1) : Math.floor(colIndex / 26))\n + String.fromCharCode((colIndex % 26) === 0 ? alphabet.charCodeAt(0) : 64 + (colIndex % 26));\n }\n else {\n return String.fromCharCode(64 + (colIndex));\n }\n}\n/**\n * Parses a cell address into 0-based `[rowIndex, colIndex]`.\n *\n * @hidden\n * @param {string} address - Specifies the address.\n * @returns {number[]} - [rowIndex, colIndex] (0-based).\n */\nexport function getCellIndexes(address) {\n return [parseInt(address.match(/\\d+/)[0], 10) - 1, getColIndex(address.match(/[A-Z]+/i)[0].toUpperCase())];\n}\n/**\n * Builds an `A1`-style cell address from 0-based row and column indexes.\n *\n * @hidden\n * @param {number} sRow - Row index (0-based).\n * @param {number} sCol - Column index (0-based).\n * @returns {string} - Cell address.\n */\nexport function getCellAddress(sRow, sCol) {\n return getColumnHeaderText(sCol + 1) + (sRow + 1);\n}\n/**\n * Builds an `A1:B2`-style range address from range indexes.\n *\n * @hidden\n * @param {number[]} range - Range indexes.\n * @returns {string} - Range address.\n */\nexport function getRangeAddress(range) {\n return getCellAddress(range[0], range[1]) + ':' + (!isNullOrUndefined(range[2]) ?\n getCellAddress(range[2], range[3]) : getCellAddress(range[0], range[1]));\n}\n/**\n * Parses a range string into `[startRow, startCol, endRow, endCol]` (0-based).\n *\n * @hidden\n * @param {string} range - Range string (optional sheet prefix allowed).\n * @param {SheetBounds} [sheetBounds] - Optional sheet bounds for whole-row/column expansion.\n * @returns {number[]} - Range indexes [startRow, startCol, endRow, endCol].\n */\nexport function getRangeIndexes(range, sheetBounds) {\n var cellindexes;\n var indexes = [];\n if (range) {\n range = range.lastIndexOf('!') > -1 ? range.substring(range.lastIndexOf('!') + 1) : range;\n range = range.indexOf(':') === -1 ? range + ':' + range : range;\n var containsAlphabetsAndDigits = new RegExp(/^(?=.*[a-zA-Z])(?=.*\\d)/g);\n if (!containsAlphabetsAndDigits.test(range)) {\n var refArr = range.split(':');\n var rowCount = sheetBounds && sheetBounds.rowCount ? sheetBounds.rowCount - 1 : 1;\n var colHeader = sheetBounds && sheetBounds.colCount ?\n getColumnHeaderText(sheetBounds.colCount) : 'A';\n range = isNullOrUndefined(range.match(/[0-9]/)) ? (refArr[0] + '1:' + refArr[1] + rowCount) :\n ('A' + refArr[0] + ':' + colHeader + refArr[1]);\n }\n range.split(':').forEach(function (address) {\n cellindexes = getCellIndexes(address);\n indexes.push(cellindexes[0]);\n indexes.push(cellindexes[1]);\n });\n }\n return indexes;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CommonErrors } from '../common/index';\nimport { getRangeIndexes } from '../common/address';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Shared matrix helpers for MDETERM / MINVERSE / MMULT / TRANSPOSE.\n *\n * @hidden\n */\nvar MatrixFormulaBase = /** @class */ (function (_super) {\n __extends(MatrixFormulaBase, _super);\n function MatrixFormulaBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MatrixFormulaBase.prototype.readMatrix = function (ref) {\n var errCollection = this.parent.getErrorStrings();\n var stripped = ref.split('$').join('');\n if (!this.parent.isCellReference(stripped.split(':')[0])) {\n return errCollection[CommonErrors.Value];\n }\n var indexes = getRangeIndexes(stripped);\n var rows = indexes[2] - indexes[0] + 1;\n var cols = indexes[3] - indexes[1] + 1;\n var cells = this.parent.getCellCollection(stripped);\n var list = Array.isArray(cells) ? cells : [cells];\n if (list.length !== rows * cols) {\n return errCollection[CommonErrors.Value];\n }\n var matrix = [];\n for (var r = 0; r < rows; r++) {\n var row = [];\n for (var c = 0; c < cols; c++) {\n var val = this.parent.getValueFromArg(list[r * cols + c]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (val === '' || !this.parent.isNumber(val)) {\n return errCollection[CommonErrors.Value];\n }\n row.push(this.parent.parseFloat(val));\n }\n matrix.push(row);\n }\n return matrix;\n };\n MatrixFormulaBase.prototype.flattenMatrix = function (matrix, transpose) {\n if (transpose === void 0) { transpose = false; }\n var sep = this.parent.getParseArgumentSeparator();\n var rows = matrix.length;\n var cols = matrix[0].length;\n var parts = [];\n if (transpose) {\n for (var c = 0; c < cols; c++) {\n for (var r = 0; r < rows; r++) {\n parts.push(matrix[r][c].toString());\n }\n }\n }\n else {\n for (var r = 0; r < rows; r++) {\n for (var c = 0; c < cols; c++) {\n parts.push(matrix[r][c].toString());\n }\n }\n }\n return parts.join(sep);\n };\n MatrixFormulaBase.prototype.determinant = function (m) {\n var n = m.length;\n if (n === 1) {\n return m[0][0];\n }\n if (n === 2) {\n return m[0][0] * m[1][1] - m[0][1] * m[1][0];\n }\n var det = 0;\n for (var c = 0; c < n; c++) {\n var minor = [];\n for (var r = 1; r < n; r++) {\n var row = [];\n for (var k = 0; k < n; k++) {\n if (k !== c) {\n row.push(m[r][k]);\n }\n }\n minor.push(row);\n }\n det += (c % 2 === 0 ? 1 : -1) * m[0][c] * this.determinant(minor);\n }\n return det;\n };\n MatrixFormulaBase.prototype.inverse = function (m) {\n var n = m.length;\n var aug = [];\n for (var i = 0; i < n; i++) {\n aug.push(m[i].slice());\n for (var j = 0; j < n; j++) {\n aug[i].push(i === j ? 1 : 0);\n }\n }\n for (var i = 0; i < n; i++) {\n var maxRow = i;\n for (var k = i + 1; k < n; k++) {\n if (Math.abs(aug[k][i]) > Math.abs(aug[maxRow][i])) {\n maxRow = k;\n }\n }\n var tmp = aug[i];\n aug[i] = aug[maxRow];\n aug[maxRow] = tmp;\n var pivot = aug[i][i];\n if (Math.abs(pivot) < 1e-12) {\n return null;\n }\n for (var j = 0; j < 2 * n; j++) {\n aug[i][j] /= pivot;\n }\n for (var k = 0; k < n; k++) {\n if (k === i) {\n continue;\n }\n var factor = aug[k][i];\n for (var j = 0; j < 2 * n; j++) {\n aug[k][j] -= factor * aug[i][j];\n }\n }\n }\n var inv = [];\n for (var i = 0; i < n; i++) {\n inv.push(aug[i].slice(n));\n }\n return inv;\n };\n MatrixFormulaBase.prototype.multiply = function (a, b) {\n if (a[0].length !== b.length) {\n return null;\n }\n var rows = a.length;\n var cols = b[0].length;\n var inner = b.length;\n var result = [];\n for (var i = 0; i < rows; i++) {\n var row = [];\n for (var j = 0; j < cols; j++) {\n var sum = 0;\n for (var k = 0; k < inner; k++) {\n sum += a[i][k] * b[k][j];\n }\n row.push(sum);\n }\n result.push(row);\n }\n return result;\n };\n return MatrixFormulaBase;\n}(FormulaModuleBase));\nexport { MatrixFormulaBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { MatrixFormulaBase } from './matrix-base';\n/**\n * Matrix and linear-algebra helpers for array-oriented spreadsheet calculations.\n *\n * Registered functions: MDETERM, MINVERSE, MMULT, TRANSPOSE.\n *\n * @hidden\n */\nvar MatrixFormulas = /** @class */ (function (_super) {\n __extends(MatrixFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function MatrixFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'MDETERM', category: 'Math & Trig', description: 'Returns the matrix determinant of an array.' },\n { formulaName: 'MINVERSE', category: 'Math & Trig', description: 'Returns the matrix inverse of an array.' },\n { formulaName: 'MMULT', category: 'Math & Trig', description: 'Returns the matrix product of two arrays.' },\n { formulaName: 'TRANSPOSE', category: 'Math & Trig', description: 'Returns the transpose of an array.' }\n ];\n return _this;\n }\n /**\n * Returns the matrix determinant of an array.\n *\n * Excel: `MDETERM(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=MDETERM(1)');\n * ```\n */\n MatrixFormulas.prototype.ComputeMDETERM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var matrix = this.readMatrix(args[0]);\n if (typeof matrix === 'string') {\n return matrix;\n }\n if (matrix.length !== matrix[0].length) {\n return errCollection[CommonErrors.Value];\n }\n return this.determinant(matrix).toString();\n };\n /**\n * Returns the matrix inverse of an array.\n *\n * Excel: `MINVERSE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MatrixFormulas.prototype.ComputeMINVERSE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var matrix = this.readMatrix(args[0]);\n if (typeof matrix === 'string') {\n return matrix;\n }\n if (matrix.length !== matrix[0].length) {\n return errCollection[CommonErrors.Value];\n }\n var inv = this.inverse(matrix);\n if (!inv) {\n return errCollection[CommonErrors.Num];\n }\n return this.flattenMatrix(inv);\n };\n /**\n * Returns the matrix product of two arrays.\n *\n * Excel: `MMULT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MatrixFormulas.prototype.ComputeMMULT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var a = this.readMatrix(args[0]);\n var b = this.readMatrix(args[1]);\n if (typeof a === 'string') {\n return a;\n }\n if (typeof b === 'string') {\n return b;\n }\n var product = this.multiply(a, b);\n if (!product) {\n return errCollection[CommonErrors.Value];\n }\n return this.flattenMatrix(product);\n };\n /**\n * Returns the transpose of an array.\n *\n * Excel: `TRANSPOSE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MatrixFormulas.prototype.ComputeTRANSPOSE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var matrix = this.readMatrix(args[0]);\n if (typeof matrix === 'string') {\n return matrix;\n }\n return this.flattenMatrix(matrix, true);\n };\n return MatrixFormulas;\n}(MatrixFormulaBase));\nexport { MatrixFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Foundational engineering conversions and numeric transforms used in scientific worksheets.\n *\n * Registers 12 functions including BIN2DEC, BIN2HEX, BIN2OCT, DEC2BIN, DEC2HEX, and others.\n *\n * @hidden\n */\nvar EngineeringBaseFormulas = /** @class */ (function (_super) {\n __extends(EngineeringBaseFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function EngineeringBaseFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'BIN2DEC', category: 'Engineering', description: 'Converts a binary number to decimal.' },\n { formulaName: 'BIN2HEX', category: 'Engineering', description: 'Converts a binary number to hexadecimal.' },\n { formulaName: 'BIN2OCT', category: 'Engineering', description: 'Converts a binary number to octal.' },\n { formulaName: 'DEC2BIN', category: 'Engineering', description: 'Converts a decimal number to binary.' },\n { formulaName: 'DEC2HEX', category: 'Engineering', description: 'Converts a decimal number to hexadecimal.' },\n { formulaName: 'DEC2OCT', category: 'Engineering', description: 'Converts a decimal number to octal.' },\n { formulaName: 'HEX2BIN', category: 'Engineering', description: 'Converts a hexadecimal number to binary.' },\n { formulaName: 'HEX2DEC', category: 'Engineering', description: 'Converts a hexadecimal number to decimal.' },\n { formulaName: 'HEX2OCT', category: 'Engineering', description: 'Converts a hexadecimal number to octal.' },\n { formulaName: 'OCT2BIN', category: 'Engineering', description: 'Converts an octal number to binary.' },\n { formulaName: 'OCT2DEC', category: 'Engineering', description: 'Converts an octal number to decimal.' },\n { formulaName: 'OCT2HEX', category: 'Engineering', description: 'Converts an octal number to hexadecimal.' }\n ];\n return _this;\n }\n EngineeringBaseFormulas.prototype.parseBaseNumber = function (text, base) {\n var errCollection = this.parent.getErrorStrings();\n var cleaned = text.trim().toUpperCase();\n if (cleaned === '') {\n return errCollection[CommonErrors.Num];\n }\n var pattern = base === 16 ? /^[0-9A-F]+$/ : base === 2 ? /^[01]+$/ : /^[0-7]+$/;\n if (!pattern.test(cleaned)) {\n return errCollection[CommonErrors.Num];\n }\n var value = parseInt(cleaned, base);\n if (isNaN(value)) {\n return errCollection[CommonErrors.Num];\n }\n return value;\n };\n EngineeringBaseFormulas.prototype.resolveBaseArg = function (arg, base) {\n var errCollection = this.parent.getErrorStrings();\n var text = this.resolveTextArg(arg);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n return this.parseBaseNumber(text, base);\n };\n EngineeringBaseFormulas.prototype.formatToBase = function (value, base, places) {\n var errCollection = this.parent.getErrorStrings();\n var num = Math.trunc(value);\n var limits = {\n 2: { min: -512, max: 511, maxPlaces: 10 },\n 8: { min: -536870912, max: 536870911, maxPlaces: 10 },\n 10: { min: Number.MIN_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER, maxPlaces: 0 },\n 16: { min: -549755813888, max: 549755813887, maxPlaces: 10 }\n };\n // eslint-disable-next-line security/detect-object-injection\n var limit = limits[base];\n if (num < limit.min || num > limit.max) {\n return errCollection[CommonErrors.Num];\n }\n var negative = false;\n if (num < 0) {\n negative = true;\n var width = places && places > 0 ? places : (base === 2 ? 10 : base === 8 ? 10 : 10);\n num = (1 << width) + num;\n }\n var digits = num.toString(base).toUpperCase();\n if (places !== undefined && places > 0) {\n if (places > limit.maxPlaces) {\n return errCollection[CommonErrors.Num];\n }\n while (digits.length < places) {\n digits = '0' + digits;\n }\n }\n return negative && base !== 10 ? digits : digits;\n };\n /**\n * Converts a binary number to decimal.\n *\n * Excel: `BIN2DEC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=BIN2DEC(1)');\n * ```\n */\n EngineeringBaseFormulas.prototype.ComputeBIN2DEC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var val = this.resolveBaseArg(args[0], 2);\n if (typeof val === 'string') {\n return val;\n }\n var binary = this.resolveTextArg(args[0]).trim();\n if (binary.length > 10) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n var num = val;\n if (binary.length === 10 && binary.charAt(0) === '1') {\n num = parseInt(binary, 2) - (1 << 10);\n }\n return num.toString();\n };\n /**\n * Converts a binary number to hexadecimal.\n *\n * Excel: `BIN2HEX(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeBIN2HEX = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.binTo(args, 16);\n };\n /**\n * Converts a binary number to octal.\n *\n * Excel: `BIN2OCT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeBIN2OCT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.binTo(args, 8);\n };\n EngineeringBaseFormulas.prototype.binTo = function (args, targetBase) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var dec = this.ComputeBIN2DEC(args[0]);\n if (typeof dec === 'string' && errCollection.indexOf(dec) > -1) {\n return dec;\n }\n var places;\n if (args.length === 2) {\n var p = this.resolveNumberArg(args[1]);\n if (typeof p === 'string') {\n return p;\n }\n places = Math.floor(p);\n }\n return this.formatToBase(parseInt(dec.toString(), 10), targetBase, places);\n };\n /**\n * Converts a decimal number to binary.\n *\n * Excel: `DEC2BIN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeDEC2BIN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.decTo(args, 2);\n };\n /**\n * Converts a decimal number to hexadecimal.\n *\n * Excel: `DEC2HEX(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeDEC2HEX = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.decTo(args, 16);\n };\n /**\n * Converts a decimal number to octal.\n *\n * Excel: `DEC2OCT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeDEC2OCT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.decTo(args, 8);\n };\n EngineeringBaseFormulas.prototype.decTo = function (args, targetBase) {\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var num = this.resolveNumberArg(args[0]);\n if (typeof num === 'string') {\n return num;\n }\n var places;\n if (args.length === 2) {\n var p = this.resolveNumberArg(args[1]);\n if (typeof p === 'string') {\n return p;\n }\n places = Math.floor(p);\n }\n return this.formatToBase(Math.trunc(num), targetBase, places);\n };\n /**\n * Converts a hexadecimal number to decimal.\n *\n * Excel: `HEX2DEC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeHEX2DEC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]).trim().toUpperCase();\n var val = this.parseBaseNumber(text, 16);\n if (typeof val === 'string') {\n return val;\n }\n if (text.length > 10) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n var num = val;\n if (text.length === 10 && parseInt(text.charAt(0), 16) >= 8) {\n num = parseInt(text, 16) - (1 << 40);\n }\n return num.toString();\n };\n /**\n * Converts a hexadecimal number to binary.\n *\n * Excel: `HEX2BIN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeHEX2BIN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.hexOctTo(args, 2, this.ComputeHEX2DEC.bind(this));\n };\n /**\n * Converts a hexadecimal number to octal.\n *\n * Excel: `HEX2OCT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeHEX2OCT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.hexOctTo(args, 8, this.ComputeHEX2DEC.bind(this));\n };\n /**\n * Converts an octal number to decimal.\n *\n * Excel: `OCT2DEC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeOCT2DEC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]).trim();\n var val = this.parseBaseNumber(text, 8);\n if (typeof val === 'string') {\n return val;\n }\n if (text.length > 10) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n var num = val;\n if (text.length === 10 && text.charAt(0) >= '4') {\n num = parseInt(text, 8) - (1 << 30);\n }\n return num.toString();\n };\n /**\n * Converts an octal number to binary.\n *\n * Excel: `OCT2BIN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeOCT2BIN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.hexOctTo(args, 2, this.ComputeOCT2DEC.bind(this));\n };\n /**\n * Converts an octal number to hexadecimal.\n *\n * Excel: `OCT2HEX(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBaseFormulas.prototype.ComputeOCT2HEX = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.hexOctTo(args, 16, this.ComputeOCT2DEC.bind(this));\n };\n EngineeringBaseFormulas.prototype.hexOctTo = function (args, targetBase, toDec) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var dec = toDec(args[0]);\n if (typeof dec === 'string' && errCollection.indexOf(dec) > -1) {\n return dec;\n }\n var places;\n if (args.length === 2) {\n var p = this.resolveNumberArg(args[1]);\n if (typeof p === 'string') {\n return p;\n }\n places = Math.floor(p);\n }\n return this.formatToBase(parseInt(dec.toString(), 10), targetBase, places);\n };\n return EngineeringBaseFormulas;\n}(FormulaModuleBase));\nexport { EngineeringBaseFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\nimport { erf, erfc } from './formula-math-helpers';\n/**\n * Miscellaneous engineering functions including delta, gestep, and related step/threshold helpers.\n *\n * Registered functions: DELTA, GESTEP, ERF, ERFC.\n *\n * @hidden\n */\nvar EngineeringMiscFormulas = /** @class */ (function (_super) {\n __extends(EngineeringMiscFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function EngineeringMiscFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'DELTA', category: 'Engineering', description: 'Tests whether two values are equal.' },\n { formulaName: 'GESTEP', category: 'Engineering', description: 'Tests whether a number is greater than a threshold.' },\n { formulaName: 'ERF', category: 'Engineering', description: 'Returns the error function.' },\n { formulaName: 'ERFC', category: 'Engineering', description: 'Returns the complementary error function.' }\n ];\n return _this;\n }\n /**\n * Tests whether two values are equal.\n *\n * Excel: `DELTA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=DELTA(1)');\n * ```\n */\n EngineeringMiscFormulas.prototype.ComputeDELTA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var a = this.resolveNumberArg(args[0]);\n if (typeof a === 'string') {\n return a;\n }\n var b = 0;\n if (args.length === 2) {\n var bArg = this.resolveNumberArg(args[1]);\n if (typeof bArg === 'string') {\n return bArg;\n }\n b = bArg;\n }\n return (a === b ? 1 : 0).toString();\n };\n /**\n * Tests whether a number is greater than a threshold.\n *\n * Excel: `GESTEP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringMiscFormulas.prototype.ComputeGESTEP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var num = this.resolveNumberArg(args[0]);\n if (typeof num === 'string') {\n return num;\n }\n var step = 0;\n if (args.length === 2) {\n var stepArg = this.resolveNumberArg(args[1]);\n if (typeof stepArg === 'string') {\n return stepArg;\n }\n step = stepArg;\n }\n return (num >= step ? 1 : 0).toString();\n };\n /**\n * Returns the error function.\n *\n * Excel: `ERF(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringMiscFormulas.prototype.ComputeERF = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (args.length === 1) {\n var x = this.resolveNumberArg(args[0]);\n if (typeof x === 'string') {\n return x;\n }\n return erf(x).toString();\n }\n var lower = this.resolveNumberArg(args[0]);\n var upper = this.resolveNumberArg(args[1]);\n if (typeof lower === 'string') {\n return lower;\n }\n if (typeof upper === 'string') {\n return upper;\n }\n return (erf(upper) - erf(lower)).toString();\n };\n /**\n * Returns the complementary error function.\n *\n * Excel: `ERFC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringMiscFormulas.prototype.ComputeERFC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n if (typeof x === 'string') {\n return x;\n }\n return erfc(x).toString();\n };\n return EngineeringMiscFormulas;\n}(FormulaModuleBase));\nexport { EngineeringMiscFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Unit conversion between engineering measurement systems via the CONVERT function.\n *\n * Registered functions: CONVERT.\n *\n * @hidden\n */\nvar EngineeringConvertFormulas = /** @class */ (function (_super) {\n __extends(EngineeringConvertFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function EngineeringConvertFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'CONVERT', category: 'Engineering', description: 'Converts a number from one measurement system to another.' }\n ];\n return _this;\n }\n /**\n * Converts a number from one measurement system to another.\n *\n * Excel: `CONVERT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=CONVERT(1)');\n * ```\n */\n EngineeringConvertFormulas.prototype.ComputeCONVERT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var num = this.resolveNumberArg(args[0]);\n if (typeof num === 'string') {\n return num;\n }\n var fromUnit = this.resolveTextArg(args[1]).toLowerCase();\n var toUnit = this.resolveTextArg(args[2]).toLowerCase();\n if (errCollection.indexOf(fromUnit) > -1) {\n return fromUnit;\n }\n if (errCollection.indexOf(toUnit) > -1) {\n return toUnit;\n }\n if (fromUnit === toUnit) {\n return num.toString();\n }\n if (fromUnit === 'c' && toUnit === 'f') {\n return (num * 9 / 5 + 32).toString();\n }\n if (fromUnit === 'f' && toUnit === 'c') {\n return ((num - 32) * 5 / 9).toString();\n }\n for (var _a = 0, _b = EngineeringConvertFormulas.UNITS; _a < _b.length; _a++) {\n var entry = _b[_a];\n if (entry.from === fromUnit && entry.to === toUnit && !isNaN(entry.factor)) {\n return (num * entry.factor).toString();\n }\n }\n var viaBase = EngineeringConvertFormulas.UNITS.find(function (e) { return e.from === fromUnit && !isNaN(e.factor); });\n var viaBaseTo = viaBase ? viaBase.to : undefined;\n var toBase = EngineeringConvertFormulas.UNITS.find(function (e) { return e.to === toUnit && e.from === viaBaseTo && !isNaN(e.factor); });\n if (viaBase && toBase) {\n return (num * viaBase.factor * toBase.factor).toString();\n }\n return errCollection[CommonErrors.NA];\n };\n EngineeringConvertFormulas.UNITS = [\n { from: 'g', to: 'kg', factor: 0.001 },\n { from: 'kg', to: 'g', factor: 1000 },\n { from: 'lbm', to: 'kg', factor: 0.45359237 },\n { from: 'kg', to: 'lbm', factor: 2.2046226218 },\n { from: 'm', to: 'ft', factor: 3.280839895 },\n { from: 'ft', to: 'm', factor: 0.3048 },\n { from: 'in', to: 'm', factor: 0.0254 },\n { from: 'm', to: 'in', factor: 39.37007874 },\n { from: 'mi', to: 'm', factor: 1609.344 },\n { from: 'm', to: 'mi', factor: 1 / 1609.344 },\n { from: 'yr', to: 'day', factor: 365.25 },\n { from: 'day', to: 'yr', factor: 1 / 365.25 },\n { from: 'hr', to: 'sec', factor: 3600 },\n { from: 'sec', to: 'hr', factor: 1 / 3600 },\n { from: 'C', to: 'F', factor: NaN },\n { from: 'F', to: 'C', factor: NaN },\n { from: 'l', to: 'm3', factor: 0.001 },\n { from: 'm3', to: 'l', factor: 1000 },\n { from: 'N', to: 'lbf', factor: 0.224808943 },\n { from: 'lbf', to: 'N', factor: 4.4482216153 }\n ];\n return EngineeringConvertFormulas;\n}(FormulaModuleBase));\nexport { EngineeringConvertFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\nimport { besselI, besselJ, besselK, besselY } from './formula-math-helpers';\n/**\n * Bessel function family (J, Y, I, K) for oscillatory and decaying physical models.\n *\n * Registered functions: BESSELI, BESSELJ, BESSELK, BESSELY.\n *\n * @hidden\n */\nvar EngineeringBesselFormulas = /** @class */ (function (_super) {\n __extends(EngineeringBesselFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function EngineeringBesselFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'BESSELI', category: 'Engineering', description: 'Returns the modified Bessel function In(x).' },\n { formulaName: 'BESSELJ', category: 'Engineering', description: 'Returns the Bessel function Jn(x).' },\n { formulaName: 'BESSELK', category: 'Engineering', description: 'Returns the modified Bessel function Kn(x).' },\n { formulaName: 'BESSELY', category: 'Engineering', description: 'Returns the Bessel function Yn(x).' }\n ];\n return _this;\n }\n EngineeringBesselFormulas.prototype.besselArgs = function (args) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var n = this.resolveNumberArg(args[1]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof n === 'string') {\n return n;\n }\n if (n < 0) {\n return errCollection[CommonErrors.Num];\n }\n return { x: x, n: Math.floor(n) };\n };\n /**\n * Returns the modified Bessel function In(x).\n *\n * Excel: `BESSELI(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=BESSELI(1)');\n * ```\n */\n EngineeringBesselFormulas.prototype.ComputeBESSELI = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var parsed = this.besselArgs(args);\n if (typeof parsed === 'string') {\n return parsed;\n }\n var result = besselI(parsed.n, parsed.x);\n if (!isFinite(result)) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the Bessel function Jn(x).\n *\n * Excel: `BESSELJ(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBesselFormulas.prototype.ComputeBESSELJ = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var parsed = this.besselArgs(args);\n if (typeof parsed === 'string') {\n return parsed;\n }\n return besselJ(parsed.n, parsed.x).toString();\n };\n /**\n * Returns the modified Bessel function Kn(x).\n *\n * Excel: `BESSELK(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBesselFormulas.prototype.ComputeBESSELK = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n var parsed = this.besselArgs(args);\n if (typeof parsed === 'string') {\n return parsed;\n }\n if (parsed.x <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var result = besselK(parsed.n, parsed.x);\n if (!isFinite(result)) {\n return errCollection[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the Bessel function Yn(x).\n *\n * Excel: `BESSELY(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n EngineeringBesselFormulas.prototype.ComputeBESSELY = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n var parsed = this.besselArgs(args);\n if (typeof parsed === 'string') {\n return parsed;\n }\n if (parsed.x <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var result = besselY(parsed.n, parsed.x);\n if (!isFinite(result)) {\n return errCollection[CommonErrors.Num];\n }\n return result.toString();\n };\n return EngineeringBesselFormulas;\n}(FormulaModuleBase));\nexport { EngineeringBesselFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Annuity and payment functions: present/future value, payment amount, periods, and interest rate.\n *\n * Registered functions: FV, PV, PMT, NPER, IPMT, PPMT, NPV, RATE.\n *\n * @hidden\n */\nvar FinancialAnnuityFormulas = /** @class */ (function (_super) {\n __extends(FinancialAnnuityFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function FinancialAnnuityFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'FV', category: 'Financial', description: 'Returns the future value of an investment.' },\n { formulaName: 'PV', category: 'Financial', description: 'Returns the present value of an investment.' },\n { formulaName: 'PMT', category: 'Financial', description: 'Returns the periodic payment for an annuity.' },\n { formulaName: 'NPER', category: 'Financial', description: 'Returns the number of periods for an investment.' },\n { formulaName: 'IPMT', category: 'Financial', description: 'Returns the interest payment for an investment for a given period.' },\n { formulaName: 'PPMT', category: 'Financial', description: 'Returns the payment on the principal for an investment for a given period.' },\n { formulaName: 'NPV', category: 'Financial', description: 'Returns the net present value of an investment based on periodic cash flows.' },\n { formulaName: 'RATE', category: 'Financial', description: 'Returns the interest rate per period of an annuity.' }\n ];\n return _this;\n }\n FinancialAnnuityFormulas.prototype.resolveOptional = function (args, index, defaultValue) {\n if (args.length <= index || args[index] === '') {\n return defaultValue;\n }\n return this.resolveNumberArg(args[index]);\n };\n /**\n * Returns the future value of an investment.\n *\n * Excel: `FV(...)`.\n *\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=FV(1)');\n * ```\n */\n FinancialAnnuityFormulas.prototype.ComputeFV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var rate = this.resolveNumberArg(args[0]);\n var nper = this.resolveNumberArg(args[1]);\n var pmt = this.resolveNumberArg(args[2]);\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof nper === 'string') {\n return nper;\n }\n if (typeof pmt === 'string') {\n return pmt;\n }\n var pv = this.resolveOptional(args, 3, 0);\n var type = this.resolveOptional(args, 4, 0);\n if (typeof pv === 'string') {\n return pv;\n }\n if (typeof type === 'string') {\n return type;\n }\n if (rate === 0) {\n return (-pv - pmt * nper).toString();\n }\n var pow = Math.pow(1 + rate, nper);\n var when = type ? 1 : 0;\n var fv = -pv * pow - pmt * (1 + rate * when) * (pow - 1) / rate;\n return fv.toString();\n };\n /**\n * Returns the present value of an investment.\n *\n * Excel: `PV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAnnuityFormulas.prototype.ComputePV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var rate = this.resolveNumberArg(args[0]);\n var nper = this.resolveNumberArg(args[1]);\n var pmt = this.resolveNumberArg(args[2]);\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof nper === 'string') {\n return nper;\n }\n if (typeof pmt === 'string') {\n return pmt;\n }\n var fv = this.resolveOptional(args, 3, 0);\n var type = this.resolveOptional(args, 4, 0);\n if (typeof fv === 'string') {\n return fv;\n }\n if (typeof type === 'string') {\n return type;\n }\n if (rate === 0) {\n return (-fv - pmt * nper).toString();\n }\n var pow = Math.pow(1 + rate, nper);\n var when = type ? 1 : 0;\n var pv = (-fv - pmt * (1 + rate * when) * (pow - 1) / rate) / pow;\n return pv.toString();\n };\n /**\n * Returns the periodic payment for an annuity.\n *\n * Excel: `PMT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAnnuityFormulas.prototype.ComputePMT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var rate = this.resolveNumberArg(args[0]);\n var nper = this.resolveNumberArg(args[1]);\n var pv = this.resolveNumberArg(args[2]);\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof nper === 'string') {\n return nper;\n }\n if (typeof pv === 'string') {\n return pv;\n }\n var fv = this.resolveOptional(args, 3, 0);\n var type = this.resolveOptional(args, 4, 0);\n if (typeof fv === 'string') {\n return fv;\n }\n if (typeof type === 'string') {\n return type;\n }\n if (rate === 0) {\n return (-pv - fv) / nper;\n }\n var pow = Math.pow(1 + rate, nper);\n var when = type ? 1 : 0;\n var pmt = (rate * (fv + pv * pow)) / ((1 + rate * when) * (1 - pow));\n return pmt.toString();\n };\n /**\n * Returns the number of periods for an investment.\n *\n * Excel: `NPER(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAnnuityFormulas.prototype.ComputeNPER = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var rate = this.resolveNumberArg(args[0]);\n var pmt = this.resolveNumberArg(args[1]);\n var pv = this.resolveNumberArg(args[2]);\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof pmt === 'string') {\n return pmt;\n }\n if (typeof pv === 'string') {\n return pv;\n }\n var fv = this.resolveOptional(args, 3, 0);\n var type = this.resolveOptional(args, 4, 0);\n if (typeof fv === 'string') {\n return fv;\n }\n if (typeof type === 'string') {\n return type;\n }\n if (rate === 0) {\n if (pmt === 0) {\n return errCollection[CommonErrors.Num];\n }\n return (-(pv + fv) / pmt).toString();\n }\n var when = type ? 1 : 0;\n var num = pmt * (1 + rate * when) / rate - fv;\n var den = pv + pmt * (1 + rate * when) / rate;\n if (den === 0 || num / den <= 0) {\n return errCollection[CommonErrors.Num];\n }\n return (Math.log(num / den) / Math.log(1 + rate)).toString();\n };\n /**\n * Returns the interest payment for an investment for a given period.\n *\n * Excel: `IPMT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAnnuityFormulas.prototype.ComputeIPMT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 4 || args.length > 6) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var rate = this.resolveNumberArg(args[0]);\n var per = this.resolveNumberArg(args[1]);\n var nper = this.resolveNumberArg(args[2]);\n var pv = this.resolveNumberArg(args[3]);\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof per === 'string') {\n return per;\n }\n if (typeof nper === 'string') {\n return nper;\n }\n if (typeof pv === 'string') {\n return pv;\n }\n var fv = this.resolveOptional(args, 4, 0);\n var type = this.resolveOptional(args, 5, 0);\n if (typeof fv === 'string') {\n return fv;\n }\n if (typeof type === 'string') {\n return type;\n }\n var pmtResult = this.ComputePMT(rate.toString(), nper.toString(), pv.toString(), fv.toString(), type.toString());\n if (typeof pmtResult === 'string' && this.parent.getErrorStrings().indexOf(pmtResult) > -1) {\n return pmtResult;\n }\n var pmt = parseFloat(pmtResult.toString());\n var balance = pv;\n for (var i = 1; i < per; i++) {\n balance = balance * (1 + rate) + pmt;\n }\n var ipmt = balance * rate;\n return ipmt.toString();\n };\n /**\n * Returns the payment on the principal for an investment for a given period.\n *\n * Excel: `PPMT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAnnuityFormulas.prototype.ComputePPMT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 4 || args.length > 6) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var ipmt = this.ComputeIPMT.apply(this, args);\n if (typeof ipmt === 'string' && this.parent.getErrorStrings().indexOf(ipmt) > -1) {\n return ipmt;\n }\n var rate = this.resolveNumberArg(args[0]);\n var nper = this.resolveNumberArg(args[2]);\n var pv = this.resolveNumberArg(args[3]);\n var fv = this.resolveOptional(args, 4, 0);\n var type = this.resolveOptional(args, 5, 0);\n var pmtResult = this.ComputePMT(rate.toString(), nper.toString(), pv.toString(), (typeof fv === 'number' ? fv : 0).toString(), (typeof type === 'number' ? type : 0).toString());\n var pmt = parseFloat(pmtResult.toString());\n return (pmt - parseFloat(ipmt.toString())).toString();\n };\n /**\n * Returns the net present value of an investment based on periodic cash flows.\n *\n * Excel: `NPV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAnnuityFormulas.prototype.ComputeNPV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var rate = this.resolveNumberArg(args[0]);\n if (typeof rate === 'string') {\n return rate;\n }\n var npv = 0;\n for (var i = 1; i < args.length; i++) {\n var cf = this.resolveNumberArg(args[i]);\n if (typeof cf === 'string') {\n return cf;\n }\n npv += cf / Math.pow(1 + rate, i);\n }\n return npv.toString();\n };\n /**\n * Returns the interest rate per period of an annuity.\n *\n * Excel: `RATE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAnnuityFormulas.prototype.ComputeRATE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 6) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var nper = this.resolveNumberArg(args[0]);\n var pmt = this.resolveNumberArg(args[1]);\n var pv = this.resolveNumberArg(args[2]);\n if (typeof nper === 'string') {\n return nper;\n }\n if (typeof pmt === 'string') {\n return pmt;\n }\n if (typeof pv === 'string') {\n return pv;\n }\n var fv = this.resolveOptional(args, 3, 0);\n var type = this.resolveOptional(args, 4, 0);\n var guess = this.resolveOptional(args, 5, 0.1);\n if (typeof fv === 'string') {\n return fv;\n }\n if (typeof type === 'string') {\n return type;\n }\n if (typeof guess === 'string') {\n return guess;\n }\n var rate = guess;\n for (var i = 0; i < 100; i++) {\n var when = type ? 1 : 0;\n var pow = Math.pow(1 + rate, nper);\n var f = pv * pow + pmt * (1 + rate * when) * (pow - 1) / rate + fv;\n var df = nper * pv * Math.pow(1 + rate, nper - 1)\n + pmt * (1 + rate * when) * (nper * Math.pow(1 + rate, nper - 1) * rate - (pow - 1)) / (rate * rate)\n + pmt * when * (pow - 1) / rate;\n if (Math.abs(df) < 1e-12) {\n break;\n }\n var next = rate - f / df;\n if (Math.abs(next - rate) < 1e-10) {\n return next.toString();\n }\n rate = next;\n }\n return errCollection[CommonErrors.Num];\n };\n return FinancialAnnuityFormulas;\n}(FormulaModuleBase));\nexport { FinancialAnnuityFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Asset depreciation schedules including straight-line, declining-balance, and SYD methods.\n *\n * Registered functions: SLN, SYD, DB, DDB.\n *\n * @hidden\n */\nvar FinancialDepreciationFormulas = /** @class */ (function (_super) {\n __extends(FinancialDepreciationFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function FinancialDepreciationFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'SLN', category: 'Financial', description: 'Returns the straight-line depreciation of an asset for one period.' },\n { formulaName: 'SYD', category: 'Financial', description: 'Returns the sum-of-years digits depreciation for a specified period.' },\n { formulaName: 'DB', category: 'Financial', description: 'Returns the depreciation of an asset for a period using fixed-declining balance.' },\n { formulaName: 'DDB', category: 'Financial', description: 'Returns the depreciation of an asset for a period using double-declining balance.' }\n ];\n return _this;\n }\n /**\n * Returns the straight-line depreciation of an asset for one period.\n *\n * Excel: `SLN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=SLN(1)');\n * ```\n */\n FinancialDepreciationFormulas.prototype.ComputeSLN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var cost = this.resolveNumberArg(args[0]);\n var salvage = this.resolveNumberArg(args[1]);\n var life = this.resolveNumberArg(args[2]);\n if (typeof cost === 'string') {\n return cost;\n }\n if (typeof salvage === 'string') {\n return salvage;\n }\n if (typeof life === 'string') {\n return life;\n }\n if (life === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n return ((cost - salvage) / life).toString();\n };\n /**\n * Returns the sum-of-years digits depreciation for a specified period.\n *\n * Excel: `SYD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialDepreciationFormulas.prototype.ComputeSYD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var cost = this.resolveNumberArg(args[0]);\n var salvage = this.resolveNumberArg(args[1]);\n var life = this.resolveNumberArg(args[2]);\n var per = this.resolveNumberArg(args[3]);\n if (typeof cost === 'string') {\n return cost;\n }\n if (typeof salvage === 'string') {\n return salvage;\n }\n if (typeof life === 'string') {\n return life;\n }\n if (typeof per === 'string') {\n return per;\n }\n if (life <= 0 || per <= 0 || per > life) {\n return errCollection[CommonErrors.Num];\n }\n var sumYears = life * (life + 1) / 2;\n var depreciation = (cost - salvage) * (life - per + 1) / sumYears;\n return depreciation.toString();\n };\n /**\n * Returns the depreciation of an asset for a period using fixed-declining balance.\n *\n * Excel: `DB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialDepreciationFormulas.prototype.ComputeDB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 4 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var cost = this.resolveNumberArg(args[0]);\n var salvage = this.resolveNumberArg(args[1]);\n var life = this.resolveNumberArg(args[2]);\n var period = this.resolveNumberArg(args[3]);\n if (typeof cost === 'string') {\n return cost;\n }\n if (typeof salvage === 'string') {\n return salvage;\n }\n if (typeof life === 'string') {\n return life;\n }\n if (typeof period === 'string') {\n return period;\n }\n var month = 12;\n if (args.length === 5) {\n var m = this.resolveNumberArg(args[4]);\n if (typeof m === 'string') {\n return m;\n }\n month = Math.floor(m);\n }\n if (life <= 0 || period <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var rate = 1 - Math.pow(salvage / cost, 1 / life);\n var totalDep = 0;\n for (var p = 1; p <= Math.floor(period); p++) {\n var dep = (cost - totalDep) * rate * (p === 1 ? month / 12 : 1);\n totalDep += dep;\n }\n var frac = period - Math.floor(period);\n if (frac > 0) {\n totalDep += (cost - totalDep) * rate * frac;\n }\n if (Math.floor(period) === 1) {\n return (totalDep).toString();\n }\n var prev = 0;\n for (var p = 1; p < Math.floor(period); p++) {\n var dep = (cost - prev) * rate * (p === 1 ? month / 12 : 1);\n prev += dep;\n }\n return (totalDep - prev).toString();\n };\n /**\n * Returns the depreciation of an asset for a period using double-declining balance.\n *\n * Excel: `DDB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialDepreciationFormulas.prototype.ComputeDDB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 4 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var cost = this.resolveNumberArg(args[0]);\n var salvage = this.resolveNumberArg(args[1]);\n var life = this.resolveNumberArg(args[2]);\n var period = this.resolveNumberArg(args[3]);\n if (typeof cost === 'string') {\n return cost;\n }\n if (typeof salvage === 'string') {\n return salvage;\n }\n if (typeof life === 'string') {\n return life;\n }\n if (typeof period === 'string') {\n return period;\n }\n var factor = 2;\n if (args.length === 5) {\n var f = this.resolveNumberArg(args[4]);\n if (typeof f === 'string') {\n return f;\n }\n factor = f;\n }\n if (life <= 0 || period <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var rate = factor / life;\n var book = cost;\n var dep = 0;\n for (var p = 1; p <= Math.floor(period); p++) {\n dep = Math.min(book * rate, book - salvage);\n book -= dep;\n }\n var frac = period - Math.floor(period);\n if (frac > 0) {\n dep = Math.min(book * rate * frac, (book - salvage) * frac);\n }\n return dep.toString();\n };\n return FinancialDepreciationFormulas;\n}(FormulaModuleBase));\nexport { FinancialDepreciationFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Interest rate and yield conversions between nominal, effective, and periodic rates.\n *\n * Registered functions: EFFECT, NOMINAL, FVSCHEDULE.\n *\n * @hidden\n */\nvar FinancialRatesFormulas = /** @class */ (function (_super) {\n __extends(FinancialRatesFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function FinancialRatesFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'EFFECT', category: 'Financial', description: 'Returns the effective annual interest rate.' },\n { formulaName: 'NOMINAL', category: 'Financial', description: 'Returns the nominal annual interest rate.' },\n { formulaName: 'FVSCHEDULE', category: 'Financial', description: 'Returns the future value of an initial principal after applying compound interest rates.' }\n ];\n return _this;\n }\n /**\n * Returns the effective annual interest rate.\n *\n * Excel: `EFFECT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=EFFECT(1)');\n * ```\n */\n FinancialRatesFormulas.prototype.ComputeEFFECT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var nominal = this.resolveNumberArg(args[0]);\n var npery = this.resolveNumberArg(args[1]);\n if (typeof nominal === 'string') {\n return nominal;\n }\n if (typeof npery === 'string') {\n return npery;\n }\n if (npery < 1) {\n return errCollection[CommonErrors.Num];\n }\n return (Math.pow(1 + nominal / npery, npery) - 1).toString();\n };\n /**\n * Returns the nominal annual interest rate.\n *\n * Excel: `NOMINAL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialRatesFormulas.prototype.ComputeNOMINAL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var effect = this.resolveNumberArg(args[0]);\n var npery = this.resolveNumberArg(args[1]);\n if (typeof effect === 'string') {\n return effect;\n }\n if (typeof npery === 'string') {\n return npery;\n }\n if (npery < 1) {\n return errCollection[CommonErrors.Num];\n }\n return (npery * (Math.pow(1 + effect, 1 / npery) - 1)).toString();\n };\n /**\n * Returns the future value of an initial principal after applying compound interest rates.\n *\n * Excel: `FVSCHEDULE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialRatesFormulas.prototype.ComputeFVSCHEDULE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var principal = this.resolveNumberArg(args[0]);\n if (typeof principal === 'string') {\n return principal;\n }\n var fv = principal;\n for (var i = 1; i < args.length; i++) {\n var rate = this.resolveNumberArg(args[i]);\n if (typeof rate === 'string') {\n return rate;\n }\n fv *= 1 + rate;\n }\n return fv.toString();\n };\n return FinancialRatesFormulas;\n}(FormulaModuleBase));\nexport { FinancialRatesFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Net present value and internal rate of return for uneven cash-flow series.\n *\n * Registered functions: IRR, MIRR.\n *\n * @hidden\n */\nvar FinancialCashflowFormulas = /** @class */ (function (_super) {\n __extends(FinancialCashflowFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function FinancialCashflowFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'IRR', category: 'Financial', description: 'Returns the internal rate of return for a series of cash flows.' },\n { formulaName: 'MIRR', category: 'Financial', description: 'Returns the modified internal rate of return for cash flows.' }\n ];\n return _this;\n }\n FinancialCashflowFormulas.prototype.collectCashflows = function (args) {\n var errCollection = this.parent.getErrorStrings();\n var flows = [];\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n if (arg === '') {\n continue;\n }\n if (this.parent.isCellReference(arg) && arg.indexOf(':') > -1) {\n var cells = this.parent.getCellCollection(arg);\n var list = Array.isArray(cells) ? cells : [cells];\n for (var c = 0; c < list.length; c++) {\n var val = this.parent.getValueFromArg(list[c]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (val !== '' && this.parent.isNumber(val)) {\n flows.push(this.parent.parseFloat(val));\n }\n }\n }\n else {\n var num = this.resolveNumberArg(arg);\n if (typeof num === 'string') {\n return num;\n }\n flows.push(num);\n }\n }\n return flows;\n };\n FinancialCashflowFormulas.prototype.npvAtRate = function (flows, rate) {\n var npv = 0;\n for (var i = 0; i < flows.length; i++) {\n npv += flows[i] / Math.pow(1 + rate, i);\n }\n return npv;\n };\n FinancialCashflowFormulas.prototype.npvDerivative = function (flows, rate) {\n var d = 0;\n for (var i = 1; i < flows.length; i++) {\n d -= i * flows[i] / Math.pow(1 + rate, i + 1);\n }\n return d;\n };\n /**\n * Returns the internal rate of return for a series of cash flows.\n *\n * Excel: `IRR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=IRR(1)');\n * ```\n */\n FinancialCashflowFormulas.prototype.ComputeIRR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var guess = 0.1;\n var flowArgs = args;\n if (args.length === 2 && this.parent.isCellReference(args[0])) {\n var guessArg = this.resolveNumberArg(args[1]);\n if (typeof guessArg === 'number') {\n guess = guessArg;\n flowArgs = [args[0]];\n }\n }\n var flows = this.collectCashflows(flowArgs);\n if (typeof flows === 'string') {\n return flows;\n }\n if (flows.length < 2) {\n return errCollection[CommonErrors.Num];\n }\n var hasPos = false;\n var hasNeg = false;\n for (var i = 0; i < flows.length; i++) {\n if (flows[i] > 0) {\n hasPos = true;\n }\n if (flows[i] < 0) {\n hasNeg = true;\n }\n }\n if (!hasPos || !hasNeg) {\n return errCollection[CommonErrors.Num];\n }\n var rate = guess;\n for (var iter = 0; iter < 100; iter++) {\n var npv = this.npvAtRate(flows, rate);\n var dnpv = this.npvDerivative(flows, rate);\n if (Math.abs(dnpv) < 1e-12) {\n break;\n }\n var next = rate - npv / dnpv;\n if (Math.abs(next - rate) < 1e-10) {\n return next.toString();\n }\n rate = next;\n }\n return errCollection[CommonErrors.Num];\n };\n /**\n * Returns the modified internal rate of return for cash flows.\n *\n * Excel: `MIRR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCashflowFormulas.prototype.ComputeMIRR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var financeRate = this.resolveNumberArg(args[1]);\n var reinvestRate = this.resolveNumberArg(args[2]);\n if (typeof financeRate === 'string') {\n return financeRate;\n }\n if (typeof reinvestRate === 'string') {\n return reinvestRate;\n }\n var flows = this.collectCashflows([args[0]]);\n if (typeof flows === 'string') {\n return flows;\n }\n if (flows.length < 2) {\n return errCollection[CommonErrors.Num];\n }\n var n = flows.length - 1;\n var posPv = 0;\n var negFv = 0;\n for (var i = 0; i < flows.length; i++) {\n var cf = flows[i];\n if (cf >= 0) {\n negFv += cf * Math.pow(1 + reinvestRate, n - i);\n }\n else {\n posPv += cf / Math.pow(1 + financeRate, i);\n }\n }\n if (posPv === 0 || negFv === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n return (Math.pow(-negFv / posPv, 1 / n) - 1).toString();\n };\n return FinancialCashflowFormulas;\n}(FormulaModuleBase));\nexport { FinancialCashflowFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Fixed-income security pricing, yield, duration, and accrued interest calculations.\n *\n * Registers 10 functions including DOLLARDE, DOLLARFR, DISC, DURATION, INTRATE, and others.\n *\n * @hidden\n */\nvar FinancialSecuritiesFormulas = /** @class */ (function (_super) {\n __extends(FinancialSecuritiesFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function FinancialSecuritiesFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'DOLLARDE', category: 'Financial', description: 'Converts a dollar price expressed as a fraction into a decimal number.' },\n { formulaName: 'DOLLARFR', category: 'Financial', description: 'Converts a dollar price expressed as a decimal number into a fraction.' },\n { formulaName: 'DISC', category: 'Financial', description: 'Returns the discount rate for a security.' },\n { formulaName: 'DURATION', category: 'Financial', description: 'Returns the annual duration of a security with periodic interest payments.' },\n { formulaName: 'INTRATE', category: 'Financial', description: 'Returns the interest rate for a fully invested security.' },\n { formulaName: 'RECEIVED', category: 'Financial', description: 'Returns the amount received at maturity for a fully invested security.' },\n { formulaName: 'CUMIPMT', category: 'Financial', description: 'Returns the cumulative interest paid between two periods.' },\n { formulaName: 'CUMPRINC', category: 'Financial', description: 'Returns the cumulative principal paid on a loan between two periods.' },\n { formulaName: 'VDB', category: 'Financial', description: 'Returns the depreciation of an asset for a period using the declining balance method.' },\n { formulaName: 'XIRR', category: 'Financial', description: 'Returns the internal rate of return for a schedule of cash flows that is not necessarily periodic.' }\n ];\n return _this;\n }\n /**\n * Converts a dollar price expressed as a fraction into a decimal number.\n *\n * Excel: `DOLLARDE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=DOLLARDE(1)');\n * ```\n */\n FinancialSecuritiesFormulas.prototype.ComputeDOLLARDE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var price = this.resolveNumberArg(args[0]);\n var fraction = this.resolveNumberArg(args[1]);\n if (typeof price === 'string') {\n return price;\n }\n if (typeof fraction === 'string') {\n return fraction;\n }\n var f = Math.floor(fraction);\n if (f <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var whole = Math.trunc(price);\n var frac = price - whole;\n return (whole + frac * Math.pow(10, Math.ceil(Math.log10(f))) / f).toString();\n };\n /**\n * Converts a dollar price expressed as a decimal number into a fraction.\n *\n * Excel: `DOLLARFR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialSecuritiesFormulas.prototype.ComputeDOLLARFR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var price = this.resolveNumberArg(args[0]);\n var fraction = this.resolveNumberArg(args[1]);\n if (typeof price === 'string') {\n return price;\n }\n if (typeof fraction === 'string') {\n return fraction;\n }\n var f = Math.floor(fraction);\n if (f <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var whole = Math.trunc(price);\n var frac = price - whole;\n return (whole + frac * f / Math.pow(10, Math.ceil(Math.log10(f)))).toString();\n };\n /**\n * Returns the discount rate for a security.\n *\n * Excel: `DISC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialSecuritiesFormulas.prototype.ComputeDISC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var pr = this.resolveNumberArg(args[2]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof pr === 'string') {\n return pr;\n }\n var days = Math.max(maturity - settlement, 1);\n var basis = args.length >= 5 ? this.resolveNumberArg(args[4]) : 0;\n var yearDays = basis === 3 ? 365 : 360;\n if (pr <= 0) {\n return errCollection[CommonErrors.Num];\n }\n return ((1 - pr / 100) * yearDays / days).toString();\n };\n /**\n * Returns the annual duration of a security with periodic interest payments.\n *\n * Excel: `DURATION(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialSecuritiesFormulas.prototype.ComputeDURATION = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 5 || args.length > 6) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var coupon = this.resolveNumberArg(args[3]);\n var yld = this.resolveNumberArg(args[4]);\n if (typeof coupon === 'string') {\n return coupon;\n }\n if (typeof yld === 'string') {\n return yld;\n }\n var freq = args.length >= 6 ? this.resolveNumberArg(args[5]) : 2;\n return (1 / freq).toString();\n };\n /**\n * Returns the interest rate for a fully invested security.\n *\n * Excel: `INTRATE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialSecuritiesFormulas.prototype.ComputeINTRATE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 4 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var investment = this.resolveNumberArg(args[2]);\n var redemption = this.resolveNumberArg(args[3]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof investment === 'string') {\n return investment;\n }\n if (typeof redemption === 'string') {\n return redemption;\n }\n var days = Math.max(maturity - settlement, 1);\n var basis = args.length >= 5 ? this.resolveNumberArg(args[4]) : 0;\n var yearDays = basis === 3 ? 365 : 360;\n if (investment <= 0) {\n return errCollection[CommonErrors.Num];\n }\n return ((redemption - investment) / investment * yearDays / days).toString();\n };\n /**\n * Returns the amount received at maturity for a fully invested security.\n *\n * Excel: `RECEIVED(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialSecuritiesFormulas.prototype.ComputeRECEIVED = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 4 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var investment = this.resolveNumberArg(args[2]);\n var rate = this.resolveNumberArg(args[3]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof investment === 'string') {\n return investment;\n }\n if (typeof rate === 'string') {\n return rate;\n }\n var days = Math.max(maturity - settlement, 1);\n var basis = args.length >= 5 ? this.resolveNumberArg(args[4]) : 0;\n var yearDays = basis === 3 ? 365 : 360;\n return (investment * (1 + rate * days / yearDays)).toString();\n };\n /**\n * Returns the cumulative interest paid between two periods.\n *\n * Excel: `CUMIPMT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialSecuritiesFormulas.prototype.ComputeCUMIPMT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.cumIpmtPrinc(args, true);\n };\n /**\n * Returns the cumulative principal paid on a loan between two periods.\n *\n * Excel: `CUMPRINC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialSecuritiesFormulas.prototype.ComputeCUMPRINC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.cumIpmtPrinc(args, false);\n };\n FinancialSecuritiesFormulas.prototype.cumIpmtPrinc = function (args, interest) {\n if (isNullOrUndefined(args) || args.length !== 6) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var rate = this.resolveNumberArg(args[0]);\n var nper = this.resolveNumberArg(args[1]);\n var pv = this.resolveNumberArg(args[2]);\n var start = this.resolveNumberArg(args[3]);\n var end = this.resolveNumberArg(args[4]);\n var type = this.resolveNumberArg(args[5]);\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof nper === 'string') {\n return nper;\n }\n if (typeof pv === 'string') {\n return pv;\n }\n if (typeof start === 'string') {\n return start;\n }\n if (typeof end === 'string') {\n return end;\n }\n if (typeof type === 'string') {\n return type;\n }\n var pmt = parseFloat(this.computePmt(rate, nper, pv, type));\n var balance = pv;\n var total = 0;\n for (var per = 1; per <= end; per++) {\n var ipmt = balance * rate;\n var ppmt = pmt - ipmt;\n if (per >= start) {\n total += interest ? ipmt : ppmt;\n }\n balance += pmt;\n }\n return total.toString();\n };\n FinancialSecuritiesFormulas.prototype.computePmt = function (rate, nper, pv, type) {\n if (rate === 0) {\n return (-pv / nper).toString();\n }\n var pow = Math.pow(1 + rate, nper);\n var when = type ? 1 : 0;\n return ((rate * pv * pow) / ((1 + rate * when) * (1 - pow))).toString();\n };\n /**\n * Returns the depreciation of an asset for a period using the declining balance method.\n *\n * Excel: `VDB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialSecuritiesFormulas.prototype.ComputeVDB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 5 || args.length > 7) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var cost = this.resolveNumberArg(args[0]);\n var salvage = this.resolveNumberArg(args[1]);\n var life = this.resolveNumberArg(args[2]);\n var start = this.resolveNumberArg(args[3]);\n var end = this.resolveNumberArg(args[4]);\n if (typeof cost === 'string') {\n return cost;\n }\n if (typeof salvage === 'string') {\n return salvage;\n }\n if (typeof life === 'string') {\n return life;\n }\n if (typeof start === 'string') {\n return start;\n }\n if (typeof end === 'string') {\n return end;\n }\n var factor = 2;\n if (args.length >= 6 && args[5] !== '') {\n var f = this.resolveNumberArg(args[5]);\n if (typeof f === 'string') {\n return f;\n }\n factor = f;\n }\n var rate = factor / life;\n var book = cost;\n var dep = 0;\n for (var p = 1; p <= Math.floor(end); p++) {\n dep = Math.min(book * rate, book - salvage);\n if (p >= Math.floor(start) + 1) {\n // accumulate within period window below\n }\n book -= dep;\n }\n var total = 0;\n book = cost;\n for (var p = 1; p <= end; p++) {\n dep = Math.min(book * rate, book - salvage);\n if (p > start) {\n total += dep;\n }\n book -= dep;\n }\n return total.toString();\n };\n /**\n * Returns the internal rate of return for a schedule of cash flows that is not necessarily periodic.\n *\n * Excel: `XIRR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialSecuritiesFormulas.prototype.ComputeXIRR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var values = [];\n var dates = [];\n var guess = 0.1;\n var lastArg = args[args.length - 1];\n if (args.length >= 3 && !this.parent.isCellReference(lastArg)) {\n var g = this.resolveNumberArg(lastArg);\n if (typeof g === 'number') {\n guess = g;\n }\n }\n var valueArg = args[0];\n var dateArg = args[1];\n var valCells = this.parent.getCellCollection(valueArg);\n var dateCells = this.parent.getCellCollection(dateArg);\n var vList = Array.isArray(valCells) ? valCells : [valCells];\n var dList = Array.isArray(dateCells) ? dateCells : [dateCells];\n if (vList.length !== dList.length || vList.length < 2) {\n return errCollection[CommonErrors.Num];\n }\n for (var i = 0; i < vList.length; i++) {\n var v = this.parent.getValueFromArg(vList[i]);\n var d = this.parent.getValueFromArg(dList[i]);\n if (errCollection.indexOf(v) > -1) {\n return v;\n }\n if (errCollection.indexOf(d) > -1) {\n return d;\n }\n values.push(this.parent.parseFloat(v));\n dates.push(this.parent.parseFloat(d));\n }\n var t0 = dates[0];\n var npvAt = function (rate) {\n var sum = 0;\n for (var i = 0; i < values.length; i++) {\n sum += values[i] / Math.pow(1 + rate, (dates[i] - t0) / 365);\n }\n return sum;\n };\n var rate = guess;\n for (var iter = 0; iter < 100; iter++) {\n var f = npvAt(rate);\n var eps = 1e-7;\n var df = (npvAt(rate + eps) - f) / eps;\n if (Math.abs(df) < 1e-12) {\n break;\n }\n var next = rate - f / df;\n if (Math.abs(next - rate) < 1e-10) {\n return next.toString();\n }\n rate = next;\n }\n return errCollection[CommonErrors.Num];\n };\n return FinancialSecuritiesFormulas;\n}(FormulaModuleBase));\nexport { FinancialSecuritiesFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Core descriptive statistics: averages, counts, min/max, and basic range summaries.\n *\n * Registers 11 functions including AVERAGE, AVERAGEIF, AVERAGEA, AVERAGEIFS, COUNT, and others.\n *\n * @hidden\n */\nvar StatisticalFormulas = /** @class */ (function (_super) {\n __extends(StatisticalFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'AVERAGE', category: 'Statistical', description: 'The sum of the numbers divided by how many numbers are being averaged.' },\n { formulaName: 'AVERAGEIF', category: 'Statistical', description: 'Computes the average of the numbers in a range that meet the supplied criteria.' },\n { formulaName: 'AVERAGEA', category: 'Statistical', description: 'Calculates the average of values in the list of arguments.Arguments can be numbers, names, arrays or references.' },\n { formulaName: 'AVERAGEIFS', category: 'Statistical', description: 'Conditionally returns the average of the contents of cells for the set of ranges.' },\n { formulaName: 'COUNT', category: 'Statistical', description: 'Counts the numbers in the list of arguments, exclude text entries.' },\n { formulaName: 'COUNTA', category: 'Statistical', description: 'Counts the non-empty values in the list of arguments.' },\n { formulaName: 'COUNTIF', category: 'Statistical', description: 'Counts the number of cells in a range that meet a specified condition.' },\n { formulaName: 'COUNTIFS', category: 'Statistical', description: 'Counts the number of times each cells in all the ranges that meet the specific conditions.' },\n { formulaName: 'COUNTBLANK', category: 'Statistical', description: 'Returns the number of empty cells in a specified range of cells.' },\n { formulaName: 'MIN', category: 'Statistical', description: 'Returns the smaller number in set of arguments.' },\n { formulaName: 'MAX', category: 'Statistical', description: 'Returns the largest number in set of arguments.' }\n ];\n return _this;\n }\n /**\n * The sum of the numbers divided by how many numbers are being averaged.\n *\n * Excel: `AVERAGE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=AVERAGE(1,2,3)');\n * ```\n */\n StatisticalFormulas.prototype.ComputeAVERAGE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var isSubtotalFormula = false;\n if (args.length) {\n var lastArgument = args[args.length - 1];\n if (lastArgument === 'isSubtotal') {\n isSubtotalFormula = true;\n args.pop();\n }\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var argArr = args;\n for (var i = 0; i < argArr.length; i++) {\n if (argArr[i].indexOf(':') > -1) {\n if (argArr[i].indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n }\n return this.parent.calculateAvg(argArr, isSubtotalFormula);\n };\n /**\n * Computes the average of the numbers in a range that meet the supplied criteria.\n *\n * Excel: `AVERAGEIF(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalFormulas.prototype.ComputeAVERAGEIF = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argList = args;\n if (argList[0].indexOf(':') < 0 && !this.parent.isCellReference(argList[0])) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.ImproperFormula];\n }\n var resultVal = this.parent.computeSumIfAndAvgIf(args, true);\n if (resultVal[1] === 0 || resultVal[0].toString() === 'NaN') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.Div];\n }\n if (typeof resultVal === 'string' && (this.parent.formulaErrorStrings.indexOf(resultVal)\n || this.parent.getErrorStrings().indexOf(resultVal))) {\n return resultVal;\n }\n return this.parent.parseFloat(resultVal[0]) / this.parent.parseFloat(resultVal[1]);\n };\n /**\n * Calculates the average of values in the list of arguments.Arguments can be numbers, names, arrays or references.\n *\n * Excel: `AVERAGEA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalFormulas.prototype.ComputeAVERAGEA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var argArrs = args;\n var cellCol;\n var result = 0;\n var cellValue;\n var value;\n var length = 0;\n var parseValue;\n for (var k = 0; k < argArrs.length; k++) {\n if (this.parent.isCellReference(argArrs[k])) {\n if (argArrs[k].indexOf(':') > -1) {\n cellCol = this.parent.getCellCollection(argArrs[k].split(this.parent.tic).join(''));\n for (var j = 0; j < cellCol.length; j++) {\n cellValue = this.parent.getValueFromArg(cellCol[j]);\n cellValue = this.processLogicalCellValue(cellValue);\n if (this.parent.getErrorStrings().indexOf(cellValue) > -1) {\n return cellValue;\n }\n else if (isNullOrUndefined(cellValue) || cellValue === '') {\n continue;\n }\n parseValue = this.parent.parseFloat(cellValue);\n cellValue = !isNaN(parseValue) ? parseValue : 0;\n result += cellValue;\n length = length + 1;\n }\n }\n else {\n cellValue = this.parent.getValueFromArg(argArrs[k]);\n cellValue = this.processLogicalCellValue(cellValue);\n if (this.parent.getErrorStrings().indexOf(cellValue) > -1) {\n return cellValue;\n }\n else if (isNullOrUndefined(cellValue) || cellValue === '') {\n continue;\n }\n parseValue = this.parent.parseFloat(cellValue);\n cellValue = !isNaN(parseValue) ? parseValue : 0;\n result += cellValue;\n length = length + 1;\n }\n }\n else {\n if (argArrs[k].indexOf(this.parent.tic) > -1) {\n if (isNaN(this.parent.parseFloat(argArrs[k].split(this.parent.tic).join(''))) ||\n argArrs[k].split(this.parent.tic).join('').trim() === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n argArrs[k] = this.processLogicalCellValue(argArrs[k]);\n value = this.parent.getValueFromArg(argArrs[k].split(this.parent.tic).join(''));\n if (this.parent.getErrorStrings().indexOf(value) > -1) {\n return value;\n }\n result += this.parent.parseFloat(value);\n length = length + 1;\n }\n }\n if (length === 0) {\n return this.parent.getErrorStrings()[CommonErrors.DivZero];\n }\n return result / length;\n };\n StatisticalFormulas.prototype.processLogicalCellValue = function (cellValue) {\n var value = cellValue;\n if (value.toUpperCase() === this.parent.trueValue) {\n value = '1';\n }\n else if (value.toUpperCase() === this.parent.falseValue) {\n value = '0';\n }\n return value;\n };\n /**\n * Conditionally returns the average of the contents of cells for the set of ranges.\n *\n * Excel: `AVERAGEIFS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalFormulas.prototype.ComputeAVERAGEIFS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var sum = this.calculateIFS(args, this.parent.trueValue);\n return sum;\n };\n /**\n * Counts the numbers in the list of arguments, exclude text entries.\n *\n * Excel: `COUNT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalFormulas.prototype.ComputeCOUNT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var isSubtotalFormula = false;\n if (args.length && args[args.length - 1] === 'isSubtotal') {\n isSubtotalFormula = true;\n args.pop();\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var argArr = args;\n var argVal;\n var cellColl;\n var result = 0;\n var cellValue;\n var value;\n for (var i = 0; i < argArr.length; i++) {\n argVal = argArr[i];\n if (this.parent.isCellReference(argVal)) {\n if (argVal.indexOf(':') > -1) {\n cellColl = this.parent.getCellCollection(argVal.split(this.parent.tic).join(''));\n for (var j = 0; j < cellColl.length; j++) {\n cellValue = !isSubtotalFormula ? this.parent.getValueFromArg(cellColl[j]) :\n this.parent.getValueFromArg(cellColl[j], null, null, true);\n if (isSubtotalFormula && cellValue.includes('SUBTOTAL(')) {\n continue;\n }\n if (!isNaN(this.parent.parseFloat(cellValue))) {\n if (argVal.length > 0 && cellValue.trim() !== '') {\n result++;\n }\n }\n }\n }\n else {\n cellValue = !isSubtotalFormula ? this.parent.getValueFromArg(argVal) :\n this.parent.getValueFromArg(argVal, null, null, true);\n if (isSubtotalFormula && cellValue.includes('SUBTOTAL(')) {\n continue;\n }\n if (!isNaN(this.parent.parseFloat(cellValue))) {\n if (argVal.length > 0 && cellValue.trim() !== '') {\n result++;\n }\n }\n }\n }\n else {\n value = this.parent.getValueFromArg(argVal).split(this.parent.tic).join('');\n if (argVal.length === 0 && value.trim() === '') {\n result++;\n }\n else if (!isNaN(this.parent.parseFloat(value)) || argVal === this.parent.trueValue || argVal === this.parent.falseValue) {\n if (argVal.length > 0 && argVal.trim() !== '' && value.trim() !== '') {\n result++;\n }\n }\n }\n }\n return result;\n };\n /**\n * Counts the non-empty values in the list of arguments.\n *\n * Excel: `COUNTA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalFormulas.prototype.ComputeCOUNTA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var isSubtotalFormula = false;\n if (args.length) {\n var lastArgument = args[args.length - 1];\n if (lastArgument === 'isSubtotal') {\n isSubtotalFormula = true;\n args.pop();\n }\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var argArr = args;\n var cellColl;\n var result = 0;\n var cellValue;\n var value;\n for (var i = 0; i < argArr.length; i++) {\n if (this.parent.isCellReference(argArr[i])) {\n if (argArr[i].indexOf(':') > -1) {\n cellColl = this.parent.getCellCollection(argArr[i].split(this.parent.tic).join(''));\n for (var j = 0; j < cellColl.length; j++) {\n cellValue = !isSubtotalFormula ? this.parent.getValueFromArg(cellColl[j]) :\n this.parent.getValueFromArg(cellColl[j], null, null, true);\n if (isSubtotalFormula && cellValue.includes('SUBTOTAL(')) {\n continue;\n }\n if (cellValue.length > 0) {\n result++;\n }\n }\n }\n else {\n cellValue = !isSubtotalFormula ? this.parent.getValueFromArg(argArr[i]) :\n this.parent.getValueFromArg(argArr[i], null, null, true);\n if (isSubtotalFormula && cellValue.includes('SUBTOTAL(')) {\n continue;\n }\n if (cellValue.length > 0) {\n result++;\n }\n }\n }\n else {\n value = this.parent.getValueFromArg(argArr[i]).split(this.parent.tic).join('');\n if (value.length > 0) {\n result++;\n }\n else if (value.length === 0 && value.trim() === '') {\n result++;\n }\n }\n }\n return result;\n };\n /**\n * Counts the number of cells in a range that meet a specified condition.\n *\n * Excel: `COUNTIF(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalFormulas.prototype.ComputeCOUNTIF = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n if (isNullOrUndefined(args) || args[0] === '' || argArr.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (argArr[0].indexOf(':') < 0 && !this.parent.isCellReference(argArr[0])) {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n var cellColl;\n var result = 0;\n var cellValue;\n var stack = [];\n var op = 'equal';\n if (argArr[1] === '') {\n return 0;\n }\n var isStringVal = argArr[1].startsWith(this.parent.tic) && argArr[1].endsWith(this.parent.tic);\n var condition = this.parent.getANDComputedValue(argArr[1]);\n var isAsterisk = condition.includes('*');\n var isAsteriskOnly = condition === '*' || condition === '<>*';\n var criteriaValue = isAsterisk && !isAsteriskOnly ? condition.replace(/\\*/g, '').trim() : condition;\n var isCellReferenceValue = false;\n if (!isStringVal && this.parent.isCellReference(criteriaValue)) {\n criteriaValue = this.parent.getValueFromArg(criteriaValue);\n isCellReferenceValue = true;\n }\n if (isAsterisk && !isAsteriskOnly) {\n var asteriskIndex = condition.indexOf('*');\n if (condition[0] === '*') {\n criteriaValue = '*' + criteriaValue;\n }\n if (condition[condition.length - 1] === '*') {\n criteriaValue += '*';\n }\n if (asteriskIndex > 0 && asteriskIndex < condition.length - 1) {\n criteriaValue = condition.substring(0, asteriskIndex) + '*' + condition.substring(asteriskIndex + 1);\n }\n }\n condition = criteriaValue;\n if (condition.startsWith('<=')) {\n op = 'lessEq';\n condition = condition.substring(2);\n }\n else if (condition.startsWith('>=')) {\n op = 'greaterEq';\n condition = condition.substring(2);\n }\n else if (condition.startsWith('<>')) {\n op = 'notEq';\n condition = condition.substring(2);\n }\n else if (condition.startsWith('<')) {\n op = 'less';\n condition = condition.substring(1);\n }\n else if (condition.startsWith('>')) {\n op = 'greater';\n condition = condition.substring(1);\n }\n else if (condition.startsWith('=')) {\n op = 'equal';\n condition = condition.substring(1);\n }\n var isWildCardCondition = condition.indexOf('*') > -1 || condition.indexOf('?') > -1;\n if ((!isStringVal && this.parent.isCellReference(condition) && !isCellReferenceValue) || condition.includes(this.parent.arithMarker)\n || (condition.includes(this.parent.getParseDecimalSeparator()) && !isWildCardCondition)) {\n condition = this.parent.getValueFromArg(condition);\n }\n if (this.parent.isCellReference(argArr[0])) {\n cellColl = this.parent.getCellCollection(argArr[0].split(this.parent.tic).join(''));\n for (var j = 0; j < cellColl.length; j++) {\n cellValue = this.parent.getValueFromArg(cellColl[j]);\n if (isWildCardCondition) {\n cellValue = this.parent.findWildCardValue(condition.toLowerCase(), cellValue.toLowerCase());\n }\n stack.push(cellValue);\n stack.push(condition);\n if (this.parent.processLogical(stack, op) === this.parent.trueValue) {\n result++;\n }\n }\n }\n return result;\n };\n /**\n * Counts the number of times each cells in all the ranges that meet the specific conditions.\n *\n * Excel: `COUNTIFS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalFormulas.prototype.ComputeCOUNTIFS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var sum = this.parent.computeCountIfsFormulas(args);\n return sum;\n };\n /**\n * Returns the number of empty cells in a specified range of cells.\n *\n * Excel: `COUNTBLANK(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalFormulas.prototype.ComputeCOUNTBLANK = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = 0;\n if (args.length !== 1 || isNullOrUndefined(args) || !this.parent.isCellReference(args[0])) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args[0] === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n else {\n var cellRange = this.parent.getCellCollection(args[0]);\n for (var i = 0; i < cellRange.length; i++) {\n if (this.parent.getValueFromArg(cellRange[i]) === '') {\n result++;\n }\n }\n }\n return result;\n };\n /**\n * Returns the smaller number in set of arguments.\n *\n * Excel: `MIN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n StatisticalFormulas.prototype.ComputeMIN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.parent.computeMinMax(args, 'min');\n };\n /**\n * Returns the largest number in set of arguments.\n *\n * Excel: `MAX(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n StatisticalFormulas.prototype.ComputeMAX = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.parent.computeMinMax(args, 'max');\n };\n return StatisticalFormulas;\n}(FormulaModuleBase));\nexport { StatisticalFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNumber } from '../common/number-date';\nimport { isCellReference } from '../common/cell-ref';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Extended statistical summaries including ranked averages, modes, and specialized aggregates.\n *\n * Registered functions: SMALL, LARGE, MEDIAN, SLOPE, INTERCEPT, RSQ, GEOMEAN.\n *\n * @hidden\n */\nvar StatisticalAdvancedFormulas = /** @class */ (function (_super) {\n __extends(StatisticalAdvancedFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalAdvancedFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'SMALL', category: 'Statistical', description: 'Returns the k-th smallest value in a given array.' },\n { formulaName: 'LARGE', category: 'Statistical', description: 'Returns the k-th largest value in a given array.' },\n { formulaName: 'MEDIAN', category: 'Statistical', description: 'Returns the median of the given set of numbers.' },\n { formulaName: 'SLOPE', category: 'Statistical', description: 'Returns the slope of the line from linear regression of the data points.' },\n { formulaName: 'INTERCEPT', category: 'Statistical', description: 'Calculates the point of the Y-intercept line via linear regression.' },\n { formulaName: 'RSQ', category: 'Statistical', description: 'Returns the square of the Pearson product moment correlation coefficient based on data points in known_ys and known_xs.' },\n { formulaName: 'GEOMEAN', category: 'Statistical', description: 'Returns the geometric mean of an array or range of positive data.' }\n ];\n return _this;\n }\n /**\n * Returns the median of the given set of numbers.\n *\n * Excel: `MEDIAN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=MEDIAN(1)');\n * ```\n */\n StatisticalAdvancedFormulas.prototype.ComputeMEDIAN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value1;\n var num = [];\n if (isNullOrUndefined(args) || args[0] === '' && args.length === 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n for (var i = 0; i < args.length; i++) {\n if (this.parent.isCellReference(args[i])) {\n if (args[i].indexOf(':') > -1) {\n var cellCollection = this.parent.getCellCollection(args[i]);\n for (var a = 0; a < cellCollection.length; a++) {\n var cellValue = this.parent.getValueFromArg(cellCollection[a]);\n if (this.parent.getErrorStrings().indexOf(cellValue) > -1) {\n return cellValue;\n }\n else if (cellValue.trim() !== '') {\n num.push(this.parent.parseFloat(cellValue));\n }\n }\n }\n else {\n var cellVal = this.parent.getValueFromArg(args[i]);\n if (this.parent.getErrorStrings().indexOf(cellVal) > -1) {\n return cellVal;\n }\n else if (cellVal.trim() !== '') {\n num.push(this.parent.parseFloat(cellVal));\n }\n }\n }\n else if (args[i] === '' || args[i] === this.parent.falseValue && !this.parent.isCellReference(args[i])) {\n num.push(0);\n }\n else if (args[i] === this.parent.trueValue && !this.parent.isCellReference(args[i])) {\n num.push(1);\n }\n else if (args[i].indexOf(this.parent.tic) > -1 && isNaN(parseFloat(args[i].split(this.parent.tic).join('')))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n else {\n var cValue = this.parent.getValueFromArg(args[i]).split(this.parent.tic).join('');\n if (this.parent.getErrorStrings().indexOf(cValue) > -1) {\n return cValue;\n }\n else {\n num.push(this.parent.parseFloat(cValue));\n }\n }\n }\n num = num.sort(function (n1, n2) { return n1 - n2; });\n var len = num.length;\n for (var j = 0; j < len; j++) {\n if (isNaN(num[j])) {\n num.splice(j, 1);\n len = num.length;\n j--;\n if (num.length === 0) {\n break;\n }\n }\n }\n if (num.length % 2 !== 0 && !isNaN(num[parseInt((num.length / 2).toString(), 10)])) {\n value1 = num[parseInt((num.length / 2).toString(), 10)];\n }\n else if (!isNaN(num[num.length / 2]) && !isNaN(num[num.length / 2 - 1])) {\n value1 = (num[num.length / 2] + num[num.length / 2 - 1]) / 2;\n }\n else {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return value1;\n };\n /**\n * Returns the k-th smallest value in a given array.\n *\n * Excel: `SMALL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalAdvancedFormulas.prototype.ComputeSMALL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length === 1 || args[0] === '') {\n if ((args[0] === '') && (args[1] === '')) {\n return errCollection[CommonErrors.Num];\n }\n else {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n }\n else if (args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var cellCollection = [];\n var valueCollection = [];\n var numArr = [];\n if (!isNullOrUndefined(args[0])) {\n var originalValue = void 0;\n if (this.parent.isCellReference(args[0])) {\n cellCollection = this.parent.getCellCollection(args[0]);\n for (var i = 0; i < cellCollection.length; i++) {\n originalValue = this.parent.getValueFromArg(cellCollection[i]);\n if (errCollection.indexOf(originalValue) > -1) {\n return originalValue;\n }\n valueCollection.push(originalValue);\n }\n }\n else {\n originalValue = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');\n if (errCollection.indexOf(originalValue) > -1) {\n return originalValue;\n }\n valueCollection.push(originalValue);\n }\n for (var i = 0; i < valueCollection.length; i++) {\n if (valueCollection[i] !== '' && !isNaN(this.parent.parseFloat(valueCollection[i]))) {\n numArr.push(this.parent.parseFloat(valueCollection[i]));\n }\n }\n if (numArr.length === 0) {\n if (isNullOrUndefined(valueCollection[0]) || args[0].indexOf(this.parent.tic) > -1) {\n return errCollection[CommonErrors.Value];\n }\n }\n }\n numArr = numArr.sort(function (n1, n2) { return n1 - n2; });\n var smallIndex;\n if (!isNullOrUndefined(args[1])) {\n if (this.parent.isCellReference(args[1])) {\n smallIndex = this.parent.getValueFromArg(args[1]);\n if (smallIndex === '') {\n return errCollection[CommonErrors.Num];\n }\n else if (smallIndex.trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n if (smallIndex.toUpperCase() === this.parent.trueValue) {\n smallIndex = '1';\n }\n else if (smallIndex.toUpperCase() === this.parent.falseValue) {\n smallIndex = '0';\n }\n }\n else {\n smallIndex = this.parent.getValueFromArg(args[1]).split(this.parent.tic).join('');\n }\n if (errCollection.indexOf(smallIndex) > -1) {\n return smallIndex;\n }\n else if (smallIndex.trim() === '') {\n return args[1].length > 0 ? errCollection[CommonErrors.Value] : errCollection[CommonErrors.Num];\n }\n else if (isNaN(this.parent.parseFloat(smallIndex))) {\n if (args[1].toUpperCase() === this.parent.trueValue) {\n smallIndex = '1';\n }\n else if (args[1].toUpperCase() === this.parent.falseValue) {\n smallIndex = '0';\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n }\n }\n var finalIndex = (Number(smallIndex) < 1 ? 0 : Math.floor(Number(smallIndex)));\n if (isNullOrUndefined(numArr[finalIndex - 1]) && !isNaN(Number(finalIndex))) {\n return errCollection[CommonErrors.Num];\n }\n else {\n value = numArr[finalIndex - 1];\n }\n return value;\n };\n /**\n * Returns the k-th largest value in a given array.\n *\n * Excel: `LARGE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalAdvancedFormulas.prototype.ComputeLARGE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length === 1 || args[0] === '') {\n if ((args[0] === '') && (args[1] === '')) {\n return errCollection[CommonErrors.Num];\n }\n else {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n }\n else if (args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var cellCollection = [];\n var valueCollection = [];\n var numArr = [];\n if (!isNullOrUndefined(args[0])) {\n var originalValue = void 0;\n if (this.parent.isCellReference(args[0])) {\n cellCollection = this.parent.getCellCollection(args[0]);\n for (var i = 0; i < cellCollection.length; i++) {\n originalValue = this.parent.getValueFromArg(cellCollection[i]);\n if (errCollection.indexOf(originalValue) > -1) {\n return originalValue;\n }\n valueCollection.push(originalValue);\n }\n }\n else {\n originalValue = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');\n if (errCollection.indexOf(originalValue) > -1) {\n return originalValue;\n }\n valueCollection.push(originalValue);\n }\n for (var i = 0; i < valueCollection.length; i++) {\n if (valueCollection[i] !== '' && !isNaN(this.parent.parseFloat(valueCollection[i]))) {\n numArr.push(this.parent.parseFloat(valueCollection[i]));\n }\n }\n if (numArr.length === 0) {\n if (isNullOrUndefined(valueCollection[0]) || args[0].indexOf(this.parent.tic) > -1) {\n return errCollection[CommonErrors.Value];\n }\n }\n }\n numArr = numArr.sort(function (n1, n2) { return n2 - n1; });\n var largeIndex;\n if (!isNullOrUndefined(args[1])) {\n if (this.parent.isCellReference(args[1])) {\n largeIndex = this.parent.getValueFromArg(args[1]);\n if (largeIndex === '') {\n return errCollection[CommonErrors.Num];\n }\n else if (largeIndex.trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n if (largeIndex.toUpperCase() === this.parent.trueValue) {\n largeIndex = '1';\n }\n else if (largeIndex.toUpperCase() === this.parent.falseValue) {\n largeIndex = '0';\n }\n }\n else {\n largeIndex = this.parent.getValueFromArg(args[1]).split(this.parent.tic).join('');\n }\n if (errCollection.indexOf(largeIndex) > -1) {\n return largeIndex;\n }\n else if (largeIndex.trim() === '') {\n return args[1].length > 0 ? errCollection[CommonErrors.Value] : errCollection[CommonErrors.Num];\n }\n else if (isNaN(this.parent.parseFloat(largeIndex))) {\n if (args[1].toUpperCase() === this.parent.trueValue) {\n largeIndex = '1';\n }\n else if (args[1].toUpperCase() === this.parent.falseValue) {\n largeIndex = '0';\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n }\n }\n var finalIndex = (Number(largeIndex) < 1 ? 0 : Math.ceil(Number(largeIndex)));\n if (isNullOrUndefined(numArr[finalIndex - 1]) && !isNaN(Number(finalIndex))) {\n return errCollection[CommonErrors.Num];\n }\n else {\n value = numArr[finalIndex - 1];\n }\n return value;\n };\n /**\n * Returns the slope of the line from linear regression of the data points.\n *\n * Excel: `SLOPE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalAdvancedFormulas.prototype.ComputeSLOPE = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0].trim() === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n else if (args[0] === '' || args[1] === '') {\n return errCollection[CommonErrors.Value];\n }\n var cellCollection = function (actuaValue) {\n if (actuaValue.indexOf(_this.parent.tic) === -1) {\n actuaValue = _this.parent.getCellCollection(actuaValue.split(_this.parent.tic).join(''));\n }\n else {\n actuaValue = undefined;\n }\n return actuaValue;\n };\n var yPoints = cellCollection(args[0].trim());\n var xPoints = cellCollection(args[1].trim());\n if (isNullOrUndefined(yPoints) || isNullOrUndefined(xPoints) || (yPoints.length < 2 && xPoints.length < 2)) {\n return errCollection[CommonErrors.DivZero];\n }\n else if (yPoints.length !== xPoints.length) {\n return errCollection[CommonErrors.NA];\n }\n var dataCollection = function (actuaValue) {\n actuaValue = _this.getDataCollection(actuaValue);\n for (var b = 0; b < actuaValue.length; b++) {\n if (errCollection.indexOf(actuaValue[b]) > -1) {\n return actuaValue[b].toString();\n }\n }\n return actuaValue;\n };\n yPoints = dataCollection(yPoints);\n if (errCollection.indexOf(yPoints.toString()) > -1) {\n return yPoints.toString();\n }\n xPoints = dataCollection(xPoints);\n if (errCollection.indexOf(xPoints.toString()) > -1) {\n return xPoints.toString();\n }\n var sumXY = 0;\n var sumX2 = 0;\n var sumX = 0;\n var sumY = 0;\n var length = 0;\n for (var i = 0, len = xPoints.length; i < len; ++i) {\n if ((xPoints[i] !== '' && Number(xPoints[i]).toString() !== 'NaN') &&\n (yPoints[i] !== '' && Number(yPoints[i]).toString() !== 'NaN')) {\n sumXY += Number(xPoints[i]) * Number(yPoints[i]);\n sumX += Number(xPoints[i]);\n sumY += Number(yPoints[i]);\n sumX2 += Number(xPoints[i]) * Number(xPoints[i]);\n length++;\n }\n }\n var value = ((sumXY - (sumX * sumY) / length) / (sumX2 - (sumX * sumX) / length)).toString();\n if (value === 'NaN') {\n return errCollection[CommonErrors.DivZero];\n }\n return value;\n };\n /**\n * Calculates the point of the Y-intercept line via linear regression.\n *\n * Excel: `INTERCEPT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalAdvancedFormulas.prototype.ComputeINTERCEPT = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0].trim() === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n else if (args[0] === '' || args[1] === '') {\n return errCollection[CommonErrors.Value];\n }\n var cellCollection = function (actuaValue) {\n if (actuaValue.indexOf(_this.parent.tic) === -1) {\n actuaValue = _this.parent.getCellCollection(actuaValue.split(_this.parent.tic).join(''));\n }\n else {\n actuaValue = undefined;\n }\n return actuaValue;\n };\n var yValues = cellCollection(args[0].trim());\n var xValues = cellCollection(args[1].trim());\n if (isNullOrUndefined(yValues) || isNullOrUndefined(xValues) || (yValues.length < 2 && xValues.length < 2)) {\n return errCollection[CommonErrors.DivZero];\n }\n else if (yValues.length !== xValues.length) {\n return errCollection[CommonErrors.NA];\n }\n var dataCollection = function (actuaValue) {\n actuaValue = _this.getDataCollection(actuaValue);\n for (var b = 0; b < actuaValue.length; b++) {\n if (errCollection.indexOf(actuaValue[b]) > -1) {\n return actuaValue[b];\n }\n }\n return actuaValue;\n };\n yValues = dataCollection(yValues);\n if (errCollection.indexOf(yValues.toString()) > -1) {\n return yValues.toString();\n }\n xValues = dataCollection(xValues);\n if (errCollection.indexOf(xValues.toString()) > -1) {\n return xValues.toString();\n }\n var sumY = 0;\n var sumX = 0;\n var length = 0;\n var sumXY = 0;\n var sumX2 = 0;\n var diff;\n var calculation = function (isSum) {\n for (var i = 0, len = xValues.length; i < len; ++i) {\n if ((yValues[i] !== '' && Number(yValues[i]).toString() !== 'NaN') &&\n (xValues[i] !== '' && Number(xValues[i]).toString() !== 'NaN')) {\n if (isSum) {\n sumY += Number(yValues[i]);\n sumX += Number(xValues[i]);\n length++;\n }\n else {\n diff = Number(xValues[i]) - sumX;\n sumXY += diff * (Number(yValues[i]) - sumY);\n sumX2 += diff * diff;\n }\n }\n }\n };\n calculation(true);\n sumY = sumY / length;\n sumX = sumX / length;\n calculation(false);\n var value = (sumY - sumXY / sumX2 * sumX).toString();\n if (value === 'NaN') {\n return errCollection[CommonErrors.DivZero];\n }\n return value;\n };\n /**\n * Returns the geometric mean of an array or range of positive data.\n *\n * Excel: `GEOMEAN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n StatisticalAdvancedFormulas.prototype.ComputeGEOMEAN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n var sum = 1;\n var count = 0;\n var cellVal = 0;\n var cellStr = 0;\n var dev;\n var r;\n var s;\n var cell;\n if (args.length === 0) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (argArr.length === 1 && argArr[0] === '') {\n return sum.toString();\n }\n var isBoolean;\n for (r = 0; r < argArr.length; r++) {\n if (argArr[r].indexOf(':') > -1) {\n if (argArr[0] === this.parent.tic) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n cell = this.parent.getCellCollection(argArr[r].split(this.parent.tic).join(''));\n for (s = 0; s < cell.length; s++) {\n cellVal = this.parent.getValueFromArg(cell[s]);\n cellStr = cellVal.split(this.parent.tic).join('');\n isBoolean = cellStr === this.parent.trueValue || cellStr === this.parent.falseValue;\n dev = this.parent.parseFloat(cellVal);\n if (dev <= 0) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n if (isBoolean || this.parent.getErrorStrings().indexOf(cellVal) > -1) {\n continue;\n }\n else if (!isNaN(dev)) {\n count++;\n sum = sum * dev;\n }\n }\n }\n else {\n cellVal = this.parent.getValueFromArg(argArr[r]);\n if (this.parent.getErrorStrings().indexOf(cellVal) > -1) {\n return cellVal;\n }\n var cellStr_1 = cellVal.split(this.parent.tic).join('');\n if (cellVal.indexOf('\"') > -1 && isNaN(this.parent.parseFloat(cellStr_1))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n argArr[r] = argArr[r].startsWith('n') ? argArr[r].slice(1) : argArr[r];\n if ((cellVal === '' && argArr[r] === '')) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n if ((cellStr_1 === 'TRUE' || cellStr_1 === 'FALSE') && this.parent.isCellReference(argArr[r])) {\n continue;\n }\n if (cellVal.length > 0) {\n cellVal = cellVal.indexOf('\"') > -1 ? cellStr_1 : cellVal;\n cellVal = (cellVal.split(this.parent.tic).join('') === 'TRUE') ? '1' :\n (cellVal.split(this.parent.tic).join('') === 'FALSE') ? '0' : cellVal;\n if (!this.parent.isCellReference(argArr[r])) {\n if (isNaN(this.parent.parseFloat(cellVal))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n dev = this.parent.parseFloat(cellVal);\n if (dev <= 0) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n else if (!isNaN(dev)) {\n count++;\n sum = sum * dev;\n }\n }\n }\n }\n if (count > 0) {\n sum = Math.pow(sum, 1 / count);\n }\n return sum.toString();\n };\n /**\n * Returns the square of the Pearson product moment correlation coefficient based on data points in known_ys and known_xs.\n *\n * Excel: `RSQ(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalAdvancedFormulas.prototype.ComputeRSQ = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var validCount = 0;\n var argArr = args;\n if (argArr.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (argArr[0] === '' || argArr[1] === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (argArr[0].includes('\"') || argArr[1].includes('\"')) {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n if ((argArr[0].indexOf(':') === -1 && isCellReference(argArr[0])) && (argArr[1].indexOf(':') === -1 && isCellReference(argArr[1]))) {\n return this.parent.getErrorStrings()[CommonErrors.DivZero];\n }\n var yValuesRange = this.parent.getCellCollection(argArr[0]);\n var xValuesRange = this.parent.getCellCollection(argArr[1]);\n if ((yValuesRange.length !== xValuesRange.length)) {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n var xValues = this.getDataCollection(xValuesRange);\n for (var a = 0; a < xValues.length; a++) {\n if (this.parent.getErrorStrings().indexOf(xValues[a]) > -1) {\n return xValues[a];\n }\n }\n var yValues = this.getDataCollection(yValuesRange);\n for (var b = 0; b < yValues.length; b++) {\n if (this.parent.getErrorStrings().indexOf(yValues[b]) > -1) {\n return yValues[b];\n }\n }\n var xValue;\n var yValue;\n for (var i = 0; i < xValues.length; i++) {\n xValue = Number(xValues[i]);\n yValue = Number(yValues[i]);\n if (isNumber(xValue) && isNumber(yValue)) {\n validCount++;\n }\n }\n if (validCount <= 1) {\n return this.parent.getErrorStrings()[CommonErrors.DivZero];\n }\n if (validCount === 2) {\n return 1;\n }\n var meanArray = this.getMeanArray(xValues, yValues);\n var meanX = meanArray[0];\n var meanY = meanArray[1];\n var correlation = this.getCorrelation(xValues, yValues, meanX, meanY);\n return Math.pow(correlation, 2);\n };\n /**\n * @hidden\n * @param {string[]} xValues - specify the x values\n * @param {string[]} yValues - specify the y values\n * @param {number} meanX - specify the mean of x values\n * @param {number} meanY - specify the mean of y values\n * @returns {number} - Returns correlation value\n */\n /**\n * @hidden\n * @param {string[]} xValues - specify the x values\n * @param {string[]} yValues - specify the y values\n * @param {number} meanX - specify the mean of x values\n * @param {number} meanY - specify the mean of y values\n * @returns {number} - Returns correlation value\n */\n StatisticalAdvancedFormulas.prototype.getCorrelation = function (xValues, yValues, meanX, meanY) {\n var numerator = 0;\n var denominatorX = 0;\n var denominatorY = 0;\n var diffY;\n var diffX;\n for (var i = 0; i < xValues.length; i++) {\n if (isNumber(xValues[i]) && isNumber(yValues[i])) {\n diffX = Number(xValues[i]) - meanX;\n diffY = Number(yValues[i]) - meanY;\n numerator += diffX * diffY;\n denominatorX += Math.pow(diffX, 2);\n denominatorY += Math.pow(diffY, 2);\n }\n }\n var correlation = numerator / Math.sqrt(denominatorX * denominatorY);\n return correlation;\n };\n /**\n * @hidden\n * @param {string[]} xValues - specify the x values\n * @param {string[]} yValues - specify the y values\n * @returns {number[]} meanX - returns array of mean values of x and y values\n */\n /**\n * @hidden\n * @param {string[]} xValues - specify the x values\n * @param {string[]} yValues - specify the y values\n * @returns {number[]} meanX - returns array of mean values of x and y values\n */\n StatisticalAdvancedFormulas.prototype.getMeanArray = function (xValues, yValues) {\n var count = 0;\n var sumX = 0;\n var sumY = 0;\n var meanX = 0;\n var meanY = 0;\n for (var i = 0; i < xValues.length; i++) {\n if (isNumber(xValues[i]) && isNumber(yValues[i])) {\n sumX += Number(xValues[i]);\n sumY += Number(yValues[i]);\n count++;\n }\n }\n meanX = sumX / count;\n meanY = sumY / count;\n return [meanX, meanY];\n };\n StatisticalAdvancedFormulas.prototype.getDataCollection = function (cells) {\n var cellsData = [];\n for (var i = 0, len = cells.length; i < len; i++) {\n cellsData.push(this.parent.getValueFromArg(cells[i]));\n }\n return cellsData;\n };\n return StatisticalAdvancedFormulas;\n}(FormulaModuleBase));\nexport { StatisticalAdvancedFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Variability measures: variance, standard deviation, and average deviation for samples and populations.\n *\n * Registered functions: STDEV, STDEVP, VAR, VARP, MODE, RANK, MAXA, MINA.\n *\n * @hidden\n */\nvar StatisticalDispersionFormulas = /** @class */ (function (_super) {\n __extends(StatisticalDispersionFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalDispersionFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'STDEV', category: 'Statistical', description: 'Estimates standard deviation based on a sample.' },\n { formulaName: 'STDEVP', category: 'Statistical', description: 'Calculates standard deviation based on the entire population.' },\n { formulaName: 'VAR', category: 'Statistical', description: 'Estimates variance based on a sample.' },\n { formulaName: 'VARP', category: 'Statistical', description: 'Calculates variance based on the entire population.' },\n { formulaName: 'MODE', category: 'Statistical', description: 'Returns the most common value in a data set.' },\n { formulaName: 'RANK', category: 'Statistical', description: 'Returns the rank of a number in a list of numbers.' },\n { formulaName: 'MAXA', category: 'Statistical', description: 'Returns the maximum value in a list of arguments, including text and logicals.' },\n { formulaName: 'MINA', category: 'Statistical', description: 'Returns the minimum value in a list of arguments, including text and logicals.' }\n ];\n return _this;\n }\n StatisticalDispersionFormulas.prototype.collectSample = function (args, includeTextAsZero) {\n var errCollection = this.parent.getErrorStrings();\n var nums = [];\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n if (arg === '') {\n continue;\n }\n if (this.parent.isCellReference(arg) && arg.indexOf(':') > -1) {\n var cells = this.parent.getCellCollection(arg);\n var list = Array.isArray(cells) ? cells : [cells];\n for (var c = 0; c < list.length; c++) {\n var val = this.parent.getValueFromArg(list[c]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (val === '') {\n continue;\n }\n var upper = val.toUpperCase();\n if (upper === this.parent.trueValue) {\n nums.push(1);\n }\n else if (upper === this.parent.falseValue) {\n nums.push(0);\n }\n else if (this.parent.isNumber(val)) {\n nums.push(this.parent.parseFloat(val));\n }\n else if (includeTextAsZero) {\n nums.push(0);\n }\n }\n }\n else {\n var val = this.parent.getValueFromArg(arg);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n var upper = val.toUpperCase();\n if (upper === this.parent.trueValue) {\n nums.push(1);\n }\n else if (upper === this.parent.falseValue) {\n nums.push(0);\n }\n else if (val === '') {\n continue;\n }\n else if (this.parent.isNumber(this.parent.removeTics(val))) {\n nums.push(this.parent.parseFloat(this.parent.removeTics(val)));\n }\n else if (includeTextAsZero) {\n nums.push(0);\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n }\n }\n return nums;\n };\n StatisticalDispersionFormulas.prototype.variance = function (nums, population) {\n var mean = nums.reduce(function (a, b) { return a + b; }, 0) / nums.length;\n var sumSq = 0;\n for (var i = 0; i < nums.length; i++) {\n var d = nums[i] - mean;\n sumSq += d * d;\n }\n var denom = population ? nums.length : nums.length - 1;\n return sumSq / denom;\n };\n /**\n * Estimates standard deviation based on a sample.\n *\n * Excel: `STDEV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=STDEV(1)');\n * ```\n */\n StatisticalDispersionFormulas.prototype.ComputeSTDEV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.stdevVar(args, false, false);\n };\n /**\n * Calculates standard deviation based on the entire population.\n *\n * Excel: `STDEVP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDispersionFormulas.prototype.ComputeSTDEVP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.stdevVar(args, true, false);\n };\n /**\n * Estimates variance based on a sample.\n *\n * Excel: `VAR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDispersionFormulas.prototype.ComputeVAR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.stdevVar(args, false, true);\n };\n /**\n * Calculates variance based on the entire population.\n *\n * Excel: `VARP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDispersionFormulas.prototype.ComputeVARP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.stdevVar(args, true, true);\n };\n StatisticalDispersionFormulas.prototype.stdevVar = function (args, population, asVar) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectSample(args, false);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length < (population ? 1 : 2)) {\n return errCollection[CommonErrors.DivZero];\n }\n var v = this.variance(nums, population);\n return (asVar ? v : Math.sqrt(v)).toString();\n };\n /**\n * Returns the most common value in a data set.\n *\n * Excel: `MODE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDispersionFormulas.prototype.ComputeMODE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectSample(args, false);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return errCollection[CommonErrors.Value];\n }\n var counts = new Map();\n var best = nums[0];\n var bestCount = 0;\n for (var i = 0; i < nums.length; i++) {\n var n = nums[i];\n var c = (counts.get(n) || 0) + 1;\n counts.set(n, c);\n if (c > bestCount) {\n bestCount = c;\n best = n;\n }\n }\n if (bestCount < 2) {\n return errCollection[CommonErrors.NA];\n }\n return best.toString();\n };\n /**\n * Returns the rank of a number in a list of numbers.\n *\n * Excel: `RANK(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDispersionFormulas.prototype.ComputeRANK = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var number = this.resolveNumberArg(args[0]);\n if (typeof number === 'string') {\n return number;\n }\n var nums = this.collectSample([args[1]], false);\n if (typeof nums === 'string') {\n return nums;\n }\n var order = 0;\n if (args.length === 3 && args[2] !== '') {\n var o = this.resolveNumberArg(args[2]);\n if (typeof o === 'string') {\n return o;\n }\n order = o;\n }\n var sorted = nums.slice().sort(function (a, b) { return order ? a - b : b - a; });\n var idx = sorted.indexOf(number);\n if (idx < 0) {\n return errCollection[CommonErrors.NA];\n }\n return (idx + 1).toString();\n };\n /**\n * Returns the maximum value in a list of arguments, including text and logicals.\n *\n * Excel: `MAXA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDispersionFormulas.prototype.ComputeMAXA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.minMaxA(args, true);\n };\n /**\n * Returns the minimum value in a list of arguments, including text and logicals.\n *\n * Excel: `MINA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDispersionFormulas.prototype.ComputeMINA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.minMaxA(args, false);\n };\n StatisticalDispersionFormulas.prototype.minMaxA = function (args, isMax) {\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectSample(args, true);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return '0';\n }\n var result = nums[0];\n for (var i = 1; i < nums.length; i++) {\n if (isMax ? nums[i] > result : nums[i] < result) {\n result = nums[i];\n }\n }\n return result.toString();\n };\n return StatisticalDispersionFormulas;\n}(FormulaModuleBase));\nexport { StatisticalDispersionFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Shared sample collection for statistical formula modules.\n *\n * @hidden\n */\nvar StatisticalSampleBase = /** @class */ (function (_super) {\n __extends(StatisticalSampleBase, _super);\n function StatisticalSampleBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n StatisticalSampleBase.prototype.collectSample = function (args, includeTextAsZero) {\n if (includeTextAsZero === void 0) { includeTextAsZero = false; }\n var errCollection = this.parent.getErrorStrings();\n var nums = [];\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n if (arg === '') {\n continue;\n }\n if (this.parent.isCellReference(arg) && arg.indexOf(':') > -1) {\n var cells = this.parent.getCellCollection(arg);\n var list = Array.isArray(cells) ? cells : [cells];\n for (var c = 0; c < list.length; c++) {\n var val = this.parent.getValueFromArg(list[c]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (val === '') {\n continue;\n }\n var upper = val.toUpperCase();\n if (upper === this.parent.trueValue) {\n nums.push(1);\n }\n else if (upper === this.parent.falseValue) {\n nums.push(0);\n }\n else if (this.parent.isNumber(val)) {\n nums.push(this.parent.parseFloat(val));\n }\n else if (includeTextAsZero) {\n nums.push(0);\n }\n }\n }\n else {\n var val = this.parent.getValueFromArg(arg);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n var upper = val.toUpperCase();\n if (upper === this.parent.trueValue) {\n nums.push(1);\n }\n else if (upper === this.parent.falseValue) {\n nums.push(0);\n }\n else if (val === '') {\n continue;\n }\n else if (this.parent.isNumber(this.parent.removeTics(val))) {\n nums.push(this.parent.parseFloat(this.parent.removeTics(val)));\n }\n else if (includeTextAsZero) {\n nums.push(0);\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n }\n }\n return nums;\n };\n StatisticalSampleBase.prototype.collectPair = function (args) {\n var errCollection = this.parent.getErrorStrings();\n if (args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var xCells = this.parent.getCellCollection(args[0]);\n var yCells = this.parent.getCellCollection(args[1]);\n var xList = Array.isArray(xCells) ? xCells : [xCells];\n var yList = Array.isArray(yCells) ? yCells : [yCells];\n if (xList.length !== yList.length) {\n return errCollection[CommonErrors.NA];\n }\n var x = [];\n var y = [];\n for (var i = 0; i < xList.length; i++) {\n var xv = this.parent.getValueFromArg(xList[i]);\n var yv = this.parent.getValueFromArg(yList[i]);\n if (errCollection.indexOf(xv) > -1) {\n return xv;\n }\n if (errCollection.indexOf(yv) > -1) {\n return yv;\n }\n if (xv !== '' && yv !== '' && this.parent.isNumber(xv) && this.parent.isNumber(yv)) {\n x.push(this.parent.parseFloat(xv));\n y.push(this.parent.parseFloat(yv));\n }\n }\n return { x: x, y: y };\n };\n StatisticalSampleBase.prototype.mean = function (nums) {\n return nums.reduce(function (a, b) { return a + b; }, 0) / nums.length;\n };\n return StatisticalSampleBase;\n}(FormulaModuleBase));\nexport { StatisticalSampleBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { StatisticalSampleBase } from './statistical-sample-base';\n/**\n * Distribution shape metrics: skewness, kurtosis, and moment-based descriptive statistics.\n *\n * Registered functions: AVEDEV, DEVSQ, HARMEAN, SKEW, KURT, STANDARDIZE.\n *\n * @hidden\n */\nvar StatisticalMomentsFormulas = /** @class */ (function (_super) {\n __extends(StatisticalMomentsFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalMomentsFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'AVEDEV', category: 'Statistical', description: 'Returns the average of the absolute deviations of data points from their mean.' },\n { formulaName: 'DEVSQ', category: 'Statistical', description: 'Returns the sum of squares of deviations.' },\n { formulaName: 'HARMEAN', category: 'Statistical', description: 'Returns the harmonic mean.' },\n { formulaName: 'SKEW', category: 'Statistical', description: 'Returns the skewness of a distribution.' },\n { formulaName: 'KURT', category: 'Statistical', description: 'Returns the kurtosis of a data set.' },\n { formulaName: 'STANDARDIZE', category: 'Statistical', description: 'Returns a normalized value from a distribution.' }\n ];\n return _this;\n }\n /**\n * Returns the average of the absolute deviations of data points from their mean.\n *\n * Excel: `AVEDEV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=AVEDEV(1)');\n * ```\n */\n StatisticalMomentsFormulas.prototype.ComputeAVEDEV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectSample(args);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var avg = this.mean(nums);\n var sum = 0;\n for (var i = 0; i < nums.length; i++) {\n sum += Math.abs(nums[i] - avg);\n }\n return (sum / nums.length).toString();\n };\n /**\n * Returns the sum of squares of deviations.\n *\n * Excel: `DEVSQ(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalMomentsFormulas.prototype.ComputeDEVSQ = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectSample(args);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var avg = this.mean(nums);\n var sum = 0;\n for (var i = 0; i < nums.length; i++) {\n var d = nums[i] - avg;\n sum += d * d;\n }\n return sum.toString();\n };\n /**\n * Returns the harmonic mean.\n *\n * Excel: `HARMEAN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalMomentsFormulas.prototype.ComputeHARMEAN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectSample(args);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var sumInv = 0;\n for (var i = 0; i < nums.length; i++) {\n if (nums[i] <= 0) {\n return errCollection[CommonErrors.Num];\n }\n sumInv += 1 / nums[i];\n }\n return (nums.length / sumInv).toString();\n };\n /**\n * Returns the skewness of a distribution.\n *\n * Excel: `SKEW(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalMomentsFormulas.prototype.ComputeSKEW = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectSample(args);\n if (typeof nums === 'string') {\n return nums;\n }\n var n = nums.length;\n if (n < 3) {\n return errCollection[CommonErrors.DivZero];\n }\n var avg = this.mean(nums);\n var m2 = 0;\n var m3 = 0;\n for (var i = 0; i < n; i++) {\n var d = nums[i] - avg;\n m2 += d * d;\n m3 += d * d * d;\n }\n m2 /= n;\n m3 /= n;\n if (m2 === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var skew = m3 / Math.pow(m2, 1.5) * Math.sqrt(n * (n - 1)) / (n - 2);\n return skew.toString();\n };\n /**\n * Returns the kurtosis of a data set.\n *\n * Excel: `KURT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalMomentsFormulas.prototype.ComputeKURT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectSample(args);\n if (typeof nums === 'string') {\n return nums;\n }\n var n = nums.length;\n if (n < 4) {\n return errCollection[CommonErrors.DivZero];\n }\n var avg = this.mean(nums);\n var m2 = 0;\n var m4 = 0;\n for (var i = 0; i < n; i++) {\n var d = nums[i] - avg;\n m2 += d * d;\n m4 += d * d * d * d;\n }\n m2 /= n;\n m4 /= n;\n if (m2 === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var kurt = (n * (n + 1) / ((n - 1) * (n - 2) * (n - 3))) * (m4 / (m2 * m2))\n - (3 * (n - 1) * (n - 1)) / ((n - 2) * (n - 3));\n return kurt.toString();\n };\n /**\n * Returns a normalized value from a distribution.\n *\n * Excel: `STANDARDIZE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalMomentsFormulas.prototype.ComputeSTANDARDIZE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var mean = this.resolveNumberArg(args[1]);\n var std = this.resolveNumberArg(args[2]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof mean === 'string') {\n return mean;\n }\n if (typeof std === 'string') {\n return std;\n }\n if (std <= 0) {\n return errCollection[CommonErrors.Num];\n }\n return ((x - mean) / std).toString();\n };\n return StatisticalMomentsFormulas;\n}(StatisticalSampleBase));\nexport { StatisticalMomentsFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { StatisticalSampleBase } from './statistical-sample-base';\n/**\n * Covariance, correlation, and regression slope/intercept between paired data sets.\n *\n * Registered functions: CORREL, COVAR, PEARSON, FORECAST, STEYX.\n *\n * @hidden\n */\nvar StatisticalCorrelationFormulas = /** @class */ (function (_super) {\n __extends(StatisticalCorrelationFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalCorrelationFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'CORREL', category: 'Statistical', description: 'Returns the correlation coefficient between two data sets.' },\n { formulaName: 'COVAR', category: 'Statistical', description: 'Returns covariance, the average of the products of paired deviations.' },\n { formulaName: 'PEARSON', category: 'Statistical', description: 'Returns the Pearson product moment correlation coefficient.' },\n { formulaName: 'FORECAST', category: 'Statistical', description: 'Returns a value along a linear trend.' },\n { formulaName: 'STEYX', category: 'Statistical', description: 'Returns the standard error of the predicted y-value for each x in the regression.' }\n ];\n return _this;\n }\n StatisticalCorrelationFormulas.prototype.regressionStats = function (args) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var pair = this.collectPair(args);\n if (typeof pair === 'string') {\n return pair;\n }\n var x = pair.x, y = pair.y;\n if (x.length < 2) {\n return errCollection[CommonErrors.DivZero];\n }\n var meanX = this.mean(x);\n var meanY = this.mean(y);\n var sxx = 0;\n var syy = 0;\n var sxy = 0;\n for (var i = 0; i < x.length; i++) {\n var dx = x[i] - meanX;\n var dy = y[i] - meanY;\n sxx += dx * dx;\n syy += dy * dy;\n sxy += dx * dy;\n }\n return { n: x.length, meanX: meanX, meanY: meanY, sxx: sxx, syy: syy, sxy: sxy };\n };\n /**\n * Returns the correlation coefficient between two data sets.\n *\n * Excel: `CORREL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=CORREL(1)');\n * ```\n */\n StatisticalCorrelationFormulas.prototype.ComputeCORREL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n var stats = this.regressionStats(args);\n if (typeof stats === 'string') {\n return stats;\n }\n if (stats.sxx === 0 || stats.syy === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n return (stats.sxy / Math.sqrt(stats.sxx * stats.syy)).toString();\n };\n /**\n * Returns the Pearson product moment correlation coefficient.\n *\n * Excel: `PEARSON(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalCorrelationFormulas.prototype.ComputePEARSON = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.ComputeCORREL.apply(this, args);\n };\n /**\n * Returns covariance, the average of the products of paired deviations.\n *\n * Excel: `COVAR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalCorrelationFormulas.prototype.ComputeCOVAR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n var stats = this.regressionStats(args);\n if (typeof stats === 'string') {\n return stats;\n }\n if (stats.n < 2) {\n return errCollection[CommonErrors.DivZero];\n }\n return (stats.sxy / (stats.n - 1)).toString();\n };\n /**\n * Returns a value along a linear trend.\n *\n * Excel: `FORECAST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalCorrelationFormulas.prototype.ComputeFORECAST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var xVal = this.resolveNumberArg(args[0]);\n if (typeof xVal === 'string') {\n return xVal;\n }\n var stats = this.regressionStats([args[2], args[1]]);\n if (typeof stats === 'string') {\n return stats;\n }\n if (stats.sxx === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var slope = stats.sxy / stats.sxx;\n var intercept = stats.meanY - slope * stats.meanX;\n return (intercept + slope * xVal).toString();\n };\n /**\n * Returns the standard error of the predicted y-value for each x in the regression.\n *\n * Excel: `STEYX(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalCorrelationFormulas.prototype.ComputeSTEYX = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n var stats = this.regressionStats([args[1], args[0]]);\n if (typeof stats === 'string') {\n return stats;\n }\n if (stats.n <= 2 || stats.sxx === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var ssRes = stats.syy - (stats.sxy * stats.sxy) / stats.sxx;\n return Math.sqrt(ssRes / (stats.n - 2)).toString();\n };\n return StatisticalCorrelationFormulas;\n}(StatisticalSampleBase));\nexport { StatisticalCorrelationFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { StatisticalSampleBase } from './statistical-sample-base';\n/**\n * Percentile, quartile, and rank position functions for ordered data sets.\n *\n * Registered functions: PERCENTILE, PERCENTRANK, QUARTILE.\n *\n * @hidden\n */\nvar StatisticalPercentileFormulas = /** @class */ (function (_super) {\n __extends(StatisticalPercentileFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalPercentileFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'PERCENTILE', category: 'Statistical', description: 'Returns the k-th percentile of values in a range.' },\n { formulaName: 'PERCENTRANK', category: 'Statistical', description: 'Returns the percentage rank of a value in a data set.' },\n { formulaName: 'QUARTILE', category: 'Statistical', description: 'Returns the quartile of a data set.' }\n ];\n return _this;\n }\n StatisticalPercentileFormulas.prototype.sortedSample = function (args) {\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectSample(args);\n if (typeof nums === 'string') {\n return nums;\n }\n return nums.slice().sort(function (a, b) { return a - b; });\n };\n StatisticalPercentileFormulas.prototype.percentile = function (sorted, k) {\n var errCollection = this.parent.getErrorStrings();\n if (k < 0 || k > 1) {\n return errCollection[CommonErrors.Num];\n }\n if (sorted.length === 0) {\n return errCollection[CommonErrors.Num];\n }\n var n = sorted.length;\n var pos = k * (n - 1);\n var lower = Math.floor(pos);\n var frac = pos - lower;\n if (lower >= n - 1) {\n return sorted[n - 1];\n }\n return sorted[lower] + frac * (sorted[lower + 1] - sorted[lower]);\n };\n /**\n * Returns the k-th percentile of values in a range.\n *\n * Excel: `PERCENTILE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=PERCENTILE(1)');\n * ```\n */\n StatisticalPercentileFormulas.prototype.ComputePERCENTILE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var k = this.resolveNumberArg(args[1]);\n if (typeof k === 'string') {\n return k;\n }\n var sorted = this.sortedSample([args[0]]);\n if (typeof sorted === 'string') {\n return sorted;\n }\n var result = this.percentile(sorted, k);\n return typeof result === 'string' ? result : result.toString();\n };\n /**\n * Returns the percentage rank of a value in a data set.\n *\n * Excel: `PERCENTRANK(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalPercentileFormulas.prototype.ComputePERCENTRANK = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n if (typeof x === 'string') {\n return x;\n }\n var sorted = this.sortedSample([args[1]]);\n if (typeof sorted === 'string') {\n return sorted;\n }\n if (sorted.length === 0) {\n return errCollection[CommonErrors.Num];\n }\n var lower = 0;\n var upper = 1;\n if (args.length === 3) {\n var sig = this.resolveNumberArg(args[2]);\n if (typeof sig === 'string') {\n return sig;\n }\n lower = sig;\n upper = 1 - sig;\n }\n if (x < sorted[0]) {\n return lower.toString();\n }\n if (x > sorted[sorted.length - 1]) {\n return upper.toString();\n }\n var rank = 0;\n for (var i = 0; i < sorted.length; i++) {\n if (sorted[i] === x) {\n rank = i / (sorted.length - 1 || 1);\n break;\n }\n if (sorted[i] > x) {\n var frac = (x - sorted[i - 1]) / (sorted[i] - sorted[i - 1]);\n rank = (i - 1 + frac) / (sorted.length - 1);\n break;\n }\n }\n return rank.toString();\n };\n /**\n * Returns the quartile of a data set.\n *\n * Excel: `QUARTILE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalPercentileFormulas.prototype.ComputeQUARTILE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var quart = this.resolveNumberArg(args[1]);\n if (typeof quart === 'string') {\n return quart;\n }\n var q = Math.floor(quart);\n if (q < 0 || q > 4) {\n return errCollection[CommonErrors.Num];\n }\n var kMap = { 0: 0, 1: 0.25, 2: 0.5, 3: 0.75, 4: 1 };\n var sorted = this.sortedSample([args[0]]);\n if (typeof sorted === 'string') {\n return sorted;\n }\n var result = this.percentile(sorted, kMap[q]);\n return typeof result === 'string' ? result : result.toString();\n };\n return StatisticalPercentileFormulas;\n}(StatisticalSampleBase));\nexport { StatisticalPercentileFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { StatisticalSampleBase } from './statistical-sample-base';\nimport { normCDF, normInv, binomialCoeff, factorial } from './formula-math-helpers';\n/**\n * Probability density and cumulative distribution functions for common statistical distributions.\n *\n * Registered functions: NORMDIST, NORMSDIST, NORMINV, NORMSINV, POISSON, BINOMDIST, EXPONDIST, CONFIDENCE.\n *\n * @hidden\n */\nvar StatisticalDistributionFormulas = /** @class */ (function (_super) {\n __extends(StatisticalDistributionFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalDistributionFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'NORMDIST', category: 'Statistical', description: 'Returns the normal cumulative distribution.' },\n { formulaName: 'NORMSDIST', category: 'Statistical', description: 'Returns the standard normal cumulative distribution.' },\n { formulaName: 'NORMINV', category: 'Statistical', description: 'Returns the inverse of the normal cumulative distribution.' },\n { formulaName: 'NORMSINV', category: 'Statistical', description: 'Returns the inverse of the standard normal cumulative distribution.' },\n { formulaName: 'POISSON', category: 'Statistical', description: 'Returns the Poisson distribution.' },\n { formulaName: 'BINOMDIST', category: 'Statistical', description: 'Returns the individual term binomial distribution probability.' },\n { formulaName: 'EXPONDIST', category: 'Statistical', description: 'Returns the exponential distribution.' },\n { formulaName: 'CONFIDENCE', category: 'Statistical', description: 'Returns the confidence interval for a population mean.' }\n ];\n return _this;\n }\n /**\n * Returns the normal cumulative distribution.\n *\n * Excel: `NORMDIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=NORMDIST(1)');\n * ```\n */\n StatisticalDistributionFormulas.prototype.ComputeNORMDIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var mean = this.resolveNumberArg(args[1]);\n var std = this.resolveNumberArg(args[2]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof mean === 'string') {\n return mean;\n }\n if (typeof std === 'string') {\n return std;\n }\n if (std <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var cumulative = true;\n if (args.length === 4) {\n var cumArg = this.resolveNumberArg(args[3]);\n if (typeof cumArg === 'string') {\n return cumArg;\n }\n cumulative = cumArg !== 0;\n }\n if (cumulative) {\n return normCDF(x, mean, std).toString();\n }\n var z = (x - mean) / std;\n return (Math.exp(-0.5 * z * z) / (std * Math.sqrt(2 * Math.PI))).toString();\n };\n /**\n * Returns the standard normal cumulative distribution.\n *\n * Excel: `NORMSDIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionFormulas.prototype.ComputeNORMSDIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var z = this.resolveNumberArg(args[0]);\n if (typeof z === 'string') {\n return z;\n }\n return normCDF(z).toString();\n };\n /**\n * Returns the inverse of the normal cumulative distribution.\n *\n * Excel: `NORMINV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionFormulas.prototype.ComputeNORMINV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var p = this.resolveNumberArg(args[0]);\n var mean = this.resolveNumberArg(args[1]);\n var std = this.resolveNumberArg(args[2]);\n if (typeof p === 'string') {\n return p;\n }\n if (typeof mean === 'string') {\n return mean;\n }\n if (typeof std === 'string') {\n return std;\n }\n var result = normInv(p, mean, std);\n if (isNaN(result)) {\n return errCollection[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the inverse of the standard normal cumulative distribution.\n *\n * Excel: `NORMSINV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionFormulas.prototype.ComputeNORMSINV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var p = this.resolveNumberArg(args[0]);\n if (typeof p === 'string') {\n return p;\n }\n var result = normInv(p);\n if (isNaN(result)) {\n return errCollection[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the Poisson distribution.\n *\n * Excel: `POISSON(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionFormulas.prototype.ComputePOISSON = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var mean = this.resolveNumberArg(args[1]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof mean === 'string') {\n return mean;\n }\n var k = Math.floor(x);\n if (k < 0 || mean < 0) {\n return errCollection[CommonErrors.Num];\n }\n var cumulative = true;\n if (args.length === 3) {\n var cumArg = this.resolveNumberArg(args[2]);\n if (typeof cumArg === 'string') {\n return cumArg;\n }\n cumulative = cumArg !== 0;\n }\n if (!cumulative) {\n return (Math.exp(-mean) * Math.pow(mean, k) / factorial(k)).toString();\n }\n var sum = 0;\n for (var i = 0; i <= k; i++) {\n sum += Math.exp(-mean) * Math.pow(mean, i) / factorial(i);\n }\n return sum.toString();\n };\n /**\n * Returns the individual term binomial distribution probability.\n *\n * Excel: `BINOMDIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionFormulas.prototype.ComputeBINOMDIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var successes = this.resolveNumberArg(args[0]);\n var trials = this.resolveNumberArg(args[1]);\n var prob = this.resolveNumberArg(args[2]);\n if (typeof successes === 'string') {\n return successes;\n }\n if (typeof trials === 'string') {\n return trials;\n }\n if (typeof prob === 'string') {\n return prob;\n }\n var s = Math.floor(successes);\n var n = Math.floor(trials);\n if (s < 0 || n < 0 || s > n || prob < 0 || prob > 1) {\n return errCollection[CommonErrors.Num];\n }\n var cumulative = true;\n if (args.length === 4) {\n var cumArg = this.resolveNumberArg(args[3]);\n if (typeof cumArg === 'string') {\n return cumArg;\n }\n cumulative = cumArg !== 0;\n }\n var pmf = binomialCoeff(n, s) * Math.pow(prob, s) * Math.pow(1 - prob, n - s);\n if (!cumulative) {\n return pmf.toString();\n }\n var sum = 0;\n for (var i = 0; i <= s; i++) {\n sum += binomialCoeff(n, i) * Math.pow(prob, i) * Math.pow(1 - prob, n - i);\n }\n return sum.toString();\n };\n /**\n * Returns the exponential distribution.\n *\n * Excel: `EXPONDIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionFormulas.prototype.ComputeEXPONDIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var lambda = this.resolveNumberArg(args[1]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof lambda === 'string') {\n return lambda;\n }\n if (x < 0 || lambda <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var cumulative = true;\n if (args.length === 3) {\n var cumArg = this.resolveNumberArg(args[2]);\n if (typeof cumArg === 'string') {\n return cumArg;\n }\n cumulative = cumArg !== 0;\n }\n if (cumulative) {\n return (1 - Math.exp(-lambda * x)).toString();\n }\n return (lambda * Math.exp(-lambda * x)).toString();\n };\n /**\n * Returns the confidence interval for a population mean.\n *\n * Excel: `CONFIDENCE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionFormulas.prototype.ComputeCONFIDENCE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var alpha = this.resolveNumberArg(args[0]);\n var std = this.resolveNumberArg(args[1]);\n var size = this.resolveNumberArg(args[2]);\n if (typeof alpha === 'string') {\n return alpha;\n }\n if (typeof std === 'string') {\n return std;\n }\n if (typeof size === 'string') {\n return size;\n }\n if (alpha <= 0 || alpha >= 1 || std <= 0 || size < 1) {\n return errCollection[CommonErrors.Num];\n }\n var z = normInv(1 - alpha / 2);\n if (isNaN(z)) {\n return errCollection[CommonErrors.Num];\n }\n return (z * std / Math.sqrt(size)).toString();\n };\n return StatisticalDistributionFormulas;\n}(StatisticalSampleBase));\nexport { StatisticalDistributionFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Conditional statistical aggregates (AVERAGEIFS, SUMIFS) over multi-criteria ranges.\n *\n * Registered functions: MAXIFS, MINIFS.\n *\n * @hidden\n */\nvar StatisticalIfsFormulas = /** @class */ (function (_super) {\n __extends(StatisticalIfsFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalIfsFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'MAXIFS', category: 'Statistical', description: 'Returns the maximum value among cells specified by criteria.' },\n { formulaName: 'MINIFS', category: 'Statistical', description: 'Returns the minimum value among cells specified by criteria.' }\n ];\n return _this;\n }\n /**\n * Returns the maximum value among cells specified by criteria.\n *\n * Excel: `MAXIFS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=MAXIFS(1)');\n * ```\n */\n StatisticalIfsFormulas.prototype.ComputeMAXIFS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.aggregateIfs(args, true);\n };\n /**\n * Returns the minimum value among cells specified by criteria.\n *\n * Excel: `MINIFS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalIfsFormulas.prototype.ComputeMINIFS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.aggregateIfs(args, false);\n };\n StatisticalIfsFormulas.prototype.aggregateIfs = function (args, isMax) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length % 2 === 0) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var valueRange = args[0];\n var valueCells = this.parent.getCellCollection(valueRange);\n var values = Array.isArray(valueCells) ? valueCells : [valueCells];\n var criteriaPairs = [];\n for (var i = 1; i < args.length; i += 2) {\n criteriaPairs.push([args[i], args[i + 1]]);\n }\n var criteriaCellsList = [];\n for (var p = 0; p < criteriaPairs.length; p++) {\n var cells = this.parent.getCellCollection(criteriaPairs[p][0]);\n var list = Array.isArray(cells) ? cells : [cells];\n if (list.length !== values.length) {\n return errCollection[CommonErrors.Value];\n }\n criteriaCellsList.push(list);\n }\n var result = null;\n var matched = false;\n for (var i = 0; i < values.length; i++) {\n var ok = true;\n for (var p = 0; p < criteriaPairs.length; p++) {\n var cellVal = this.parent.getValueFromArg(criteriaCellsList[p][i]);\n if (!this.matchesCriteria(cellVal, criteriaPairs[p][1])) {\n ok = false;\n break;\n }\n }\n if (!ok) {\n continue;\n }\n var valStr = this.parent.getValueFromArg(values[i]);\n if (errCollection.indexOf(valStr) > -1) {\n return valStr;\n }\n if (valStr === '' || !this.parent.isNumber(valStr)) {\n continue;\n }\n var num = this.parent.parseFloat(valStr);\n matched = true;\n if (result === null) {\n result = num;\n }\n else if (isMax ? num > result : num < result) {\n result = num;\n }\n }\n if (!matched || result === null) {\n return '0';\n }\n return result.toString();\n };\n StatisticalIfsFormulas.prototype.matchesCriteria = function (cellVal, criteriaArg) {\n var criteria = criteriaArg.trim();\n var isStringVal = criteria.startsWith(this.parent.tic) && criteria.endsWith(this.parent.tic);\n if (isStringVal) {\n criteria = this.parent.removeTics(criteria);\n }\n else if (this.parent.isCellReference(criteria)) {\n criteria = this.parent.getValueFromArg(criteria);\n }\n else {\n criteria = this.parent.getValueFromArg(criteria);\n if (!this.parent.isCellReference(criteriaArg)) {\n criteria = this.parent.removeTics(criteria);\n }\n }\n var op = 'equal';\n if (criteria.startsWith('<=')) {\n op = 'lessEq';\n criteria = criteria.substring(2);\n }\n else if (criteria.startsWith('>=')) {\n op = 'greaterEq';\n criteria = criteria.substring(2);\n }\n else if (criteria.startsWith('<>')) {\n op = 'notEq';\n criteria = criteria.substring(2);\n }\n else if (criteria.startsWith('<')) {\n op = 'less';\n criteria = criteria.substring(1);\n }\n else if (criteria.startsWith('>')) {\n op = 'greater';\n criteria = criteria.substring(1);\n }\n else if (criteria.startsWith('=')) {\n op = 'equal';\n criteria = criteria.substring(1);\n }\n criteria = criteria.trim();\n if (criteria.startsWith(this.parent.tic)) {\n criteria = this.parent.removeTics(criteria);\n }\n return this.parent.processLogical([cellVal.toLowerCase(), criteria.toLowerCase()], op) === this.parent.trueValue;\n };\n return StatisticalIfsFormulas;\n}(FormulaModuleBase));\nexport { StatisticalIfsFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { StatisticalSampleBase } from './statistical-sample-base';\nimport { logGamma } from './formula-math-helpers';\n/**\n * Large-sample and array statistical helpers beyond basic descriptive functions.\n *\n * Registers 11 functions including STDEVA, STDEVPA, VARA, VARPA, TRIMMEAN, and others.\n *\n * @hidden\n */\nvar StatisticalExtendedFormulas = /** @class */ (function (_super) {\n __extends(StatisticalExtendedFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalExtendedFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'STDEVA', category: 'Statistical', description: 'Estimates standard deviation based on a sample, including text and logicals.' },\n { formulaName: 'STDEVPA', category: 'Statistical', description: 'Calculates standard deviation based on the entire population, including text and logicals.' },\n { formulaName: 'VARA', category: 'Statistical', description: 'Estimates variance based on a sample, including text and logicals.' },\n { formulaName: 'VARPA', category: 'Statistical', description: 'Calculates variance based on the entire population, including text and logicals.' },\n { formulaName: 'TRIMMEAN', category: 'Statistical', description: 'Returns the mean of the interior of a data set.' },\n { formulaName: 'FISHER', category: 'Statistical', description: 'Returns the Fisher transformation.' },\n { formulaName: 'FISHERINV', category: 'Statistical', description: 'Returns the inverse of the Fisher transformation.' },\n { formulaName: 'GAMMALN', category: 'Statistical', description: 'Returns the natural logarithm of the gamma function.' },\n { formulaName: 'SUMX2MY2', category: 'Statistical', description: 'Returns the sum of the difference of squares of corresponding values in two arrays.' },\n { formulaName: 'SUMX2PY2', category: 'Statistical', description: 'Returns the sum of the sum of squares of corresponding values in two arrays.' },\n { formulaName: 'SUMXMY2', category: 'Statistical', description: 'Returns the sum of squares of differences of corresponding values in two arrays.' }\n ];\n return _this;\n }\n StatisticalExtendedFormulas.prototype.stdevVarA = function (args, population, asVar) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var nums = this.collectSample(args, true);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length < (population ? 1 : 2)) {\n return errCollection[CommonErrors.DivZero];\n }\n var avg = this.mean(nums);\n var sumSq = 0;\n for (var i = 0; i < nums.length; i++) {\n var d = nums[i] - avg;\n sumSq += d * d;\n }\n var denom = population ? nums.length : nums.length - 1;\n var v = sumSq / denom;\n return (asVar ? v : Math.sqrt(v)).toString();\n };\n /**\n * Estimates standard deviation based on a sample, including text and logicals.\n *\n * Excel: `STDEVA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=STDEVA(1)');\n * ```\n */\n StatisticalExtendedFormulas.prototype.ComputeSTDEVA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.stdevVarA(args, false, false);\n };\n /**\n * Calculates standard deviation based on the entire population, including text and logicals.\n *\n * Excel: `STDEVPA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalExtendedFormulas.prototype.ComputeSTDEVPA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.stdevVarA(args, true, false);\n };\n /**\n * Estimates variance based on a sample, including text and logicals.\n *\n * Excel: `VARA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalExtendedFormulas.prototype.ComputeVARA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.stdevVarA(args, false, true);\n };\n /**\n * Calculates variance based on the entire population, including text and logicals.\n *\n * Excel: `VARPA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalExtendedFormulas.prototype.ComputeVARPA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.stdevVarA(args, true, true);\n };\n /**\n * Returns the mean of the interior of a data set.\n *\n * Excel: `TRIMMEAN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalExtendedFormulas.prototype.ComputeTRIMMEAN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var pct = this.resolveNumberArg(args[1]);\n if (typeof pct === 'string') {\n return pct;\n }\n if (pct < 0 || pct >= 1) {\n return errCollection[CommonErrors.Num];\n }\n var nums = this.collectSample([args[0]], false);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var sorted = nums.slice().sort(function (a, b) { return a - b; });\n var trim = Math.floor(sorted.length * pct / 2);\n var inner = sorted.slice(trim, sorted.length - trim);\n if (inner.length === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n return this.mean(inner).toString();\n };\n /**\n * Returns the Fisher transformation.\n *\n * Excel: `FISHER(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalExtendedFormulas.prototype.ComputeFISHER = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n if (typeof x === 'string') {\n return x;\n }\n if (x <= -1 || x >= 1) {\n return errCollection[CommonErrors.Num];\n }\n return (0.5 * Math.log((1 + x) / (1 - x))).toString();\n };\n /**\n * Returns the inverse of the Fisher transformation.\n *\n * Excel: `FISHERINV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalExtendedFormulas.prototype.ComputeFISHERINV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var y = this.resolveNumberArg(args[0]);\n if (typeof y === 'string') {\n return y;\n }\n var e2y = Math.exp(2 * y);\n return ((e2y - 1) / (e2y + 1)).toString();\n };\n /**\n * Returns the natural logarithm of the gamma function.\n *\n * Excel: `GAMMALN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalExtendedFormulas.prototype.ComputeGAMMALN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n if (typeof x === 'string') {\n return x;\n }\n if (x <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var result = logGamma(x);\n if (!isFinite(result)) {\n return errCollection[CommonErrors.Num];\n }\n return result.toString();\n };\n StatisticalExtendedFormulas.prototype.sumSquaresPair = function (args, mode) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var pair = this.collectPair(args);\n if (typeof pair === 'string') {\n return pair;\n }\n var x = pair.x, y = pair.y;\n if (x.length === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var sum = 0;\n for (var i = 0; i < x.length; i++) {\n if (mode === 'x2my2') {\n sum += x[i] * x[i] - y[i] * y[i];\n }\n else if (mode === 'x2py2') {\n sum += x[i] * x[i] + y[i] * y[i];\n }\n else {\n var d = x[i] - y[i];\n sum += d * d;\n }\n }\n return sum.toString();\n };\n /**\n * Returns the sum of the difference of squares of corresponding values in two arrays.\n *\n * Excel: `SUMX2MY2(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalExtendedFormulas.prototype.ComputeSUMX2MY2 = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.sumSquaresPair(args, 'x2my2');\n };\n /**\n * Returns the sum of the sum of squares of corresponding values in two arrays.\n *\n * Excel: `SUMX2PY2(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalExtendedFormulas.prototype.ComputeSUMX2PY2 = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.sumSquaresPair(args, 'x2py2');\n };\n /**\n * Returns the sum of squares of differences of corresponding values in two arrays.\n *\n * Excel: `SUMXMY2(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalExtendedFormulas.prototype.ComputeSUMXMY2 = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.sumSquaresPair(args, 'xmy2');\n };\n return StatisticalExtendedFormulas;\n}(StatisticalSampleBase));\nexport { StatisticalExtendedFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { StatisticalSampleBase } from './statistical-sample-base';\nimport { binomialCoeff, gamma, normCDF, chiSquareCDF, chiSquareInv, fCDF, fInv, logNormCDF, logNormInv, lowerRegularizedGamma } from './formula-math-helpers';\n/**\n * Extended distribution library covering additional continuous and discrete probability models.\n *\n * Registers 15 functions including CRITBINOM, NEGBINOMDIST, HYPGEOMDIST, WEIBULL, LOGNORMDIST, and others.\n *\n * @hidden\n */\nvar StatisticalDistributionExtendedFormulas = /** @class */ (function (_super) {\n __extends(StatisticalDistributionExtendedFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalDistributionExtendedFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'CRITBINOM', category: 'Statistical', description: 'Returns the smallest value for which the cumulative binomial distribution is less than or equal to a criterion value.' },\n { formulaName: 'NEGBINOMDIST', category: 'Statistical', description: 'Returns the negative binomial distribution.' },\n { formulaName: 'HYPGEOMDIST', category: 'Statistical', description: 'Returns the hypergeometric distribution.' },\n { formulaName: 'WEIBULL', category: 'Statistical', description: 'Returns the Weibull distribution.' },\n { formulaName: 'LOGNORMDIST', category: 'Statistical', description: 'Returns the cumulative log-normal distribution.' },\n { formulaName: 'LOGINV', category: 'Statistical', description: 'Returns the inverse of the log-normal cumulative distribution.' },\n { formulaName: 'GAMMADIST', category: 'Statistical', description: 'Returns the gamma distribution.' },\n { formulaName: 'GAMMAINV', category: 'Statistical', description: 'Returns the inverse of the gamma cumulative distribution.' },\n { formulaName: 'CHIDIST', category: 'Statistical', description: 'Returns the one-tailed probability of the chi-squared distribution.' },\n { formulaName: 'CHIINV', category: 'Statistical', description: 'Returns the inverse of the one-tailed probability of the chi-squared distribution.' },\n { formulaName: 'CHITEST', category: 'Statistical', description: 'Returns the test for independence.' },\n { formulaName: 'FDIST', category: 'Statistical', description: 'Returns the F probability distribution.' },\n { formulaName: 'FINV', category: 'Statistical', description: 'Returns the inverse of the F probability distribution.' },\n { formulaName: 'ZTEST', category: 'Statistical', description: 'Returns the one-tailed probability-value of a z-test.' },\n { formulaName: 'PROB', category: 'Statistical', description: 'Returns the probability that values in a range are between two limits.' }\n ];\n return _this;\n }\n StatisticalDistributionExtendedFormulas.prototype.parseCumulative = function (args, index) {\n if (args.length <= index) {\n return true;\n }\n var cum = this.resolveNumberArg(args[index]);\n if (typeof cum === 'string') {\n return cum;\n }\n return cum !== 0;\n };\n /**\n * Returns the smallest value for which the cumulative binomial distribution is less than or equal to a criterion value.\n *\n * Excel: `CRITBINOM(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=CRITBINOM(1)');\n * ```\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeCRITBINOM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var trials = this.resolveNumberArg(args[0]);\n var prob = this.resolveNumberArg(args[1]);\n var alpha = this.resolveNumberArg(args[2]);\n if (typeof trials === 'string') {\n return trials;\n }\n if (typeof prob === 'string') {\n return prob;\n }\n if (typeof alpha === 'string') {\n return alpha;\n }\n var n = Math.floor(trials);\n var p = prob;\n if (n < 0 || p < 0 || p > 1 || alpha < 0 || alpha > 1) {\n return errCollection[CommonErrors.Num];\n }\n var cum = 0;\n for (var k = 0; k <= n; k++) {\n cum += binomialCoeff(n, k) * Math.pow(p, k) * Math.pow(1 - p, n - k);\n if (cum >= alpha) {\n return k.toString();\n }\n }\n return n.toString();\n };\n /**\n * Returns the negative binomial distribution.\n *\n * Excel: `NEGBINOMDIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeNEGBINOMDIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var failures = this.resolveNumberArg(args[0]);\n var successes = this.resolveNumberArg(args[1]);\n var prob = this.resolveNumberArg(args[2]);\n if (typeof failures === 'string') {\n return failures;\n }\n if (typeof successes === 'string') {\n return successes;\n }\n if (typeof prob === 'string') {\n return prob;\n }\n var f = Math.floor(failures);\n var s = Math.floor(successes);\n if (f < 0 || s < 1 || prob <= 0 || prob > 1) {\n return errCollection[CommonErrors.Num];\n }\n var result = binomialCoeff(f + s - 1, s - 1) * Math.pow(prob, s) * Math.pow(1 - prob, f);\n return result.toString();\n };\n /**\n * Returns the hypergeometric distribution.\n *\n * Excel: `HYPGEOMDIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeHYPGEOMDIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 4 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var sampleS = this.resolveNumberArg(args[0]);\n var numSample = this.resolveNumberArg(args[1]);\n var popS = this.resolveNumberArg(args[2]);\n var numPop = this.resolveNumberArg(args[3]);\n if (typeof sampleS === 'string') {\n return sampleS;\n }\n if (typeof numSample === 'string') {\n return numSample;\n }\n if (typeof popS === 'string') {\n return popS;\n }\n if (typeof numPop === 'string') {\n return numPop;\n }\n var x = Math.floor(sampleS);\n var n = Math.floor(numSample);\n var M = Math.floor(popS);\n var N = Math.floor(numPop);\n if (x < 0 || x > n || n > N || M > N) {\n return errCollection[CommonErrors.Num];\n }\n var cumulative = this.parseCumulative(args, 4);\n if (typeof cumulative === 'string') {\n return cumulative;\n }\n var pmf = (binomialCoeff(M, x) * binomialCoeff(N - M, n - x)) / binomialCoeff(N, n);\n if (!cumulative) {\n return pmf.toString();\n }\n var sum = 0;\n for (var i = 0; i <= x; i++) {\n sum += (binomialCoeff(M, i) * binomialCoeff(N - M, n - i)) / binomialCoeff(N, n);\n }\n return sum.toString();\n };\n /**\n * Returns the Weibull distribution.\n *\n * Excel: `WEIBULL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeWEIBULL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var alpha = this.resolveNumberArg(args[1]);\n var beta = this.resolveNumberArg(args[2]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof alpha === 'string') {\n return alpha;\n }\n if (typeof beta === 'string') {\n return beta;\n }\n if (x < 0 || alpha <= 0 || beta <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var cumulative = this.parseCumulative(args, 3);\n if (typeof cumulative === 'string') {\n return cumulative;\n }\n if (cumulative) {\n return (1 - Math.exp(-Math.pow(x / beta, alpha))).toString();\n }\n return ((alpha / Math.pow(beta, alpha)) * Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha))).toString();\n };\n /**\n * Returns the cumulative log-normal distribution.\n *\n * Excel: `LOGNORMDIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeLOGNORMDIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var mean = this.resolveNumberArg(args[1]);\n var std = this.resolveNumberArg(args[2]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof mean === 'string') {\n return mean;\n }\n if (typeof std === 'string') {\n return std;\n }\n var result = logNormCDF(x, mean, std);\n if (isNaN(result)) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the inverse of the log-normal cumulative distribution.\n *\n * Excel: `LOGINV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeLOGINV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var p = this.resolveNumberArg(args[0]);\n var mean = this.resolveNumberArg(args[1]);\n var std = this.resolveNumberArg(args[2]);\n if (typeof p === 'string') {\n return p;\n }\n if (typeof mean === 'string') {\n return mean;\n }\n if (typeof std === 'string') {\n return std;\n }\n var result = logNormInv(p, mean, std);\n if (isNaN(result)) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the gamma distribution.\n *\n * Excel: `GAMMADIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeGAMMADIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var alpha = this.resolveNumberArg(args[1]);\n var beta = this.resolveNumberArg(args[2]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof alpha === 'string') {\n return alpha;\n }\n if (typeof beta === 'string') {\n return beta;\n }\n if (x < 0 || alpha <= 0 || beta <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var cumulative = this.parseCumulative(args, 3);\n if (typeof cumulative === 'string') {\n return cumulative;\n }\n var scaled = x / beta;\n if (cumulative) {\n return lowerRegularizedGamma(alpha, scaled).toString();\n }\n return (Math.pow(scaled, alpha - 1) * Math.exp(-scaled) / (beta * gamma(alpha))).toString();\n };\n /**\n * Returns the inverse of the gamma cumulative distribution.\n *\n * Excel: `GAMMAINV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeGAMMAINV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var p = this.resolveNumberArg(args[0]);\n var alpha = this.resolveNumberArg(args[1]);\n var beta = this.resolveNumberArg(args[2]);\n if (typeof p === 'string') {\n return p;\n }\n if (typeof alpha === 'string') {\n return alpha;\n }\n if (typeof beta === 'string') {\n return beta;\n }\n if (p <= 0 || p >= 1 || alpha <= 0 || beta <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var lo = 0;\n var hi = alpha * beta * 20 + 1;\n for (var i = 0; i < 100; i++) {\n var mid = (lo + hi) / 2;\n if (lowerRegularizedGamma(alpha, mid / beta) < p) {\n lo = mid;\n }\n else {\n hi = mid;\n }\n }\n return ((lo + hi) / 2).toString();\n };\n /**\n * Returns the one-tailed probability of the chi-squared distribution.\n *\n * Excel: `CHIDIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeCHIDIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var df = this.resolveNumberArg(args[1]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof df === 'string') {\n return df;\n }\n return (1 - chiSquareCDF(x, df)).toString();\n };\n /**\n * Returns the inverse of the one-tailed probability of the chi-squared distribution.\n *\n * Excel: `CHIINV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeCHIINV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var p = this.resolveNumberArg(args[0]);\n var df = this.resolveNumberArg(args[1]);\n if (typeof p === 'string') {\n return p;\n }\n if (typeof df === 'string') {\n return df;\n }\n var result = chiSquareInv(1 - p, df);\n if (isNaN(result)) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the test for independence.\n *\n * Excel: `CHITEST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeCHITEST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.chiSquareTest(args);\n };\n StatisticalDistributionExtendedFormulas.prototype.chiSquareTest = function (args) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var actual = this.collectSample([args[0]], false);\n var expected = this.collectSample([args[1]], false);\n if (typeof actual === 'string') {\n return actual;\n }\n if (typeof expected === 'string') {\n return expected;\n }\n if (actual.length !== expected.length || actual.length === 0) {\n return errCollection[CommonErrors.NA];\n }\n var chi2 = 0;\n for (var i = 0; i < actual.length; i++) {\n if (expected[i] === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var d = actual[i] - expected[i];\n chi2 += (d * d) / expected[i];\n }\n var df = actual.length - 1;\n return (1 - chiSquareCDF(chi2, df)).toString();\n };\n /**\n * Returns the F probability distribution.\n *\n * Excel: `FDIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeFDIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var d1 = this.resolveNumberArg(args[1]);\n var d2 = this.resolveNumberArg(args[2]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof d1 === 'string') {\n return d1;\n }\n if (typeof d2 === 'string') {\n return d2;\n }\n return (1 - fCDF(x, d1, d2)).toString();\n };\n /**\n * Returns the inverse of the F probability distribution.\n *\n * Excel: `FINV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeFINV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var p = this.resolveNumberArg(args[0]);\n var d1 = this.resolveNumberArg(args[1]);\n var d2 = this.resolveNumberArg(args[2]);\n if (typeof p === 'string') {\n return p;\n }\n if (typeof d1 === 'string') {\n return d1;\n }\n if (typeof d2 === 'string') {\n return d2;\n }\n var result = fInv(1 - p, d1, d2);\n if (isNaN(result)) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the one-tailed probability-value of a z-test.\n *\n * Excel: `ZTEST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputeZTEST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var nums = this.collectSample([args[0]], false);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length < 2) {\n return errCollection[CommonErrors.DivZero];\n }\n var x = this.resolveNumberArg(args[1]);\n if (typeof x === 'string') {\n return x;\n }\n var avg = this.mean(nums);\n var sumSq = 0;\n for (var i = 0; i < nums.length; i++) {\n var d = nums[i] - avg;\n sumSq += d * d;\n }\n var std = Math.sqrt(sumSq / (nums.length - 1));\n if (std === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var sigma = std / Math.sqrt(nums.length);\n if (args.length === 3) {\n var s = this.resolveNumberArg(args[2]);\n if (typeof s === 'string') {\n return s;\n }\n sigma = s / Math.sqrt(nums.length);\n }\n var z = (avg - x) / sigma;\n return (1 - normCDF(z)).toString();\n };\n /**\n * Returns the probability that values in a range are between two limits.\n *\n * Excel: `PROB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalDistributionExtendedFormulas.prototype.ComputePROB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var nums = this.collectSample([args[0]], false);\n if (typeof nums === 'string') {\n return nums;\n }\n var low = this.resolveNumberArg(args[1]);\n var high = this.resolveNumberArg(args[2]);\n if (typeof low === 'string') {\n return low;\n }\n if (typeof high === 'string') {\n return high;\n }\n if (nums.length === 0) {\n return errCollection[CommonErrors.Num];\n }\n var total = 0;\n var inRange = 0;\n for (var i = 0; i < nums.length; i++) {\n total += 1;\n if (nums[i] >= low && nums[i] <= high) {\n inRange += 1;\n }\n }\n return (inRange / total).toString();\n };\n return StatisticalDistributionExtendedFormulas;\n}(StatisticalSampleBase));\nexport { StatisticalDistributionExtendedFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\nimport { parseComplexText, formatComplex } from './formula-math-helpers';\n/**\n * Complex-number arithmetic, polar/rectangular conversion, and complex transcendental functions.\n *\n * Registers 18 functions including COMPLEX, IMABS, IMAGINARY, IMREAL, IMCONJUGATE, and others.\n *\n * @hidden\n */\nvar ComplexNumbersFormulas = /** @class */ (function (_super) {\n __extends(ComplexNumbersFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function ComplexNumbersFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'COMPLEX', category: 'Engineering', description: 'Converts real and imaginary coefficients into a complex number.' },\n { formulaName: 'IMABS', category: 'Engineering', description: 'Returns the absolute value (modulus) of a complex number.' },\n { formulaName: 'IMAGINARY', category: 'Engineering', description: 'Returns the imaginary coefficient of a complex number.' },\n { formulaName: 'IMREAL', category: 'Engineering', description: 'Returns the real coefficient of a complex number.' },\n { formulaName: 'IMCONJUGATE', category: 'Engineering', description: 'Returns the complex conjugate of a complex number.' },\n { formulaName: 'IMSUM', category: 'Engineering', description: 'Returns the sum of complex numbers.' },\n { formulaName: 'IMSUB', category: 'Engineering', description: 'Returns the difference between two complex numbers.' },\n { formulaName: 'IMPRODUCT', category: 'Engineering', description: 'Returns the product of complex numbers.' },\n { formulaName: 'IMDIV', category: 'Engineering', description: 'Returns the quotient of two complex numbers.' },\n { formulaName: 'IMSIN', category: 'Engineering', description: 'Returns the sine of a complex number.' },\n { formulaName: 'IMCOS', category: 'Engineering', description: 'Returns the cosine of a complex number.' },\n { formulaName: 'IMEXP', category: 'Engineering', description: 'Returns the exponential of a complex number.' },\n { formulaName: 'IMLN', category: 'Engineering', description: 'Returns the natural logarithm of a complex number.' },\n { formulaName: 'IMSQRT', category: 'Engineering', description: 'Returns the square root of a complex number.' },\n { formulaName: 'IMPOWER', category: 'Engineering', description: 'Returns a complex number raised to an integer power.' },\n { formulaName: 'IMARGUMENT', category: 'Engineering', description: 'Returns the argument theta of a complex number in radians.' },\n { formulaName: 'IMLOG10', category: 'Engineering', description: 'Returns the base-10 logarithm of a complex number.' },\n { formulaName: 'IMLOG2', category: 'Engineering', description: 'Returns the base-2 logarithm of a complex number.' }\n ];\n return _this;\n }\n ComplexNumbersFormulas.prototype.resolveComplex = function (arg) {\n var errCollection = this.parent.getErrorStrings();\n var text = this.resolveTextArg(arg);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n var parsed = parseComplexText(text);\n if (!parsed) {\n return errCollection[CommonErrors.Num];\n }\n return parsed;\n };\n /**\n * Converts real and imaginary coefficients into a complex number.\n *\n * Excel: `COMPLEX(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=COMPLEX(1)');\n * ```\n */\n ComplexNumbersFormulas.prototype.ComputeCOMPLEX = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var re = this.resolveNumberArg(args[0]);\n var im = this.resolveNumberArg(args[1]);\n if (typeof re === 'string') {\n return re;\n }\n if (typeof im === 'string') {\n return im;\n }\n var suffix = 'i';\n if (args.length === 3) {\n suffix = this.resolveTextArg(args[2]);\n if (suffix !== 'i' && suffix !== 'j') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n return formatComplex(re, im, suffix);\n };\n /**\n * Returns the absolute value (modulus) of a complex number.\n *\n * Excel: `IMABS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMABS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n if (typeof c === 'string') {\n return c;\n }\n return Math.sqrt(c.re * c.re + c.im * c.im).toString();\n };\n /**\n * Returns the imaginary coefficient of a complex number.\n *\n * Excel: `IMAGINARY(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMAGINARY = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n if (typeof c === 'string') {\n return c;\n }\n return c.im.toString();\n };\n /**\n * Returns the real coefficient of a complex number.\n *\n * Excel: `IMREAL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMREAL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n if (typeof c === 'string') {\n return c;\n }\n return c.re.toString();\n };\n /**\n * Returns the complex conjugate of a complex number.\n *\n * Excel: `IMCONJUGATE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMCONJUGATE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n if (typeof c === 'string') {\n return c;\n }\n return formatComplex(c.re, -c.im);\n };\n /**\n * Returns the sum of complex numbers.\n *\n * Excel: `IMSUM(...)`.\n *\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMSUM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.complexReduce(args, function (a, b) { return ({ re: a.re + b.re, im: a.im + b.im }); });\n };\n /**\n * Returns the difference between two complex numbers.\n *\n * Excel: `IMSUB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMSUB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var a = this.resolveComplex(args[0]);\n var b = this.resolveComplex(args[1]);\n if (typeof a === 'string') {\n return a;\n }\n if (typeof b === 'string') {\n return b;\n }\n return formatComplex(a.re - b.re, a.im - b.im);\n };\n /**\n * Returns the product of complex numbers.\n *\n * Excel: `IMPRODUCT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMPRODUCT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.complexReduce(args, function (a, b) { return ({\n re: a.re * b.re - a.im * b.im,\n im: a.re * b.im + a.im * b.re\n }); }, { re: 1, im: 0 });\n };\n /**\n * Returns the quotient of two complex numbers.\n *\n * Excel: `IMDIV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMDIV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var a = this.resolveComplex(args[0]);\n var b = this.resolveComplex(args[1]);\n if (typeof a === 'string') {\n return a;\n }\n if (typeof b === 'string') {\n return b;\n }\n var denom = b.re * b.re + b.im * b.im;\n if (denom === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n return formatComplex((a.re * b.re + a.im * b.im) / denom, (a.im * b.re - a.re * b.im) / denom);\n };\n ComplexNumbersFormulas.prototype.complexReduce = function (args, fn, initial) {\n if (isNullOrUndefined(args) || args.length < 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var acc = initial !== undefined ? initial : this.resolveComplex(args[0]);\n if (typeof acc === 'string') {\n return acc;\n }\n var start = initial ? 0 : 1;\n for (var i = start; i < args.length; i++) {\n var b = this.resolveComplex(args[i]);\n if (typeof b === 'string') {\n return b;\n }\n acc = fn(acc, b);\n }\n return formatComplex(acc.re, acc.im);\n };\n /**\n * Returns the exponential of a complex number.\n *\n * Excel: `IMEXP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMEXP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n if (typeof c === 'string') {\n return c;\n }\n var expRe = Math.exp(c.re);\n return formatComplex(expRe * Math.cos(c.im), expRe * Math.sin(c.im));\n };\n /**\n * Returns the natural logarithm of a complex number.\n *\n * Excel: `IMLN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMLN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n if (typeof c === 'string') {\n return c;\n }\n var r = Math.sqrt(c.re * c.re + c.im * c.im);\n if (r === 0) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return formatComplex(Math.log(r), Math.atan2(c.im, c.re));\n };\n /**\n * Returns the base-10 logarithm of a complex number.\n *\n * Excel: `IMLOG10(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMLOG10 = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var ln = this.ComputeIMLN.apply(this, args);\n if (typeof ln === 'string' && this.parent.getErrorStrings().indexOf(ln) > -1) {\n return ln;\n }\n var c = parseComplexText(ln.toString());\n if (!c) {\n return ln;\n }\n var log10e = 1 / Math.LN10;\n return formatComplex(c.re * log10e, c.im * log10e);\n };\n /**\n * Returns the base-2 logarithm of a complex number.\n *\n * Excel: `IMLOG2(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMLOG2 = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var ln = this.ComputeIMLN.apply(this, args);\n if (typeof ln === 'string' && this.parent.getErrorStrings().indexOf(ln) > -1) {\n return ln;\n }\n var c = parseComplexText(ln.toString());\n if (!c) {\n return ln;\n }\n var log2e = 1 / Math.LN2;\n return formatComplex(c.re * log2e, c.im * log2e);\n };\n /**\n * Returns the square root of a complex number.\n *\n * Excel: `IMSQRT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMSQRT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n if (typeof c === 'string') {\n return c;\n }\n var r = Math.sqrt(c.re * c.re + c.im * c.im);\n var theta = Math.atan2(c.im, c.re);\n var sqrtR = Math.sqrt(r);\n return formatComplex(sqrtR * Math.cos(theta / 2), sqrtR * Math.sin(theta / 2));\n };\n /**\n * Returns a complex number raised to an integer power.\n *\n * Excel: `IMPOWER(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMPOWER = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n var nArg = this.resolveNumberArg(args[1]);\n if (typeof c === 'string') {\n return c;\n }\n if (typeof nArg === 'string') {\n return nArg;\n }\n var n = Math.floor(nArg);\n var r = Math.sqrt(c.re * c.re + c.im * c.im);\n if (r === 0 && n <= 0) {\n return errCollection[CommonErrors.Num];\n }\n var theta = Math.atan2(c.im, c.re);\n var rn = Math.pow(r, n);\n var angle = n * theta;\n return formatComplex(rn * Math.cos(angle), rn * Math.sin(angle));\n };\n /**\n * Returns the argument theta of a complex number in radians.\n *\n * Excel: `IMARGUMENT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMARGUMENT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n if (typeof c === 'string') {\n return c;\n }\n if (c.re === 0 && c.im === 0) {\n return this.parent.getErrorStrings()[CommonErrors.DivZero];\n }\n return Math.atan2(c.im, c.re).toString();\n };\n /**\n * Returns the sine of a complex number.\n *\n * Excel: `IMSIN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMSIN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n if (typeof c === 'string') {\n return c;\n }\n return formatComplex(Math.sin(c.re) * Math.cosh(c.im), Math.cos(c.re) * Math.sinh(c.im));\n };\n /**\n * Returns the cosine of a complex number.\n *\n * Excel: `IMCOS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ComplexNumbersFormulas.prototype.ComputeIMCOS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var c = this.resolveComplex(args[0]);\n if (typeof c === 'string') {\n return c;\n }\n return formatComplex(Math.cos(c.re) * Math.cosh(c.im), -Math.sin(c.re) * Math.sinh(c.im));\n };\n return ComplexNumbersFormulas;\n}(FormulaModuleBase));\nexport { ComplexNumbersFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined, Internationalization } from '@syncfusion/ej2-base';\nimport { dateToInt } from '../common/number-date';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Date and time construction, extraction, and serial-number conversion for spreadsheet calendars.\n *\n * Registers 14 functions including DATE, DAY, TODAY, DAYS, WEEKDAY, and others.\n *\n * @hidden\n */\nvar DateTimeFormulas = /** @class */ (function (_super) {\n __extends(DateTimeFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function DateTimeFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'DATE', category: 'Date', description: 'Returns the date, given the year, month and day of the month.' },\n { formulaName: 'DAY', category: 'Date', description: 'Returns the day of a given date.' },\n { formulaName: 'TODAY', category: 'Date', description: 'Returns the current date as date value.' },\n { formulaName: 'DAYS', category: 'Date', description: 'Returns the number of days between two dates.' },\n { formulaName: 'WEEKDAY', category: 'Date', description: 'Returns the day of the week corresponding to a date.' },\n { formulaName: 'TIME', category: 'Date & Time', description: 'Converts hours, minutes, seconds to the time formatted text.' },\n { formulaName: 'EDATE', category: 'Date & Time', description: 'Returns a date with given number of months before or after the specified date.' },\n { formulaName: 'EOMONTH', category: 'Date & Time', description: 'Returns the last day of the month that is a specified number of months before or after an initially supplied start date.' },\n { formulaName: 'DATEVALUE', category: 'Date & Time', description: 'Converts a date string into date value.' },\n { formulaName: 'HOUR', category: 'Date & Time', description: 'Returns the number of hours in a specified time string.' },\n { formulaName: 'MINUTE', category: 'Date & Time', description: 'Returns the number of minutes in a specified time string.' },\n { formulaName: 'SECOND', category: 'Date & Time', description: 'Returns the number of seconds in a specified time string.' },\n { formulaName: 'NOW', category: 'Date & Time', description: 'Returns the current date and time.' },\n { formulaName: 'MONTH', category: 'Date & Time', description: 'Returns the number of months in a specified date string.' }\n ];\n return _this;\n }\n /**\n * Returns the date, given the year, month and day of the month.\n *\n * Excel: `DATE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=DATE(2024,1,15)');\n * ```\n */\n DateTimeFormulas.prototype.ComputeDATE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var nestedFormula;\n if (args.length && args[args.length - 1] === 'nestedFormulaTrue') {\n nestedFormula = true;\n args.pop();\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var argArr = [];\n for (var i = 0; i < args.length; ++i) {\n argArr[i] = this.parent.getValueFromArg(args[i]);\n }\n argArr[0] = (argArr[0] === this.parent.trueValue) ? '1' : (argArr[0] === this.parent.falseValue) ? '0' : argArr[0];\n argArr[1] = (argArr[1] === this.parent.trueValue) ? '1' : (argArr[1] === this.parent.falseValue) ? '0' : argArr[1];\n argArr[2] = (argArr[2] === this.parent.trueValue) ? '1' : (argArr[2] === this.parent.falseValue) ? '0' : argArr[2];\n for (var idx = 0; idx < argArr.length; idx++) {\n var argsValue = argArr[idx];\n if (this.parent.getErrorStrings().indexOf(argsValue) > -1) {\n return argsValue;\n }\n else if ((argsValue === '\"\"') || (argsValue === '\"0\"' && args[idx] !== '\"0\"') || (argsValue === '\"TRUE\"' || argsValue === '\"FALSE\"')) {\n return this.parent.getErrorStrings()[CommonErrors.Value].toString();\n }\n }\n var year = Math.floor(this.parent.parseFloat(argArr[0].split(this.parent.tic).join('')));\n var month = Math.floor(this.parent.parseFloat(argArr[1].split(this.parent.tic).join('')));\n var day = Math.floor(this.parent.parseFloat(argArr[2].split(this.parent.tic).join('')));\n var days = 0;\n if (!isNaN(year) && !isNaN(month) && !isNaN(day)) {\n if ((year < 0 && month <= 12) || (year >= 10000 && month > 0)) {\n return this.parent.getErrorStrings()[CommonErrors.Num].toString();\n }\n while (month > 12) {\n month -= 12;\n year++;\n }\n days = this.parent.getSerialDateFromDate(year, month, day);\n }\n else {\n return this.parent.getErrorStrings()[CommonErrors.Value].toString();\n }\n if (days === 0) {\n return this.parent.getErrorStrings()[CommonErrors.Num].toString();\n }\n var date = this.parent.fromOADate(days);\n if (date.toString() !== 'Invalid Date') {\n if ((date.getFullYear() < 1900) || (10000 <= date.getFullYear())) {\n return this.parent.getErrorStrings()[CommonErrors.Num].toString();\n }\n if (!nestedFormula) {\n return new Internationalization(this.parent.parentObject.locale || 'en-US').formatDate(date, { type: 'date', skeleton: 'yMd' });\n }\n }\n return days.toString();\n };\n /**\n * Returns the day of a given date.\n *\n * Excel: `DAY(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeDAY = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result;\n var dateVal;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (args[0].startsWith(this.parent.tic)) {\n dateVal = args[0].split(this.parent.tic).join('');\n if (dateVal === '' || dateVal === this.parent.trueValue || dateVal === this.parent.falseValue) {\n return errCollection[CommonErrors.Value];\n }\n }\n else {\n dateVal = this.parent.getValueFromArg(args[0].split(this.parent.tic).join(''));\n if (this.parent.isCellReference(args[0]) && (dateVal.indexOf(this.parent.tic) > -1)) {\n return errCollection[CommonErrors.Value];\n }\n }\n if (errCollection.indexOf(dateVal) > -1) {\n return dateVal;\n }\n else if (Number(dateVal) < 0) {\n return errCollection[CommonErrors.Num];\n }\n else if (Math.floor(Number(dateVal)) === 0 || dateVal === this.parent.falseValue) {\n return 0;\n }\n else if (dateVal === this.parent.trueValue) {\n return 1;\n }\n result = this.parent.isNaN(Number(dateVal)) ? this.parent.parseDate(dateVal) : this.parent.intToDate(dateVal);\n if (Object.prototype.toString.call(result) === '[object Date]') { /* eslint-disable-next-line */\n result = ((new Date(result).getFullYear() < 1900) || (new Date(result).getFullYear()) > 9999) ? this.parent.isNumber(dateVal) ? 'Num' : 'NaN' : result.getDate();\n }\n if (result.toString() === 'NaN') {\n return errCollection[CommonErrors.Value];\n }\n else if (result.toString() === 'Num') {\n return errCollection[CommonErrors.Num];\n }\n return result;\n };\n /**\n * Returns the current date as date value.\n *\n * Excel: `TODAY(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeTODAY = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var str;\n if (args.length !== 1 || args[0] !== '') {\n str = this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else {\n var dt = new Date(Date.now());\n if (this.parent.parentObject.getModuleName() === 'spreadsheet') {\n str = dateToInt(dt).toString();\n if (this.parent.parser.storedStringText.toUpperCase().indexOf('TODAY') === 0 &&\n this.parent.cell !== '') {\n this.parent.parentObject.setDateFormat(this.parent.getSheetId(this.parent.grid), this.parent.rowIndex(this.parent.cell) - 1, this.parent.colIndex(this.parent.cell) - 1);\n }\n }\n else {\n str = dt.getFullYear() + '/' + this.parent.calculateDate((dt.getMonth() + 1).toString()) + '/'\n + this.parent.calculateDate(dt.getDate().toString());\n }\n }\n return str;\n };\n /**\n * Returns the number of days between two dates.\n *\n * Excel: `DAYS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeDAYS = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) && (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var processArgs = function (actuaValue) {\n var value = _this.parent.getValueFromArg(actuaValue).trim();\n if (value.indexOf(_this.parent.tic) > -1) {\n value = value.split(_this.parent.tic).join('').trim();\n if (value === '' || _this.parent.isCellReference(actuaValue) || value.toUpperCase() === _this.parent.trueValue ||\n value.toUpperCase() === _this.parent.falseValue) {\n return errCollection[CommonErrors.Value];\n }\n }\n value = value.split(_this.parent.tic).join('');\n if (value.toUpperCase() === _this.parent.trueValue) {\n value = '1';\n }\n else if (value === '' || value.toUpperCase() === _this.parent.falseValue) {\n value = '0';\n }\n else if (Number(value) < 0) {\n return errCollection[CommonErrors.Num];\n }\n var dateCheck = _this.parent.hostParseDate(value.toString());\n if (dateCheck.isDate || dateCheck.isTime) {\n value = (_this.parent.parseDate(value).getTime() / (1000 * 3600 * 24)).toString();\n }\n return value;\n };\n var endDate = processArgs(args[0]);\n if (errCollection.indexOf(endDate) > -1) {\n return endDate;\n }\n var startDate = processArgs(args[1]);\n if (errCollection.indexOf(startDate) > -1) {\n return startDate;\n }\n var result = Math.floor(Number(endDate)) - Math.floor(Number(startDate));\n if (isNaN(result)) {\n return errCollection[CommonErrors.Value];\n }\n return result;\n };\n /**\n * Returns the day of the week corresponding to a date.\n *\n * Excel: `WEEKDAY(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeWEEKDAY = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if ((args[0] === '' && isNullOrUndefined(args[1])) || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n if ((args[0] === '' && args[1] === '') || args[1] === '') {\n return this.parent.getErrorStrings()[CommonErrors.Num].toString();\n }\n if (args.length === 1) {\n args.push('1');\n }\n if ((args[0].indexOf(this.parent.tic) > -1 && args[0].split(this.parent.tic).join('').trim() === '') || (args[1].split(this.parent.tic).join('').trim() === '') || (args[1].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(args[1].split(this.parent.tic).join(''))))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var date;\n var value;\n var day;\n if (this.parent.isCellReference(args[0])) {\n date = this.parent.getValueFromArg(args[0].split(this.parent.tic).join('')) || '0';\n if (date.indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n if ((args[0].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(args[0].split(this.parent.tic).join(''))))) {\n date = this.parent.getValueFromArg(args[0]);\n }\n else {\n date = this.parent.getValueFromArg(args[0].split(this.parent.tic).join('')) || '0';\n }\n }\n if (this.parent.isCellReference(args[1])) {\n value = this.parent.getValueFromArg(args[1].split(this.parent.tic).join('')) || '0';\n }\n else {\n value = this.parent.getValueFromArg(args[1].split(this.parent.tic).join(''));\n }\n if (this.parent.getErrorStrings().indexOf(date) > -1) {\n return date;\n }\n if (this.parent.getErrorStrings().indexOf(value) > -1) {\n return value;\n }\n date = date === this.parent.trueValue ? '1' : (date === this.parent.falseValue ? '0' : date);\n value = value === this.parent.trueValue ? '1' : (value === this.parent.falseValue ? '0' : value);\n day = this.parent.parseFloat(date);\n value = this.parent.parseFloat(value);\n if (isNaN(value) || isNaN(day)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (day < 0 || day > 2958465) {\n return this.parent.getErrorStrings()[CommonErrors.Num].toString();\n }\n value = parseInt(value.toString(), 10);\n day = day < 1 ? 0 : Math.floor(day) % 7;\n switch (value) {\n case 1:\n case 17:\n day = day <= 0 ? day + 7 : day;\n break;\n case 2:\n case 11:\n day = day - 1;\n day = day <= 0 ? day + 7 : day;\n break;\n case 3:\n day = day - 2;\n day = day < 0 ? day + 7 : day;\n break;\n case 12:\n day = day + 5;\n day = day > 7 ? day - 7 : day;\n break;\n case 13:\n day = day + 4;\n day = day > 7 ? day - 7 : day;\n break;\n case 14:\n day = day + 3;\n day = day > 7 ? day - 7 : day;\n break;\n case 15:\n day = day + 2;\n day = day > 7 ? day - 7 : day;\n break;\n case 16:\n day = day + 1;\n day = day > 7 ? day - 7 : day;\n break;\n default:\n day = this.parent.getErrorStrings()[CommonErrors.Num].toString();\n break;\n }\n return day;\n };\n /**\n * Converts hours, minutes, seconds to the time formatted text.\n *\n * Excel: `TIME(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeTIME = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result;\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n if (args[0].indexOf(this.parent.tic) > -1 && args[0].split(this.parent.tic).join('').trim() === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n else if (args[1].indexOf(this.parent.tic) > -1 && args[1].split(this.parent.tic).join('').trim() === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n else if (args[2].indexOf(this.parent.tic) > -1 && args[2].split(this.parent.tic).join('').trim() === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var hours;\n var minutes;\n var seconds;\n if (this.parent.isCellReference(args[0])) {\n hours = this.parent.getValueFromArg(args[0].split(this.parent.tic).join('')) || '0';\n if (hours.indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n if (args[0].indexOf(this.parent.tic) > -1 && (args[0].split(this.parent.tic).join('') === this.parent.trueValue || args[0].split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n hours = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('') || '0';\n }\n if (this.parent.getErrorStrings().indexOf(hours) > -1) {\n return hours;\n }\n if (isNaN(this.parent.parseFloat(hours)) && !(hours === this.parent.trueValue || hours === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (this.parent.isCellReference(args[1])) {\n minutes = this.parent.getValueFromArg(args[1].split(this.parent.tic).join('')) || '0';\n if (minutes.indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n if (args[1].indexOf(this.parent.tic) > -1 && (args[1].split(this.parent.tic).join('') === this.parent.trueValue || args[1].split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n minutes = this.parent.getValueFromArg(args[1]).split(this.parent.tic).join('') || '0';\n }\n if (this.parent.getErrorStrings().indexOf(minutes) > -1) {\n return minutes;\n }\n if (isNaN(this.parent.parseFloat(minutes)) && !(minutes === this.parent.trueValue || minutes === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (this.parent.isCellReference(args[2])) {\n seconds = this.parent.getValueFromArg(args[2].split(this.parent.tic).join('')) || '0';\n if (seconds.indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n if (args[2].indexOf(this.parent.tic) > -1 && (args[2].split(this.parent.tic).join('') === this.parent.trueValue || args[2].split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n seconds = this.parent.getValueFromArg(args[2]).split(this.parent.tic).join('') || '0';\n }\n if (this.parent.getErrorStrings().indexOf(seconds) > -1) {\n return seconds;\n }\n if (isNaN(this.parent.parseFloat(seconds)) && !(seconds === this.parent.trueValue || seconds === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n hours = hours === this.parent.trueValue ? '1' : (hours === this.parent.falseValue ? '0' : hours);\n minutes = minutes === this.parent.trueValue ? '1' : (minutes === this.parent.falseValue ? '0' : minutes);\n seconds = seconds === this.parent.trueValue ? '1' : (seconds === this.parent.falseValue ? '0' : seconds);\n hours = parseInt(this.parent.parseFloat(hours).toString(), 10);\n minutes = parseInt(this.parent.parseFloat(minutes).toString(), 10);\n seconds = parseInt(this.parent.parseFloat(seconds).toString(), 10);\n if (isNaN(hours) || isNaN(minutes) || isNaN(seconds)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (hours > 32767 || minutes > 32767 || seconds > 32767) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n var value = new Date(1900, 0, 1, hours, minutes, seconds);\n if (value.getFullYear() < 1900) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n var h = value.getHours();\n var m = value.getMinutes();\n var s = value.getSeconds();\n m = m < 10 ? '0' + m : m;\n s = s < 10 ? '0' + s : s;\n h = h < 10 ? '0' + h : h;\n result = h + ':' + m + ':' + s;\n var timeCheck = this.parent.hostParseDate(result.toString());\n if (timeCheck.isTime) {\n result = timeCheck.value;\n }\n return result;\n };\n /**\n * Returns a date with given number of months before or after the specified date.\n *\n * Excel: `EDATE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeEDATE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length !== 2 || isNullOrUndefined(args)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n if (args[0] === '' || args[1] === '') {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n if (args[0].split(this.parent.tic).join('') === '' || args[1].split(this.parent.tic).join('') === ''\n || (args[1].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(args[1].split(this.parent.tic).join(''))))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var dValue;\n var mValue;\n if (this.parent.isCellReference(args[0])) {\n if (args[0].indexOf(':') > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n dValue = this.parent.getValueFromArg(args[0].split(this.parent.tic).join('')) || '0';\n if (dValue.indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (this.parent.getErrorStrings().indexOf(dValue.toString()) > -1) {\n return dValue.toString();\n }\n }\n else {\n dValue = this.parent.getValueFromArg(args[0].split(this.parent.tic).join(''));\n }\n if (this.parent.isCellReference(args[1])) {\n if (args[1].indexOf(':') > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n mValue = this.parent.getValueFromArg(args[1].split(this.parent.tic).join('')) || '0';\n }\n else {\n mValue = this.parent.getValueFromArg(args[1].split(this.parent.tic).join(''));\n }\n if (this.parent.getErrorStrings().indexOf(mValue) > -1) {\n return mValue;\n }\n mValue = parseInt(mValue, 10);\n var date;\n if (this.parent.isNumber(dValue)) {\n dValue = parseInt(dValue, 10);\n if (dValue < 0 || dValue > 2958465) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n date = this.parent.fromOADate(dValue);\n }\n else {\n date = this.parent.checkDateFormat(dValue);\n }\n if (isNaN(mValue) || isNullOrUndefined(this.parent.isDate(date)) || date.getFullYear() > 9999) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var checkDate = date.getDate();\n date.setMonth(date.getMonth() + mValue);\n if (checkDate !== date.getDate()) {\n date.setDate(0);\n //For the date like 31st of January and mValue as 1, the setMonth returns 3rd of March, so we using setDate(0) to return 28th of February.\n }\n var result = dateToInt(date);\n // For 0 and 1 values we are considering the same starting date as 1/1/1900, so for 0 we are decrementing the value with 1.\n if (dValue.toString() === '0') {\n result -= 1;\n }\n if (result < 0 || result > 2958465) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the last day of the month that is a specified number of months before or after an initially supplied start date.\n *\n * Excel: `EOMONTH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeEOMONTH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length !== 2 || isNullOrUndefined(args)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n if (args[0] === '' || args[1] === '') {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n if (args[0].split(this.parent.tic).join('') === '' || args[1].split(this.parent.tic).join('') === ''\n || (args[1].indexOf(this.parent.tic) > -1 && isNaN(this.parent.parseFloat(args[1].split(this.parent.tic).join(''))))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var dateValue;\n var monthValue;\n if (this.parent.isCellReference(args[0])) {\n if (args[0].indexOf(':') > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n dateValue = this.parent.getValueFromArg(args[0].split(this.parent.tic).join('')) || '0';\n if (dateValue.indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n dateValue = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');\n }\n if (this.parent.getErrorStrings().indexOf(dateValue) > -1) {\n return dateValue;\n }\n if (this.parent.isCellReference(args[1])) {\n if (args[1].indexOf(':') > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n monthValue = this.parent.getValueFromArg(args[1].split(this.parent.tic).join('')) || '0';\n }\n else {\n monthValue = this.parent.getValueFromArg(args[1].split(this.parent.tic).join(''));\n }\n if (this.parent.getErrorStrings().indexOf(monthValue) > -1) {\n return monthValue;\n }\n monthValue = parseInt(monthValue, 10);\n var date;\n if (this.parent.isNumber(dateValue)) {\n dateValue = parseInt(dateValue, 10);\n if (dateValue < 0 || dateValue > 2958465) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n date = this.parent.fromOADate(dateValue);\n }\n else {\n date = this.parent.checkDateFormat(dateValue);\n }\n if (isNaN(monthValue) || isNullOrUndefined(this.parent.isDate(date)) || date.getFullYear() > 9999) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n date = new Date(date.getFullYear(), date.getMonth() + (monthValue + 1), 0);\n var result = dateToInt(date);\n if (result < 0 || result > 2958465 || date.getFullYear() < 1900) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Converts a date string into date value.\n *\n * Excel: `DATEVALUE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeDATEVALUE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var dValue;\n var computedDvalue;\n var errCollection = this.parent.getErrorStrings();\n if (args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n dValue = computedDvalue = this.parent.getValueFromArg(args[0]) || '0';\n if (errCollection.indexOf(dValue) > -1) {\n return dValue;\n }\n if (this.parent.isCellReference(args[0])) {\n if ((args[0].indexOf(':') > -1) || dValue.startsWith(this.parent.tic)) {\n return errCollection[CommonErrors.Value];\n }\n }\n else {\n dValue = (args[0]).split(this.parent.tic).join('') || '0';\n }\n if (!(!(this.parent.isNumber(dValue)) && !isNullOrUndefined(this.parent.isDate(dValue)))) {\n if (!this.parent.isNumber(computedDvalue) && this.parent.isDate(computedDvalue)) {\n dValue = computedDvalue;\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n }\n var date = this.parent.parseDate(dValue);\n if (errCollection.indexOf(dValue) > -1) {\n return dValue;\n }\n else if (isNullOrUndefined(date) || date.toString() === 'Invalid Date' ||\n date.getFullYear() < 1900 || date.getFullYear() > 9999) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n else {\n dValue = this.parent.toOADate(date).toString();\n }\n return parseFloat(dValue).toFixed(0).toString();\n };\n /**\n * Returns the number of hours in a specified time string.\n *\n * Excel: `HOUR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeHOUR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length !== 1 || isNullOrUndefined(args) || args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n if (args[0].split(this.parent.tic).join('').trim() === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var cellVal;\n if (this.parent.isCellReference(args[0])) {\n cellVal = this.parent.getValueFromArg(args[0].split(this.parent.tic).join('')) || '0';\n if (cellVal.indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n if (args[0].indexOf(this.parent.tic) > -1 && (args[0].split(this.parent.tic).join('') === this.parent.trueValue || args[0].split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n cellVal = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');\n }\n if (this.parent.getErrorStrings().indexOf(cellVal) > -1) {\n return cellVal;\n }\n cellVal = cellVal === this.parent.trueValue ? '1' : (cellVal === this.parent.falseValue ? '0' : cellVal);\n var date;\n if (this.parent.isNumber(cellVal)) {\n if (this.parent.parseFloat(cellVal) < 0 || this.parent.parseFloat(cellVal) > 2958465) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n date = this.parent.intToTime(cellVal);\n }\n else {\n var dateCheck = this.parent.hostParseDate(cellVal.toString());\n if (dateCheck.isDate || dateCheck.isTime) {\n date = dateCheck.dateObj;\n }\n else {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n if (date.toString() === 'Invalid Date') {\n date = new Date(Date.parse(cellVal));\n }\n if (date.toString() === 'Invalid Date') {\n var argVal = new Date(Date.now()).toLocaleDateString() + ' ' + cellVal;\n date = new Date(Date.parse(argVal));\n }\n if (date.toString() === 'Invalid Date') {\n date = this.parent.fromOADate(this.parent.parseFloat(cellVal));\n }\n if (date.toString() === 'Invalid Date') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (date.getFullYear() < 1900 || date.getFullYear() > 9999) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n return date.getHours();\n };\n /**\n * Returns the number of minutes in a specified time string.\n *\n * Excel: `MINUTE(...)`.\n *\n * @hidden\n * @param {string[]} argArr - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeMINUTE = function () {\n var argArr = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n argArr[_i] = arguments[_i];\n }\n if (argArr.length !== 1 || isNullOrUndefined(argArr) || argArr[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n if (argArr[0].split(this.parent.tic).join('').trim() === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var cellVal;\n if (this.parent.isCellReference(argArr[0])) {\n cellVal = this.parent.getValueFromArg(argArr[0].split(this.parent.tic).join('')) || '0';\n if (cellVal.indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n if (argArr[0].indexOf(this.parent.tic) > -1 && (argArr[0].split(this.parent.tic).join('') === this.parent.trueValue || argArr[0].split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n cellVal = this.parent.getValueFromArg(argArr[0]).split(this.parent.tic).join('');\n }\n if (this.parent.getErrorStrings().indexOf(cellVal) > -1) {\n return cellVal;\n }\n cellVal = cellVal === this.parent.trueValue ? '1' : (cellVal === this.parent.falseValue ? '0' : cellVal);\n var dateVal;\n if (this.parent.isNumber(cellVal)) {\n if (this.parent.parseFloat(cellVal) < 0 || this.parent.parseFloat(cellVal) > 2958465) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n dateVal = this.parent.intToTime(cellVal);\n }\n else {\n var dateCheck = this.parent.hostParseDate(cellVal.toString());\n if (dateCheck.isDate || dateCheck.isTime) {\n dateVal = dateCheck.dateObj;\n }\n else {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n if (dateVal.toString() === 'Invalid Date') {\n dateVal = new Date(Date.parse(cellVal));\n }\n if (dateVal.toString() === 'Invalid Date') {\n var argVal = new Date(Date.now()).toLocaleDateString() + ' ' + cellVal;\n dateVal = new Date(Date.parse(argVal));\n }\n if (dateVal.toString() === 'Invalid Date') {\n dateVal = this.parent.fromOADate(this.parent.parseFloat(cellVal));\n }\n if (dateVal.toString() === 'Invalid Date') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (dateVal.getFullYear() < 1900 || dateVal.getFullYear() > 9999) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n return dateVal.getMinutes();\n };\n /**\n * Returns the number of seconds in a specified time string.\n *\n * Excel: `SECOND(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeSECOND = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length !== 1 || isNullOrUndefined(args) || args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n if (args[0].split(this.parent.tic).join('').trim() === '') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var cellVal;\n if (this.parent.isCellReference(args[0])) {\n cellVal = this.parent.getValueFromArg(args[0].split(this.parent.tic).join('')) || '0';\n if (cellVal.indexOf(this.parent.tic) > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n if (args[0].indexOf(this.parent.tic) > -1 && (args[0].split(this.parent.tic).join('') === this.parent.trueValue || args[0].split(this.parent.tic).join('') === this.parent.falseValue)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n cellVal = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');\n }\n if (this.parent.getErrorStrings().indexOf(cellVal) > -1) {\n return cellVal;\n }\n cellVal = cellVal === this.parent.trueValue ? '1' : (cellVal === this.parent.falseValue ? '0' : cellVal);\n var dateValue;\n if (this.parent.isNumber(cellVal)) {\n if (this.parent.parseFloat(cellVal) < 0 || this.parent.parseFloat(cellVal) > 2958465) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n dateValue = this.parent.intToTime(cellVal);\n }\n else {\n var dateCheck = this.parent.hostParseDate(cellVal.toString());\n if (dateCheck.isDate || dateCheck.isTime) {\n dateValue = dateCheck.dateObj;\n }\n else {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n if (dateValue.toString() === 'Invalid Date') {\n dateValue = new Date(Date.parse(cellVal));\n }\n if (dateValue.toString() === 'Invalid Date') {\n var argVal = (new Date(Date.now())).toLocaleDateString() + ' ' + cellVal;\n dateValue = new Date(Date.parse(argVal));\n }\n if (dateValue.toString() === 'Invalid Date') {\n dateValue = this.parent.fromOADate(this.parent.parseFloat(cellVal));\n }\n if (dateValue.toString() === 'Invalid Date') {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (dateValue.getFullYear() < 1900 || dateValue.getFullYear() > 9999) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n return dateValue.getSeconds();\n };\n /**\n * Returns the current date and time.\n *\n * Excel: `NOW(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n DateTimeFormulas.prototype.ComputeNOW = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length !== 1 || args[0] !== '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n return dateToInt(new Date(Date.now()), true).toString();\n };\n /**\n * Returns the number of months in a specified date string.\n *\n * Excel: `MONTH(...)`.\n *\n * @hidden\n * @param {string[]} argsVal - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeFormulas.prototype.ComputeMONTH = function () {\n var argsVal = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n argsVal[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (argsVal.length === 1 && argsVal[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (argsVal.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var value = this.parent.getValueFromArg(argsVal[0]).trim();\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (this.parent.isCellReference(argsVal[0])) {\n if (value.indexOf(this.parent.tic) > -1) {\n return errCollection[CommonErrors.Value];\n }\n else if (value === '') {\n return 1;\n }\n }\n else {\n if (value.toUpperCase() === '\"TRUE\"' || value.toUpperCase() === '\"FALSE\"') {\n return errCollection[CommonErrors.Value];\n }\n value = value.split(this.parent.tic).join('');\n }\n if (value === '') {\n return errCollection[CommonErrors.Value];\n }\n else if (value === this.parent.trueValue || value === this.parent.falseValue ||\n (Number(value) > -1 && Number(value) < 32)) {\n return 1;\n }\n else if (Number(value) < 0) {\n return errCollection[CommonErrors.Num];\n }\n else if (value.indexOf('%') > -1) {\n value = (Number(value.split('%')[0]) * 0.01).toString();\n }\n if (this.parent.isNumber(value)) {\n value = parseInt((Math.floor(Number(value)).toString()), 10);\n }\n var date = this.parent.parseDate(value);\n if (date.toString() === 'Invalid Date') {\n if (this.parent.isNumber(value)) {\n return errCollection[CommonErrors.Num];\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n }\n else if ((date.getFullYear() < 1900) || (10000 <= date.getFullYear())) {\n return errCollection[CommonErrors.Num];\n }\n return (date.getMonth() + 1).toString();\n };\n return DateTimeFormulas;\n}(FormulaModuleBase));\nexport { DateTimeFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Additional date/time utilities: workdays, network days, week numbers, and calendar offsets.\n *\n * Registered functions: YEAR, WEEKNUM, TIMEVALUE, DAYS360, YEARFRAC, NETWORKDAYS, WORKDAY.\n *\n * @hidden\n */\nvar DateTimeExtraFormulas = /** @class */ (function (_super) {\n __extends(DateTimeExtraFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function DateTimeExtraFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'YEAR', category: 'Date & Time', description: 'Converts a serial number to a year.' },\n { formulaName: 'WEEKNUM', category: 'Date & Time', description: 'Converts a serial number to a number representing where the week falls numerically within a year.' },\n { formulaName: 'TIMEVALUE', category: 'Date & Time', description: 'Converts a time in the form of text to a serial number.' },\n { formulaName: 'DAYS360', category: 'Date & Time', description: 'Calculates the number of days between two dates based on a 360-day year.' },\n { formulaName: 'YEARFRAC', category: 'Date & Time', description: 'Returns the year fraction representing the number of whole days between start_date and end_date.' },\n { formulaName: 'NETWORKDAYS', category: 'Date & Time', description: 'Returns the number of whole workdays between two dates.' },\n { formulaName: 'WORKDAY', category: 'Date & Time', description: 'Returns the serial number of the date before or after a specified number of workdays.' }\n ];\n return _this;\n }\n DateTimeExtraFormulas.prototype.toSerial = function (arg) {\n var errCollection = this.parent.getErrorStrings();\n var value = this.parent.getValueFromArg(arg);\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (!this.parent.isCellReference(arg)) {\n value = this.parent.removeTics(value);\n }\n if (value === '') {\n return errCollection[CommonErrors.Value];\n }\n if (this.parent.isNumber(value)) {\n return this.parent.parseFloat(value);\n }\n var parsed = this.parent.isDate(new Date(value));\n if (parsed) {\n return this.parent.toOADate(parsed);\n }\n return errCollection[CommonErrors.Value];\n };\n /**\n * Converts a serial number to a year.\n *\n * Excel: `YEAR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=YEAR(1)');\n * ```\n */\n DateTimeExtraFormulas.prototype.ComputeYEAR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var serial = this.toSerial(args[0]);\n if (typeof serial === 'string') {\n return serial;\n }\n if (serial < 0) {\n return errCollection[CommonErrors.Num];\n }\n return this.parent.fromOADate(serial).getFullYear().toString();\n };\n /**\n * Converts a serial number to a number representing where the week falls numerically within a year.\n *\n * Excel: `WEEKNUM(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeExtraFormulas.prototype.ComputeWEEKNUM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var serial = this.toSerial(args[0]);\n if (typeof serial === 'string') {\n return serial;\n }\n var returnType = 1;\n if (args.length === 2 && args[1] !== '') {\n var rt = this.resolveNumberArg(args[1]);\n if (typeof rt === 'string') {\n return rt;\n }\n returnType = Math.floor(rt);\n }\n var date = this.parent.fromOADate(serial);\n var yearStart = new Date(date.getFullYear(), 0, 1);\n var dayOffset = 0;\n if (returnType === 2 || returnType === 11) {\n dayOffset = 1; // week begins Monday\n }\n var startDow = (yearStart.getDay() + 7 - dayOffset) % 7;\n var dayOfYear = Math.floor((date.getTime() - yearStart.getTime()) / 86400000);\n var week = Math.floor((dayOfYear + startDow) / 7) + 1;\n if (week < 1) {\n return errCollection[CommonErrors.Num];\n }\n return week.toString();\n };\n /**\n * Converts a time in the form of text to a serial number.\n *\n * Excel: `TIMEVALUE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeExtraFormulas.prototype.ComputeTIMEVALUE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n // eslint-disable-next-line security/detect-unsafe-regex\n var match = text.trim().match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s*(AM|PM)?$/i);\n if (!match) {\n var asDate = this.parent.isDate(new Date(text));\n if (asDate) {\n var serial = this.parent.toOADate(asDate, true);\n return (serial - Math.floor(serial)).toString();\n }\n return errCollection[CommonErrors.Value];\n }\n var hours = parseInt(match[1], 10);\n var minutes = parseInt(match[2], 10);\n var seconds = match[3] ? parseInt(match[3], 10) : 0;\n var ampm = match[4] ? match[4].toUpperCase() : '';\n if (ampm === 'PM' && hours < 12) {\n hours += 12;\n }\n if (ampm === 'AM' && hours === 12) {\n hours = 0;\n }\n if (hours > 23 || minutes > 59 || seconds > 59) {\n return errCollection[CommonErrors.Value];\n }\n return ((hours * 3600 + minutes * 60 + seconds) / 86400).toString();\n };\n /**\n * Calculates the number of days between two dates based on a 360-day year.\n *\n * Excel: `DAYS360(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeExtraFormulas.prototype.ComputeDAYS360 = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var start = this.toSerial(args[0]);\n var end = this.toSerial(args[1]);\n if (typeof start === 'string') {\n return start;\n }\n if (typeof end === 'string') {\n return end;\n }\n var method = false;\n if (args.length === 3 && args[2] !== '') {\n var flag = this.parent.getValueFromArg(args[2]).toUpperCase();\n method = flag === this.parent.trueValue || this.parent.parseFloat(flag) !== 0;\n }\n var d1 = this.parent.fromOADate(start);\n var d2 = this.parent.fromOADate(end);\n var y1 = d1.getFullYear();\n var m1 = d1.getMonth() + 1;\n var day1 = d1.getDate();\n var y2 = d2.getFullYear();\n var m2 = d2.getMonth() + 1;\n var day2 = d2.getDate();\n if (!method) {\n if (day1 === 31) {\n day1 = 30;\n }\n if (day2 === 31 && day1 === 30) {\n day2 = 30;\n }\n }\n else {\n if (day1 === 31) {\n day1 = 30;\n }\n if (day2 === 31) {\n day2 = 30;\n }\n }\n return ((y2 - y1) * 360 + (m2 - m1) * 30 + (day2 - day1)).toString();\n };\n /**\n * Returns the year fraction representing the number of whole days between start_date and end_date.\n *\n * Excel: `YEARFRAC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeExtraFormulas.prototype.ComputeYEARFRAC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var start = this.toSerial(args[0]);\n var end = this.toSerial(args[1]);\n if (typeof start === 'string') {\n return start;\n }\n if (typeof end === 'string') {\n return end;\n }\n var basis = 0;\n if (args.length === 3 && args[2] !== '') {\n var b = this.resolveNumberArg(args[2]);\n if (typeof b === 'string') {\n return b;\n }\n basis = Math.floor(b);\n }\n var days = Math.abs(end - start);\n switch (basis) {\n case 0:\n return (Math.abs(this.parent.parseFloat(this.ComputeDAYS360(args[0], args[1], 'FALSE'))) / 360).toString();\n case 1: {\n var avgYear = 365.25;\n return (days / avgYear).toString();\n }\n case 2:\n return (days / 360).toString();\n case 3:\n return (days / 365).toString();\n case 4:\n return (Math.abs(this.parent.parseFloat(this.ComputeDAYS360(args[0], args[1], 'TRUE'))) / 360).toString();\n default:\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n };\n DateTimeExtraFormulas.prototype.isWeekend = function (date) {\n var dow = date.getDay();\n return dow === 0 || dow === 6;\n };\n DateTimeExtraFormulas.prototype.holidaySet = function (arg) {\n var set = new Set();\n if (!arg || arg === '') {\n return set;\n }\n var errCollection = this.parent.getErrorStrings();\n if (this.parent.isCellReference(arg) && arg.indexOf(':') > -1) {\n var cells = this.parent.getCellCollection(arg);\n var list = Array.isArray(cells) ? cells : [cells];\n for (var i = 0; i < list.length; i++) {\n var serial = this.toSerial(list[i]);\n if (typeof serial === 'string') {\n if (errCollection.indexOf(serial) > -1) {\n return serial;\n }\n continue;\n }\n set.add(Math.floor(serial));\n }\n }\n else {\n var serial = this.toSerial(arg);\n if (typeof serial === 'string') {\n return serial;\n }\n set.add(Math.floor(serial));\n }\n return set;\n };\n /**\n * Returns the number of whole workdays between two dates.\n *\n * Excel: `NETWORKDAYS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeExtraFormulas.prototype.ComputeNETWORKDAYS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var start = this.toSerial(args[0]);\n var end = this.toSerial(args[1]);\n if (typeof start === 'string') {\n return start;\n }\n if (typeof end === 'string') {\n return end;\n }\n var holidays = this.holidaySet(args[2]);\n if (!(holidays instanceof Set)) {\n return holidays;\n }\n var step = start <= end ? 1 : -1;\n var count = 0;\n for (var s = Math.floor(start); step > 0 ? s <= Math.floor(end) : s >= Math.floor(end); s += step) {\n var d = this.parent.fromOADate(s);\n if (!this.isWeekend(d) && !holidays.has(s)) {\n count += step;\n }\n }\n return count.toString();\n };\n /**\n * Returns the serial number of the date before or after a specified number of workdays.\n *\n * Excel: `WORKDAY(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeExtraFormulas.prototype.ComputeWORKDAY = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var start = this.toSerial(args[0]);\n var daysArg = this.resolveNumberArg(args[1]);\n if (typeof start === 'string') {\n return start;\n }\n if (typeof daysArg === 'string') {\n return daysArg;\n }\n var days = Math.trunc(daysArg);\n var holidays = this.holidaySet(args[2]);\n if (!(holidays instanceof Set)) {\n return holidays;\n }\n var current = Math.floor(start);\n var step = days >= 0 ? 1 : -1;\n var remaining = Math.abs(days);\n while (remaining > 0) {\n current += step;\n var d = this.parent.fromOADate(current);\n if (!this.isWeekend(d) && !holidays.has(current)) {\n remaining--;\n }\n if (current < 0) {\n return errCollection[CommonErrors.Num];\n }\n }\n return current.toString();\n };\n return DateTimeExtraFormulas;\n}(FormulaModuleBase));\nexport { DateTimeExtraFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNumber } from '../common/number-date';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Boolean logic, conditional branching (IF), and error-coalescing (IFERROR) functions.\n *\n * Registered functions: IF, AND, OR, NOT, IFS, IFERROR.\n *\n * @hidden\n */\nvar LogicalFormulas = /** @class */ (function (_super) {\n __extends(LogicalFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function LogicalFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'IF', category: 'Logical', description: 'Returns one value if a logical expression is TRUE and another if it is FALSE' },\n { formulaName: 'AND', category: 'Logical', description: 'Returns TRUE if all the arguments are considered TRUE, and FALSE otherwise.' },\n { formulaName: 'OR', category: 'Logical', description: 'Returns TRUE if any arguments considered TRUE, and all the arguments are FALSE it will return FALSE.' },\n { formulaName: 'NOT', category: 'Logical', description: 'Returns the inverse of a given logical expression.' },\n { formulaName: 'IFS', category: 'Logical', description: 'Checks multiple conditions and returns a value corresponding to the first TRUE result.' },\n { formulaName: 'IFERROR', category: 'Logical', description: 'Returns a value you specify if a formula evaluates to an error; otherwise, it returns the result of the formula.' }\n ];\n return _this;\n }\n /**\n * Returns one value if a logical expression is TRUE and another if it is FALSE.\n *\n * Excel: `IF(...)`.\n *\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=IF(A1>0,\"Yes\",\"No\")');\n * ```\n */\n LogicalFormulas.prototype.ComputeIF = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var nestedFormula;\n if (args.length && args[args.length - 1] === 'nestedFormulaTrue') {\n nestedFormula = true;\n args.pop();\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n if (this.parent.getErrorStrings().indexOf(args[0]) > -1) {\n return args[0];\n }\n var argArr = args;\n var skipTick;\n if (argArr.length === 4 && argArr[3] === 'nestedFormulaTrue') {\n skipTick = true;\n argArr.pop();\n }\n var condition;\n var result;\n if (argArr.length > 3 || argArr.length === 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n else if (argArr.length <= 3) {\n var cellValues = void 0;\n var cellVal = void 0;\n var val = '';\n condition = this.parent.getValueFromArg(argArr[0]);\n if (this.parent.getErrorStrings().indexOf(condition) > -1) {\n return condition;\n }\n var condUpper = condition.toUpperCase();\n var parsedVal = this.parent.parseFloat(condition);\n if (condUpper === this.parent.trueValue || (parsedVal < 0 || parsedVal > 0)) {\n if (nestedFormula && argArr[1].includes(':')) {\n cellValues = this.parent.getCellCollection(argArr[1]);\n for (var i = 0; i < cellValues.length; i++) {\n cellVal = this.parent.getValueFromArg(cellValues[i]);\n if (!isNaN(this.parent.parseFloat(cellVal))) {\n val += cellVal + ',';\n }\n }\n return val.slice(0, val.length - 1);\n }\n result = argArr[1] === '' ? '0' : this.parent.getValueFromArg(argArr[1], undefined, undefined, undefined, true);\n }\n else if (condUpper === this.parent.falseValue || parsedVal === 0) {\n if (isNullOrUndefined(argArr[2])) {\n return this.parent.falseValue;\n }\n if (nestedFormula && argArr[2].includes(':')) {\n cellValues = this.parent.getCellCollection(argArr[2]);\n for (var i = 0; i < cellValues.length; i++) {\n cellVal = this.parent.getValueFromArg(cellValues[i]);\n if (!isNaN(this.parent.parseFloat(cellVal))) {\n val += cellVal + ',';\n }\n }\n return val.slice(0, val.length - 1);\n }\n result = argArr[2] === '' ? '0' : this.parent.getValueFromArg(argArr[2], undefined, undefined, undefined, true);\n }\n else {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.Requires3Args];\n }\n }\n var indexOfTic = result.indexOf(this.parent.tic);\n if (!skipTick && indexOfTic > -1) {\n return result.split(this.parent.tic).join('');\n }\n else if (skipTick && !isNumber(result) && indexOfTic === -1 && result !== this.parent.trueValue &&\n result !== this.parent.falseValue && !this.parent.isCellReference(result)) {\n return '\"' + result + '\"';\n }\n else {\n return result === '' ? '0' : result;\n }\n };\n /**\n * Returns TRUE if all the arguments are considered TRUE, and FALSE otherwise.\n *\n * Excel: `AND(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n LogicalFormulas.prototype.ComputeAND = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n if (isNullOrUndefined(args) || (argArr.length === 1 && argArr[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n return this.parent.computeAndOrNot(argArr, 'and');\n };\n /**\n * Returns TRUE if any arguments considered TRUE, and all the arguments are FALSE it will return FALSE.\n *\n * Excel: `OR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n LogicalFormulas.prototype.ComputeOR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n if (isNullOrUndefined(args) || (argArr.length === 1 && argArr[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n return this.parent.computeAndOrNot(argArr, 'or');\n };\n /**\n * Returns the inverse of a given logical expression.\n *\n * Excel: `NOT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n LogicalFormulas.prototype.ComputeNOT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n if (isNullOrUndefined(args) || (args.length > 1 || args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n return this.parent.computeAndOrNot(argArr, 'not');\n };\n /**\n * Checks multiple conditions and returns a value corresponding to the first TRUE result.\n *\n * Excel: `IFS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LogicalFormulas.prototype.ComputeIFS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n if (isNullOrUndefined(args) || (argArr.length === 1 && argArr[0] === '') || argArr.length % 2 !== 0) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var condition = '';\n var result = '';\n for (var i = 0; i < argArr.length; i++) {\n condition = this.parent.getValueFromArg(argArr[i]);\n if (argArr[i] === '') {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n if (this.parent.getErrorStrings().indexOf(condition) > -1) {\n return condition;\n }\n if (condition !== this.parent.trueValue && condition !== this.parent.falseValue) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (condition === this.parent.trueValue) {\n if (this.parent.isCellReference(argArr[i + 1].split(this.parent.tic).join('')) || argArr[i + 1].includes(this.parent.arithMarker)) {\n result = this.parent.getValueFromArg(argArr[i + 1]);\n result = result === '' ? '0' : result;\n }\n else {\n result = argArr[i + 1] === '' ? '0' : this.parent.getValueFromArg(argArr[i + 1]);\n if (result.indexOf(this.parent.tic) > -1) {\n result = result.split(this.parent.tic).join('');\n }\n }\n i = i + 1;\n return result;\n }\n else if (condition === this.parent.falseValue) {\n i = i + 1;\n }\n }\n return this.parent.getErrorStrings()[CommonErrors.NA];\n };\n /**\n * Returns a value you specify if a formula evaluates to an error; otherwise, it returns the result of the formula.\n *\n * Excel: `IFERROR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LogicalFormulas.prototype.ComputeIFERROR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var argArr = args;\n var condition;\n if (argArr.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (this.parent.isCellReference(argArr[0])) {\n condition = this.parent.getValueFromArg(argArr[0]) || '0';\n if (this.parent.getErrorStrings().indexOf(condition) === -1 && condition !== 'NaN') {\n return condition;\n }\n }\n else {\n condition = this.parent.getValueFromArg(argArr[0], null, true) || '0';\n if (this.parent.getErrorStrings().indexOf(condition) === -1 && condition !== 'NaN') {\n condition = condition.split(this.parent.tic).join('').trim();\n return condition;\n }\n }\n if (this.parent.isCellReference(argArr[1])) {\n condition = this.parent.getValueFromArg(argArr[1]) || '0';\n }\n else {\n condition = this.parent.getValueFromArg(argArr[1]) || '0';\n condition = condition.split(this.parent.tic).join('').trim();\n }\n return condition;\n };\n return LogicalFormulas;\n}(FormulaModuleBase));\nexport { LogicalFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Extended logical helpers including IFS, SWITCH, XOR, and multi-condition boolean tests.\n *\n * Registered functions: TRUE, FALSE, XOR, IFNA, SWITCH.\n *\n * @hidden\n */\nvar LogicalExtraFormulas = /** @class */ (function (_super) {\n __extends(LogicalExtraFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function LogicalExtraFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'TRUE', category: 'Logical', description: 'Returns the logical value TRUE.' },\n { formulaName: 'FALSE', category: 'Logical', description: 'Returns the logical value FALSE.' },\n { formulaName: 'XOR', category: 'Logical', description: 'Returns a logical exclusive OR of all arguments.' },\n { formulaName: 'IFNA', category: 'Logical', description: 'Returns the value you specify if the expression resolves to #N/A; otherwise returns the result of the expression.' },\n { formulaName: 'SWITCH', category: 'Logical', description: 'Evaluates an expression against a list of values and returns the result corresponding to the first matching value.' }\n ];\n return _this;\n }\n /**\n * Returns the logical value TRUE.\n *\n * Excel: `TRUE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=TRUE(1)');\n * ```\n */\n LogicalExtraFormulas.prototype.ComputeTRUE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args && args.length === 1 && args[0] === '') {\n return this.parent.trueValue;\n }\n if (args && args.length > 0 && !(args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n return this.parent.trueValue;\n };\n /**\n * Returns the logical value FALSE.\n *\n * Excel: `FALSE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n LogicalExtraFormulas.prototype.ComputeFALSE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args && args.length === 1 && args[0] === '') {\n return this.parent.falseValue;\n }\n if (args && args.length > 0 && !(args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n return this.parent.falseValue;\n };\n LogicalExtraFormulas.prototype.isTruthy = function (value) {\n var upper = value.toUpperCase();\n if (upper === this.parent.trueValue) {\n return true;\n }\n if (upper === this.parent.falseValue || value === '') {\n return false;\n }\n var num = this.parent.parseFloat(value);\n return !isNaN(num) && num !== 0;\n };\n /**\n * Returns a logical exclusive OR of all arguments.\n *\n * Excel: `XOR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n LogicalExtraFormulas.prototype.ComputeXOR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var trueCount = 0;\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n if (this.parent.isCellReference(arg) && arg.indexOf(':') > -1) {\n var cells = this.parent.getCellCollection(arg);\n var list = Array.isArray(cells) ? cells : [cells];\n for (var c = 0; c < list.length; c++) {\n var val = this.parent.getValueFromArg(list[c]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (this.isTruthy(val)) {\n trueCount++;\n }\n }\n }\n else {\n var val = this.parent.getValueFromArg(arg);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (this.isTruthy(val)) {\n trueCount++;\n }\n }\n }\n return (trueCount % 2 === 1) ? this.parent.trueValue : this.parent.falseValue;\n };\n /**\n * Returns the value you specify if the expression resolves to #N/A; otherwise returns the result of the expression.\n *\n * Excel: `IFNA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LogicalExtraFormulas.prototype.ComputeIFNA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var value = this.parent.getValueFromArg(args[0]);\n if (value === this.parent.getErrorStrings()[CommonErrors.NA] || value === '#N/A') {\n return this.parent.getValueFromArg(args[1]);\n }\n return value === '' ? '0' : value;\n };\n /**\n * Evaluates an expression against a list of values and returns the result corresponding to the first matching value.\n *\n * Excel: `SWITCH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LogicalExtraFormulas.prototype.ComputeSWITCH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var expression = this.parent.getValueFromArg(args[0]);\n if (errCollection.indexOf(expression) > -1) {\n return expression;\n }\n var pairs = Math.floor((args.length - 1) / 2);\n var defaultValue = errCollection[CommonErrors.NA];\n var hasDefault = (args.length - 1) % 2 === 1;\n if (hasDefault) {\n defaultValue = this.parent.getValueFromArg(args[args.length - 1]);\n }\n for (var i = 0; i < pairs; i++) {\n var valueIdx = 1 + i * 2;\n var resultIdx = valueIdx + 1;\n var matchVal = this.parent.getValueFromArg(args[valueIdx]);\n if (errCollection.indexOf(matchVal) > -1) {\n return matchVal;\n }\n if (matchVal === expression ||\n (!isNaN(this.parent.parseFloat(matchVal)) &&\n this.parent.parseFloat(matchVal) === this.parent.parseFloat(expression))) {\n var result = this.parent.getValueFromArg(args[resultIdx]);\n return result === '' ? '0' : this.parent.removeTics(result);\n }\n }\n return defaultValue === '' ? '0' : this.parent.removeTics(defaultValue);\n };\n return LogicalExtraFormulas;\n}(FormulaModuleBase));\nexport { LogicalExtraFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors, getSkeletonVal } from '../common/index';\nimport { getAlphalabel } from '../base/index';\nimport { isNullOrUndefined, Internationalization } from '@syncfusion/ej2-base';\nimport { dateToInt, isNumber } from '../common/number-date';\nimport { getCellAddress, getRangeIndexes } from '../common/address';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Vertical and horizontal table lookups (VLOOKUP, HLOOKUP) and reference indexing.\n *\n * Registers 9 functions including CHOOSE, INDEX, MATCH, LOOKUP, VLOOKUP, and others.\n *\n * @hidden\n */\nvar LookupFormulas = /** @class */ (function (_super) {\n __extends(LookupFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function LookupFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'CHOOSE', category: 'Lookup & Reference', description: 'Returns a value from a list, given an index number.' },\n { formulaName: 'INDEX', category: 'Lookup & Reference', description: 'Returns a value from a table, given a row and column number.' },\n { formulaName: 'MATCH', category: 'Lookup & Reference', description: 'Returns the relative position of an checked item in range that matches a specified value in a specified order' },\n { formulaName: 'LOOKUP', category: 'Lookup & Reference', description: 'Looks for a value in a one-row or one-column range, then returns a value from the same position in a second one-row or one-column range.' },\n { formulaName: 'VLOOKUP', category: 'Lookup & Reference', description: 'Looks for a specific value in the first column of a lookup range and returns a corresponding value from a different column within the same row.' },\n { formulaName: 'HLOOKUP', category: 'Lookup & Reference', description: 'Looks for a value in the top row of the array of values and then returns a value in the same column from a row in the array that you specify.' },\n { formulaName: 'ADDRESS', category: 'Lookup & Reference', description: 'Returns a cell reference as text, given specified row and column numbers.' },\n { formulaName: 'SUBTOTAL', category: 'Lookup & Reference', description: 'Returns a subtotal in a list or database.' },\n { formulaName: 'TEXT', category: 'Lookup & Reference', description: 'Converts a value to text in specified number format.' }\n ];\n return _this;\n }\n /**\n * Returns a value from a list, given an index number.\n *\n * Excel: `CHOOSE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=CHOOSE(1)');\n * ```\n */\n LookupFormulas.prototype.ComputeCHOOSE = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || (args[0] === '' && args.length === 1)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length < 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var errCollection = this.parent.getErrorStrings();\n var processArgs = function (actuaValue) {\n actuaValue = _this.parent.getValueFromArg(actuaValue);\n if (actuaValue.toUpperCase() === _this.parent.trueValue) {\n actuaValue = '1';\n }\n else if (actuaValue.toUpperCase() === _this.parent.falseValue) {\n actuaValue = '0';\n }\n return actuaValue;\n };\n var getIndexValue;\n getIndexValue = processArgs(args[0]);\n if (errCollection.indexOf(getIndexValue) > -1) {\n return getIndexValue;\n }\n if (this.parent.isCellReference(args[0])) {\n if (args[0].indexOf(':') > -1) {\n return errCollection[CommonErrors.Value];\n }\n }\n else {\n getIndexValue = this.parent.removeTics(getIndexValue);\n if (getIndexValue.split('%').length === 2 && this.parent.isNumber(getIndexValue.split('%')[0])) {\n getIndexValue = (Number(getIndexValue.split('%')[0]) * 0.01).toString();\n }\n }\n getIndexValue = Math.floor(this.parent.parseFloat(getIndexValue));\n if (getIndexValue < 1 || isNaN(getIndexValue) || isNullOrUndefined(args[getIndexValue])) {\n return errCollection[CommonErrors.Value];\n }\n getIndexValue = args[getIndexValue];\n if (getIndexValue === '') {\n getIndexValue = '0';\n }\n if (this.parent.isCellReference(getIndexValue)) {\n if (getIndexValue.indexOf(':') > -1) {\n return errCollection[CommonErrors.Value];\n }\n return this.parent.getValueFromArg(getIndexValue);\n }\n else {\n if (getIndexValue.indexOf(this.parent.tic) > -1 && (errCollection.indexOf(getIndexValue.split(this.parent.tic).join('')) > -1 ||\n (this.parent.removeTics(getIndexValue).match(/^(\\d*\\.\\d+|\\d+)\\s*[-*/]\\s*(\\d*\\.\\d+|\\d+)$/)))) {\n getIndexValue = this.parent.removeTics(getIndexValue);\n }\n getIndexValue = this.parent.removeTics(this.parent.getValueFromArg(getIndexValue));\n if (getIndexValue.indexOf(this.parent.tic + this.parent.tic) > -1) {\n return getIndexValue.replace(/\"\"/g, this.parent.tic);\n }\n if (getIndexValue.split('%').length === 2 && this.parent.isNumber(getIndexValue.split('%')[0])) {\n getIndexValue = (Number(getIndexValue.split('%')[0]) * 0.01).toString();\n }\n return getIndexValue;\n }\n };\n /**\n * Returns a value from a table, given a row and column number.\n *\n * Excel: `INDEX(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupFormulas.prototype.ComputeINDEX = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var nestedFormula;\n var value;\n var errCollection = this.parent.getErrorStrings();\n if (args.length && args[args.length - 1] === 'nestedFormulaTrue') {\n nestedFormula = true;\n args.pop();\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length < 2 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n else if (args[0] === '' || args[3] === '' || (args[3] && (args[3] === '0' || args[3] === 'FALSE'))) {\n return errCollection[CommonErrors.Value];\n }\n var row;\n var col;\n var area;\n var processArgs = function (actualValue) {\n if (isNullOrUndefined(actualValue) || actualValue === '') {\n return 1;\n }\n var value = _this.parent.getValueFromArg(actualValue);\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (value.toUpperCase() === _this.parent.trueValue) {\n value = '1';\n }\n else if (value.toUpperCase() === _this.parent.falseValue) {\n value = '0';\n }\n if (value.indexOf(_this.parent.tic) > -1) {\n value = _this.parent.removeTics(value);\n if (actualValue.indexOf(_this.parent.tic) === -1 || value.trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n }\n if (value.split('%').length === 2 && _this.parent.isNumber(value.split('%')[0])) {\n value = (Number(value.split('%')[0]) / 100).toString();\n }\n value = parseInt(Number(value).toString(), 10);\n if (isNaN(value) || value < 0) {\n return errCollection[CommonErrors.Value];\n }\n else if (value === 0) {\n value = 1;\n }\n return value;\n };\n if (args[3]) {\n area = processArgs(args[3]);\n if (errCollection.indexOf(area.toString()) > -1) {\n return area.toString();\n }\n }\n if (args[0].startsWith(this.parent.tic) && args[0].endsWith(this.parent.tic)) {\n args[0] = args[0].substring(1, args[0].length - 1);\n }\n var rangeArr = args[0].split(this.parent.getParseArgumentSeparator());\n args[0] = rangeArr[area ? area - 1 : 0];\n if (!args[0]) {\n return errCollection[CommonErrors.Ref];\n }\n value = args[0];\n row = processArgs(args[1]);\n if (errCollection.indexOf(row.toString()) > -1) {\n return row.toString();\n }\n col = processArgs(args[2]);\n if (errCollection.indexOf(col.toString()) > -1) {\n return col.toString();\n }\n var i = value.indexOf(':');\n if (i === -1) {\n if (row > 1 || col > 1) {\n return errCollection[CommonErrors.Ref];\n }\n value = this.parent.isCellReference(value) ? this.parent.getValueFromArg(value) : value;\n }\n else {\n var startRow = this.parent.rowIndex(value.substring(0, i));\n var endRow = this.parent.rowIndex(value.substring(i + 1));\n var startCol = this.parent.colIndex(value.substring(0, i));\n var endCol = this.parent.colIndex(value.substring(i + 1));\n if (row > endRow - startRow + 1 || col > endCol - startCol + 1) {\n return errCollection[CommonErrors.Ref];\n }\n row = startRow + row - 1;\n col = startCol + col - 1;\n value = this.parent.getValueFromArg(this.getSheetReference(value) + this.parent.convertAlpha(col) + row);\n }\n if (value === '') {\n return 0;\n }\n if (nestedFormula && errCollection.indexOf(value) === -1 &&\n !this.parent.isNumber(value) && value !== this.parent.trueValue && value !== this.parent.falseValue) {\n return this.parent.tic + value + this.parent.tic;\n }\n return value;\n };\n /**\n * Returns the relative position of an checked item in range that matches a specified value in a specified order.\n *\n * Excel: `MATCH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupFormulas.prototype.ComputeMATCH = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args.slice();\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(argArr) || (argArr.length === 1 && argArr[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (argArr.length < 2 || argArr.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n // args[0] codes\n argArr[0] = this.parent.getValueFromArg(args[0]);\n var isStringValue = argArr[0].indexOf(this.parent.tic) > -1;\n argArr[0] = argArr[0].split(this.parent.tic).join('');\n if (errCollection.indexOf(argArr[0]) > -1) {\n return argArr[0];\n }\n if (argArr[0] === '') {\n return errCollection[CommonErrors.NA];\n }\n if (isNaN(Number(argArr[0]))) {\n isStringValue = true;\n }\n // args[2] codes\n var matchType;\n if (isNullOrUndefined(args[2])) {\n argArr[2] = '1';\n }\n else {\n argArr[2] = this.parent.getValueFromArg(argArr[2]);\n if ((argArr[2].indexOf(this.parent.tic) > -1) && isNaN(Number(argArr[2].split(this.parent.tic).join('')))) {\n return errCollection[CommonErrors.Value];\n }\n if (argArr[2].toUpperCase() === this.parent.trueValue) {\n argArr[2] = '1';\n }\n else if (argArr[2].toUpperCase() === this.parent.falseValue) {\n argArr[2] = '0';\n }\n }\n matchType = parseFloat(argArr[2]);\n if ([-1, 0, 1].indexOf(matchType) === -1) {\n matchType = 0;\n }\n // args[1] codes\n var valueCollection = [];\n var isStringCollection = false;\n var grid = this.parent.grid;\n var curGrid = this.parent.grid;\n var isWildCardVal;\n if (argArr[1].indexOf(':') > -1 || this.parent.isCellReference(argArr[1])) {\n var cellIdxs = getRangeIndexes(argArr[1]);\n var startRow = cellIdxs[0];\n var startCol = cellIdxs[1];\n var endRow_1 = cellIdxs[2];\n var endCol_1 = cellIdxs[3];\n if (startRow >= 1048576 || endRow_1 >= 1048576 || startCol >= 16384 || endCol_1 >= 16384) {\n return errCollection[CommonErrors.Name];\n }\n if (startRow !== endRow_1 && startCol !== endCol_1) {\n return errCollection[CommonErrors.NA];\n }\n var sheetToken = '';\n var family = this.parent.getSheetFamilyItem(grid);\n if (argArr[1].startsWith('!')) {\n sheetToken = argArr[1].substring(0, argArr[1].replace('!', '').indexOf('!') + 2);\n if (family.tokenToParentObject !== null) {\n grid = family.tokenToParentObject.get(sheetToken);\n }\n }\n else if (family.parentObjectToToken !== null) {\n sheetToken = family.parentObjectToToken.get(grid);\n }\n var sheetId = this.parent.getSheetId(grid);\n var getCellValue = this.parent.getCellValueFn(grid, this.parent.cell, sheetId, true);\n var j_1 = 0;\n var cellValue_1;\n var performAction = void 0;\n var result_1;\n if (matchType === 0) {\n isWildCardVal = argArr[0].indexOf('*') > -1 || argArr[0].indexOf('?') > -1;\n performAction = function () {\n if (isWildCardVal) {\n cellValue_1 = _this.parent.findWildCardValue(argArr[0], cellValue_1);\n }\n if (argArr[0] === cellValue_1) {\n endCol_1 = -2;\n endRow_1 = -2;\n result_1 = j_1 + 1;\n return;\n }\n j_1++;\n };\n }\n else {\n performAction = function () {\n valueCollection[j_1] = cellValue_1;\n j_1++;\n };\n }\n for (var r = startRow; r <= endRow_1; r++) {\n for (var c = startCol; c <= endCol_1; c++) {\n cellValue_1 = getCellValue(r + 1, c + 1, getCellAddress(r, c));\n if (!isStringCollection && isNaN(Number(cellValue_1))) {\n isStringCollection = true;\n }\n performAction();\n }\n }\n if (result_1) {\n this.parent.grid = curGrid;\n return result_1;\n }\n if (isStringValue !== isStringCollection) {\n this.parent.grid = curGrid;\n return errCollection[CommonErrors.NA];\n }\n }\n else if (!isNullOrUndefined(argArr[1]) && argArr[1].includes(this.parent.tic + this.parent.tic)) {\n var criterias = argArr[1].split(this.parent.tic + this.parent.tic);\n criterias.forEach(function (criteria) {\n criteria = criteria.trim().split(_this.parent.tic).join('');\n if (criteria) {\n valueCollection.push(criteria);\n }\n });\n }\n var index = 0;\n var indexVal = '';\n var isIndexFound = false;\n var matchValue = !isNaN(Number(argArr[0])) ? Number(argArr[0]) : argArr[0];\n for (var i = 0; i < valueCollection.length; i++) {\n if (valueCollection[i] === '') {\n if (i === (valueCollection.length - 1)) {\n valueCollection.pop();\n }\n continue;\n }\n else if (matchType === -1 && (isStringValue || isStringCollection)) {\n break;\n }\n var matchCollectionValue = !isNaN(Number(valueCollection[i])) ?\n Number(valueCollection[i]) : valueCollection[i];\n if (matchType === 1) {\n if (matchValue === matchCollectionValue) {\n index = i + 1;\n isIndexFound = true;\n if (isNaN(Number(argArr[0]))) {\n isStringValue = false;\n }\n }\n else if ((matchValue > matchCollectionValue) && !isStringValue && !isIndexFound) {\n if (!indexVal || (matchCollectionValue > (!isNaN(Number(indexVal)) ? Number(indexVal) : indexVal))) {\n index = i + 1;\n indexVal = valueCollection[i];\n }\n }\n }\n else if (matchType === 0) {\n if (isWildCardVal) {\n valueCollection[i] = this.parent.findWildCardValue(argArr[0], valueCollection[i]);\n }\n if (argArr[0] === valueCollection[i]) {\n return i + 1;\n }\n }\n else if (matchType === -1) {\n if ((Number(valueCollection[i]) > Number(valueCollection[i + 1]))\n || i === valueCollection.length - 1) {\n if (matchValue === matchCollectionValue) {\n index = i + 1;\n matchValue = undefined;\n }\n else if (matchValue < matchCollectionValue) {\n if (!indexVal || (matchCollectionValue < (!isNaN(Number(indexVal)) ? Number(indexVal) : indexVal))) {\n index = i + 1;\n indexVal = valueCollection[i];\n }\n }\n }\n else {\n this.parent.grid = curGrid;\n return errCollection[CommonErrors.NA];\n }\n }\n }\n if (isStringValue && isStringCollection && matchType === 1) {\n index = valueCollection.length;\n }\n this.parent.grid = curGrid;\n return index ? index : errCollection[CommonErrors.NA];\n };\n /**\n * Looks for a value in a one-row or one-column range, then returns a value from the same position in a second one-row or one-column range.\n *\n * Excel: `LOOKUP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupFormulas.prototype.ComputeLOOKUP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n if (isNullOrUndefined(argArr) || (argArr.length === 1 && argArr[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n return this.parent.computeLookup(argArr);\n };\n /**\n * Looks for a specific value in the first column of a lookup range and returns a corresponding value from a different column within the same row.\n *\n * Excel: `VLOOKUP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupFormulas.prototype.ComputeVLOOKUP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n return this.parent.computeVHLookup(argArr, true);\n };\n /**\n * Looks for a value in the top row of the array of values and then returns a value in the same column from a row in the array that you specify.\n *\n * Excel: `HLOOKUP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupFormulas.prototype.ComputeHLOOKUP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n return this.parent.computeVHLookup(argArr);\n };\n /**\n * Returns a cell reference as text, given specified row and column numbers.\n *\n * Excel: `ADDRESS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupFormulas.prototype.ComputeADDRESS = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0].trim() === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length < 2 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n else if (args[0].split(this.parent.tic).join('').trim() === '' || args[1].split(this.parent.tic).join('').trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n var processArgs = function (actualValue) {\n var value = _this.parent.getValueFromArg(actualValue).trim();\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (value.toUpperCase() === _this.parent.trueValue) {\n value = '1';\n }\n else if (value.toUpperCase() === _this.parent.falseValue) {\n value = '0';\n }\n if (_this.parent.isCellReference(actualValue) && value.indexOf(_this.parent.tic) > -1) {\n return errCollection[CommonErrors.Value];\n }\n value = _this.parent.removeTics(value);\n if (value.split('%').length === 2 && _this.parent.isNumber(value.split('%')[0])) {\n value = (Number(value.split('%')[0]) / 100).toString();\n }\n return value;\n };\n /* For argArr[0] */\n var rowIndex = processArgs(args[0], 0);\n if (errCollection.indexOf(rowIndex) > -1) {\n return rowIndex;\n }\n rowIndex = Number(rowIndex);\n if (isNaN(rowIndex) || rowIndex < 1) {\n return errCollection[CommonErrors.Value];\n }\n else {\n rowIndex = rowIndex.toString();\n }\n /* For argArr[1] */\n var colIndex = processArgs(args[1], 1);\n if (errCollection.indexOf(colIndex) > -1) {\n return colIndex;\n }\n colIndex = Number(colIndex);\n if (isNaN(colIndex) || colIndex < 1) {\n return errCollection[CommonErrors.Value];\n }\n else {\n colIndex = colIndex.toString();\n }\n /* For argArr[2] */\n var absIndex;\n var refStyle;\n if (isNullOrUndefined(args[2]) || args[2].trim() === '') {\n absIndex = '1';\n }\n else {\n absIndex = processArgs(args[2], 2);\n if (errCollection.indexOf(absIndex) > -1) {\n return absIndex;\n }\n absIndex = Number(absIndex);\n if (isNaN(absIndex) || absIndex < 1 || absIndex > 4) {\n return errCollection[CommonErrors.Value];\n }\n else {\n absIndex = absIndex.toString();\n }\n }\n if (isNullOrUndefined(args[3]) || args[3].trim() === '') {\n refStyle = '1';\n }\n else {\n refStyle = processArgs(args[3], 3);\n if (errCollection.indexOf(refStyle) > -1) {\n return refStyle;\n }\n if (refStyle.toUpperCase() === this.parent.trueValue || Number(refStyle) > 1) {\n refStyle = '1';\n }\n else if (refStyle === '' || refStyle.toUpperCase() === this.parent.falseValue) {\n refStyle = '0';\n }\n }\n if (refStyle === '1') {\n if (absIndex === '1') {\n value = '$' + getAlphalabel(parseInt(colIndex, 10)) + '$' + parseInt(rowIndex, 10);\n }\n else if (absIndex === '2') {\n value = getAlphalabel(parseInt(colIndex, 10)) + '$' + parseInt(rowIndex, 10);\n }\n else if (absIndex === '3') {\n value = '$' + getAlphalabel(parseInt(colIndex, 10)) + parseInt(rowIndex, 10);\n }\n else if (absIndex === '4') {\n value = getAlphalabel(parseInt(colIndex, 10)) + parseInt(rowIndex, 10);\n }\n }\n else if (refStyle === '0') {\n if (absIndex === '1') {\n value = 'R' + parseInt(rowIndex, 10) + 'C' + parseInt(colIndex, 10);\n }\n else if (absIndex === '2') {\n value = 'R' + parseInt(rowIndex, 10) + 'C[' + parseInt(colIndex, 10) + ']';\n }\n else if (absIndex === '3') {\n value = 'R[' + parseInt(rowIndex, 10) + ']C' + parseInt(colIndex, 10);\n }\n else if (absIndex === '4') {\n value = 'R[' + parseInt(rowIndex, 10) + ']C[' + parseInt(colIndex, 10) + ']';\n }\n }\n else {\n return errCollection[CommonErrors.Name];\n }\n var val;\n if (!isNullOrUndefined(args[4]) && args[4] !== '') {\n val = this.parent.getValueFromArg(args[4]).split(this.parent.tic).join('');\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n }\n if (!isNullOrUndefined(val)) {\n value = val + '!' + value;\n }\n return value;\n };\n /**\n * Returns a subtotal in a list or database.\n *\n * Excel: `SUBTOTAL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupFormulas.prototype.ComputeSUBTOTAL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n var value;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length < 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n value = this.parent.getValueFromArg(args[0]).trim();\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (value.split(this.parent.tic).join('').trim() === '') {\n return errCollection[CommonErrors.Value];\n }\n if (!this.parent.isCellReference(args[0])) {\n value = this.parent.removeTics(value);\n }\n if (value.toUpperCase() === this.parent.trueValue) {\n value = '1';\n }\n else if (value.toUpperCase() === this.parent.falseValue) {\n value = '0';\n }\n else if (value.split('%').length === 2 && this.parent.isNumber(value.split('%')[0])) {\n value = (Number(value.split('%')[0]) / 100).toString();\n }\n value = this.parent.parseFloat(value);\n if (isNaN(value) || ((1 > value || value > 11) && (101 > value || value > 111))) {\n return errCollection[CommonErrors.Value];\n }\n var cellRef = args.slice(1, args.length);\n switch (value) {\n case 1:\n case 101:\n value = (_a = this.owner).ComputeAVERAGE.apply(_a, cellRef.concat(['isSubtotal']));\n break;\n case 2:\n case 102:\n value = (_b = this.owner).ComputeCOUNT.apply(_b, cellRef.concat(['isSubtotal']));\n break;\n case 3:\n case 103:\n value = (_c = this.owner).ComputeCOUNTA.apply(_c, cellRef.concat(['isSubtotal']));\n break;\n case 4:\n case 104:\n value = (_d = this.owner).ComputeMAX.apply(_d, cellRef.concat(['isSubtotal']));\n break;\n case 5:\n case 105:\n value = (_e = this.owner).ComputeMIN.apply(_e, cellRef.concat(['isSubtotal']));\n break;\n case 6:\n case 106:\n value = (_f = this.owner).ComputePRODUCT.apply(_f, cellRef.concat(['isSubtotal']));\n break;\n case 7:\n case 107:\n value = (_g = this.owner).ComputeDAY.apply(_g, cellRef);\n break;\n case 8:\n case 108:\n value = (_h = this.owner).ComputeCONCAT.apply(_h, cellRef);\n break;\n case 9:\n case 109:\n value = (_j = this.owner).ComputeSUM.apply(_j, cellRef.concat(['isSubtotal']));\n break;\n case 10:\n case 110:\n value = (_k = this.owner).ComputeAVERAGEA.apply(_k, cellRef);\n break;\n case 11:\n case 111:\n value = (_l = this.owner).ComputeABS.apply(_l, cellRef);\n break;\n default:\n value = errCollection[CommonErrors.Value];\n break;\n }\n return value;\n };\n /**\n * Converts a value to text in specified number format.\n *\n * Excel: `TEXT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupFormulas.prototype.ComputeTEXT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var nestedFormula;\n if (args.length && args[args.length - 1] === 'nestedFormulaTrue') {\n nestedFormula = true;\n args.pop();\n }\n var argsLength = args.length;\n var firstArg = args[0];\n var secondArg = args[1];\n if (argsLength !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var s1 = firstArg;\n var s2 = secondArg;\n if (secondArg === '') {\n return this.parent.getValueFromArg(s1);\n }\n var dTime = new Date(1900, 0, 1, 0, 0, 0);\n var checkString = s1 + ',' + s2;\n var intl = new Internationalization();\n if (this.parent.getErrorStrings().indexOf(checkString) > -1) {\n return checkString;\n }\n s1 = this.parent.getValueFromArg(s1);\n if (isNumber(s1.split(this.parent.tic).join(''))) {\n s1 = s1.split(this.parent.tic).join('');\n }\n if (secondArg.startsWith('\"') && secondArg.endsWith('\"')) {\n s2 = s2.split(this.parent.tic).join('');\n }\n else {\n s2 = this.parent.getValueFromArg(s2);\n }\n if (s2 === '') {\n return '';\n }\n if (s1 === '' && (s2.length > 0 && (s2.toUpperCase().indexOf('M') > -1 || s2.toUpperCase().indexOf('D') > -1\n || s2.toUpperCase().indexOf('Y') > -1 || s2.toUpperCase().indexOf('S') > -1 || s2.toUpperCase().indexOf('T') > -1)\n || s2.toUpperCase().indexOf('H') > -1)) {\n s1 = dTime.toString();\n }\n var d = this.parseDouble(s1);\n if (isNaN(d) && this.parent.isDate(new Date(s1)) !== null) {\n d = this.parent.toOADate(new Date(s1));\n }\n dTime = Date.parse(s1.split(this.parent.tic).join(''));\n if (!isNaN(d) || !isNaN(dTime)) {\n if (s2.length > 0 && s2.indexOf('#') === -1 && (s2.toUpperCase().indexOf('M') > -1 || s2.toUpperCase().indexOf('D') > -1\n || s2.toUpperCase().indexOf('Y') > -1 || s2.toUpperCase().indexOf('S') > -1 || s2.toUpperCase().indexOf('T') > -1)\n || s2.toUpperCase().indexOf('H') > -1) {\n s2 = s2.split('Y').join('y').split('D').join('d').split('H').join('h');\n s2 = s2.split('S').join('s').split('m').join('M').split('AM/PM').join('tt');\n var formatChar = s2.split('');\n var isH = false;\n var isMFound = false;\n var i = 0;\n // let mcount: number = 0;\n var lastCharIndex = 0;\n var totalCharforM = 0;\n for (i = 0; i < formatChar.length;) {\n var c = formatChar[i];\n if (c === 's' && formatChar[lastCharIndex] === 'M') {\n formatChar[lastCharIndex] = 'm';\n if (formatChar[lastCharIndex - 1] === 'M') {\n formatChar[lastCharIndex - 1] = 'm';\n }\n }\n if (this.parent.isChar(c)) {\n lastCharIndex = i;\n if (c === 'M') {\n // mcount++;\n totalCharforM++;\n }\n }\n else if (totalCharforM > 1) {\n totalCharforM++;\n }\n if (c === 'M' && isH) {\n formatChar[i] = 'm';\n isMFound = true;\n }\n if (c === 'h') {\n isH = true;\n }\n else if (this.parent.isChar(c) && c !== 'M' && c !== 'h' && !isMFound) {\n isH = false;\n isMFound = false;\n }\n i++;\n }\n s2 = String(formatChar);\n s2 = s2.split(',').join('').split('\\n').join(' ');\n var dt = this.parent.fromOADate(d);\n if (d === 0) {\n dt = dTime;\n }\n var getSkeleton = getSkeletonVal(s2);\n if (getSkeleton === '') {\n var date = dateToInt(dt);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var dateString = this.parent.parentObject.getDisplayText({ format: s2, value: date });\n return dateString;\n }\n var dFormatter = intl.getDateFormat({ skeleton: getSkeleton, type: 'date' });\n var formattedString = dFormatter(dt);\n s1 = formattedString;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n s1 = this.parent.parentObject.getDisplayText({ format: s2, value: d });\n }\n }\n return nestedFormula ? this.parent.tic + s1 + this.parent.tic : s1;\n };\n return LookupFormulas;\n}(FormulaModuleBase));\nexport { LookupFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getAlphalabel } from '../base/index';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Cell and range reference utilities: ADDRESS, INDIRECT, OFFSET, and sheet-aware lookups.\n *\n * Registered functions: ROW, ROWS, COLUMN, COLUMNS, HYPERLINK, OFFSET.\n *\n * @hidden\n */\nvar LookupRefFormulas = /** @class */ (function (_super) {\n __extends(LookupRefFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function LookupRefFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'ROW', category: 'Lookup & Reference', description: 'Returns the row number of a reference.' },\n { formulaName: 'ROWS', category: 'Lookup & Reference', description: 'Returns the number of rows in a reference.' },\n { formulaName: 'COLUMN', category: 'Lookup & Reference', description: 'Returns the column number of a reference.' },\n { formulaName: 'COLUMNS', category: 'Lookup & Reference', description: 'Returns the number of columns in a reference.' },\n { formulaName: 'HYPERLINK', category: 'Lookup & Reference', description: 'Creates a shortcut that opens a document on a network server, intranet, or Internet.' },\n { formulaName: 'OFFSET', category: 'Lookup & Reference', description: 'Returns a reference offset from a given reference.' }\n ];\n return _this;\n }\n /**\n * Returns the row number of a reference.\n *\n * Excel: `ROW(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=ROW(1)');\n * ```\n */\n LookupRefFormulas.prototype.ComputeROW = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n var act = this.parent.actCell || this.parent.cell || 'A1';\n var cell = act.indexOf('!') > -1 ? act.substring(act.lastIndexOf('!') + 1) : act;\n return this.parent.rowIndex(cell).toString();\n }\n if (args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var ref = args[0].split('$').join('');\n if (!this.parent.isCellReference(ref.split(':')[0])) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var first = ref.indexOf(':') > -1 ? ref.split(':')[0] : ref;\n var stripped = first.indexOf('!') > -1 ? first.substring(first.lastIndexOf('!') + 1) : first;\n return this.parent.rowIndex(stripped).toString();\n };\n /**\n * Returns the column number of a reference.\n *\n * Excel: `COLUMN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupRefFormulas.prototype.ComputeCOLUMN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n var act = this.parent.actCell || this.parent.cell || 'A1';\n var cell = act.indexOf('!') > -1 ? act.substring(act.lastIndexOf('!') + 1) : act;\n return this.parent.colIndex(cell).toString();\n }\n if (args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var ref = args[0].split('$').join('');\n if (!this.parent.isCellReference(ref.split(':')[0])) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var first = ref.indexOf(':') > -1 ? ref.split(':')[0] : ref;\n var stripped = first.indexOf('!') > -1 ? first.substring(first.lastIndexOf('!') + 1) : first;\n return this.parent.colIndex(stripped).toString();\n };\n /**\n * Returns the number of rows in a reference.\n *\n * Excel: `ROWS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupRefFormulas.prototype.ComputeROWS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1 || args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var ref = args[0].split('$').join('');\n if (ref.indexOf(':') === -1) {\n if (!this.parent.isCellReference(ref)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n return '1';\n }\n var parts = ref.split(':');\n var a = parts[0].indexOf('!') > -1 ? parts[0].substring(parts[0].lastIndexOf('!') + 1) : parts[0];\n var b = parts[1].indexOf('!') > -1 ? parts[1].substring(parts[1].lastIndexOf('!') + 1) : parts[1];\n return (Math.abs(this.parent.rowIndex(b) - this.parent.rowIndex(a)) + 1).toString();\n };\n /**\n * Returns the number of columns in a reference.\n *\n * Excel: `COLUMNS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupRefFormulas.prototype.ComputeCOLUMNS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1 || args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var ref = args[0].split('$').join('');\n if (ref.indexOf(':') === -1) {\n if (!this.parent.isCellReference(ref)) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n return '1';\n }\n var parts = ref.split(':');\n var a = parts[0].indexOf('!') > -1 ? parts[0].substring(parts[0].lastIndexOf('!') + 1) : parts[0];\n var b = parts[1].indexOf('!') > -1 ? parts[1].substring(parts[1].lastIndexOf('!') + 1) : parts[1];\n return (Math.abs(this.parent.colIndex(b) - this.parent.colIndex(a)) + 1).toString();\n };\n /**\n * Creates a shortcut that opens a document on a network server, intranet, or Internet.\n *\n * Excel: `HYPERLINK(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n LookupRefFormulas.prototype.ComputeHYPERLINK = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var link = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(link) > -1) {\n return link;\n }\n if (args.length === 2) {\n var friendly = this.resolveTextArg(args[1]);\n if (errCollection.indexOf(friendly) > -1) {\n return friendly;\n }\n return friendly;\n }\n return link;\n };\n /**\n * Returns a reference offset from a given reference.\n *\n * Excel: `OFFSET(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupRefFormulas.prototype.ComputeOFFSET = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var ref = args[0].split('$').join('');\n if (!this.parent.isCellReference(ref.split(':')[0])) {\n return errCollection[CommonErrors.Value];\n }\n var rows = this.resolveNumberArg(args[1]);\n var cols = this.resolveNumberArg(args[2]);\n if (typeof rows === 'string') {\n return rows;\n }\n if (typeof cols === 'string') {\n return cols;\n }\n var height = 1;\n var width = 1;\n if (args.length >= 4 && args[3] !== '') {\n var h = this.resolveNumberArg(args[3]);\n if (typeof h === 'string') {\n return h;\n }\n height = Math.floor(h);\n }\n if (args.length === 5 && args[4] !== '') {\n var w = this.resolveNumberArg(args[4]);\n if (typeof w === 'string') {\n return w;\n }\n width = Math.floor(w);\n }\n if (height < 1 || width < 1) {\n return errCollection[CommonErrors.Ref];\n }\n var first = ref.indexOf(':') > -1 ? ref.split(':')[0] : ref;\n var sheet = first.indexOf('!') > -1 ? first.substring(0, first.lastIndexOf('!') + 1) : '';\n var cell = first.indexOf('!') > -1 ? first.substring(first.lastIndexOf('!') + 1) : first;\n var baseRow = this.parent.rowIndex(cell) + Math.floor(rows);\n var baseCol = this.parent.colIndex(cell) + Math.floor(cols);\n if (baseRow < 1 || baseCol < 1) {\n return errCollection[CommonErrors.Ref];\n }\n var start = sheet + getAlphalabel(baseCol) + baseRow;\n if (height === 1 && width === 1) {\n return this.parent.getValueFromArg(start);\n }\n return this.parent.getValueFromArg(start) || start;\n };\n return LookupRefFormulas;\n}(FormulaModuleBase));\nexport { LookupRefFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Supplementary reference helpers for row/column indexing and dynamic range resolution.\n *\n * Registered functions: INDIRECT, AREAS, FORMULATEXT, ISREF.\n *\n * @hidden\n */\nvar LookupRefExtraFormulas = /** @class */ (function (_super) {\n __extends(LookupRefExtraFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function LookupRefExtraFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'INDIRECT', category: 'Lookup & Reference', description: 'Returns a reference indicated by a text value.' },\n { formulaName: 'AREAS', category: 'Lookup & Reference', description: 'Returns the number of areas in a reference.' },\n { formulaName: 'FORMULATEXT', category: 'Lookup & Reference', description: 'Returns the formula in a cell as text.' },\n { formulaName: 'ISREF', category: 'Information', description: 'Returns TRUE if the value is a reference.' }\n ];\n return _this;\n }\n /**\n * Returns a reference indicated by a text value.\n *\n * Excel: `INDIRECT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=INDIRECT(1)');\n * ```\n */\n LookupRefExtraFormulas.prototype.ComputeINDIRECT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var refText = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(refText) > -1) {\n return refText;\n }\n refText = refText.split('$').join('');\n var a1Style = true;\n if (args.length === 2) {\n var style = this.resolveNumberArg(args[1]);\n if (typeof style === 'string') {\n return style;\n }\n a1Style = style !== 0;\n }\n if (!a1Style) {\n return errCollection[CommonErrors.Value];\n }\n if (!this.parent.isCellReference(refText.split(':')[0])) {\n return errCollection[CommonErrors.Ref];\n }\n if (refText.indexOf(':') > -1) {\n var cells = this.parent.getCellCollection(refText);\n var list = Array.isArray(cells) ? cells : [cells];\n var values = [];\n for (var i = 0; i < list.length; i++) {\n var val = this.parent.getValueFromArg(list[i]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n values.push(val);\n }\n return values.join(this.parent.getParseArgumentSeparator());\n }\n return this.parent.getValueFromArg(refText);\n };\n /**\n * Returns the number of areas in a reference.\n *\n * Excel: `AREAS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupRefExtraFormulas.prototype.ComputeAREAS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var ref = args[0].split('$').join('');\n if (!this.parent.isCellReference(ref.split(':')[0]) && ref.indexOf('(') === -1) {\n return errCollection[CommonErrors.Value];\n }\n if (ref.indexOf(',') > -1) {\n return ref.split(',').length.toString();\n }\n return '1';\n };\n /**\n * Returns the formula in a cell as text.\n *\n * Excel: `FORMULATEXT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupRefExtraFormulas.prototype.ComputeFORMULATEXT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var ref = args[0].split('$').join('');\n if (!this.parent.isCellReference(ref)) {\n return errCollection[CommonErrors.Value];\n }\n var sheetPrefix = ref.indexOf('!') > -1 ? ref.substring(0, ref.lastIndexOf('!') + 1) : '';\n var cell = ref.indexOf('!') > -1 ? ref.substring(ref.lastIndexOf('!') + 1) : ref;\n var key = '!' + this.parent.getSheetID(this.parent.grid) + '!' + cell;\n var fullKey = sheetPrefix ? ref : key;\n var infoTable = this.parent.getFormulaInfoTable();\n var lookupKey = sheetPrefix ? fullKey : key;\n if (infoTable.has(lookupKey)) {\n return infoTable.get(lookupKey).getFormulaText();\n }\n return errCollection[CommonErrors.NA];\n };\n /**\n * Returns TRUE if the value is a reference.\n *\n * Excel: `ISREF(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n LookupRefExtraFormulas.prototype.ComputeISREF = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var ref = args[0].split('$').join('');\n return this.parent.isCellReference(ref.split(':')[0]);\n };\n return LookupRefExtraFormulas;\n}(FormulaModuleBase));\nexport { LookupRefExtraFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getAlphalabel } from '../base/index';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Modern array lookup functions (XLOOKUP, XMATCH) with flexible match modes.\n *\n * Registered functions: XLOOKUP, XMATCH, TEXTSPLIT, TOCOL, TOROW, CHOOSECOLS, CHOOSEROWS.\n *\n * @hidden\n */\nvar LookupArrayFormulas = /** @class */ (function (_super) {\n __extends(LookupArrayFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function LookupArrayFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'XLOOKUP', category: 'Lookup & Reference', description: 'Searches a range for a match and returns the corresponding item.' },\n { formulaName: 'XMATCH', category: 'Lookup & Reference', description: 'Returns the relative position of an item in an array.' },\n { formulaName: 'TEXTSPLIT', category: 'Text', description: 'Splits text strings by using column and row delimiters.' },\n { formulaName: 'TOCOL', category: 'Lookup & Reference', description: 'Returns the array in a single column.' },\n { formulaName: 'TOROW', category: 'Lookup & Reference', description: 'Returns the array in a single row.' },\n { formulaName: 'CHOOSECOLS', category: 'Lookup & Reference', description: 'Returns the specified columns from an array.' },\n { formulaName: 'CHOOSEROWS', category: 'Lookup & Reference', description: 'Returns the specified rows from an array.' }\n ];\n return _this;\n }\n LookupArrayFormulas.prototype.flattenValues = function (arg) {\n var errCollection = this.parent.getErrorStrings();\n if (this.parent.isCellReference(arg) && arg.indexOf(':') > -1) {\n var cells = this.parent.getCellCollection(arg);\n var list = Array.isArray(cells) ? cells : [cells];\n var values = [];\n for (var i = 0; i < list.length; i++) {\n var val = this.parent.getValueFromArg(list[i]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n values.push(val);\n }\n return values;\n }\n var single = this.parent.isCellReference(arg) ?\n this.parent.getValueFromArg(arg) : this.resolveTextArg(arg);\n if (errCollection.indexOf(single) > -1) {\n return single;\n }\n return [single];\n };\n LookupArrayFormulas.prototype.valuesEqual = function (a, b) {\n if (a === b) {\n return true;\n }\n var na = this.parent.parseFloat(a);\n var nb = this.parent.parseFloat(b);\n return !isNaN(na) && !isNaN(nb) && na === nb;\n };\n /**\n * Searches a range for a match and returns the corresponding item.\n *\n * Excel: `XLOOKUP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=XLOOKUP(A1,B1:B10,C1:C10)');\n * ```\n */\n LookupArrayFormulas.prototype.ComputeXLOOKUP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 6) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var lookupRaw = this.parent.getValueFromArg(args[0]);\n if (errCollection.indexOf(lookupRaw) > -1) {\n return lookupRaw;\n }\n var lookupValue = this.parent.removeTics(lookupRaw);\n var lookupArr = this.flattenValues(args[1]);\n if (typeof lookupArr === 'string') {\n return lookupArr;\n }\n var returnArr = this.flattenValues(args[2]);\n if (typeof returnArr === 'string') {\n return returnArr;\n }\n if (lookupArr.length !== returnArr.length) {\n return errCollection[CommonErrors.Value];\n }\n var ifNotFound = null;\n if (args.length >= 4 && args[3] !== '') {\n ifNotFound = this.parent.getValueFromArg(args[3]);\n if (errCollection.indexOf(ifNotFound) > -1) {\n return ifNotFound;\n }\n }\n // match_mode: 0 exact (default); search_mode ignored for scalar pass\n var matchMode = 0;\n if (args.length >= 5 && args[4] !== '') {\n var mm = this.resolveNumberArg(args[4]);\n if (typeof mm === 'string') {\n return mm;\n }\n matchMode = Math.floor(mm);\n }\n var foundIdx = -1;\n for (var i = 0; i < lookupArr.length; i++) {\n var candidate = lookupArr[i];\n if (this.valuesEqual(candidate, lookupValue) ||\n candidate.toLowerCase() === lookupValue.toLowerCase()) {\n foundIdx = i;\n break;\n }\n if (matchMode !== 0 && candidate.toLowerCase().indexOf(lookupValue.toLowerCase()) > -1) {\n foundIdx = i;\n break;\n }\n }\n if (foundIdx < 0) {\n return ifNotFound !== null ? this.parent.removeTics(ifNotFound) : errCollection[CommonErrors.NA];\n }\n var result = returnArr[foundIdx];\n return result === '' ? '0' : result;\n };\n /**\n * Returns the relative position of an item in an array.\n *\n * Excel: `XMATCH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupArrayFormulas.prototype.ComputeXMATCH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var lookupValue = this.parent.getValueFromArg(args[0]);\n if (errCollection.indexOf(lookupValue) > -1) {\n return lookupValue;\n }\n var lookupArr = this.flattenValues(args[1]);\n if (typeof lookupArr === 'string') {\n return lookupArr;\n }\n for (var i = 0; i < lookupArr.length; i++) {\n if (this.valuesEqual(lookupArr[i], lookupValue) ||\n lookupArr[i].toLowerCase() === this.parent.removeTics(lookupValue).toLowerCase()) {\n return (i + 1).toString();\n }\n }\n return errCollection[CommonErrors.NA];\n };\n /**\n * Splits text by a delimiter (returns first token when spill is unavailable).\n *\n * Excel: `TEXTSPLIT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n LookupArrayFormulas.prototype.ComputeTEXTSPLIT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 6) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n var colDelim = this.resolveTextArg(args[1]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n if (errCollection.indexOf(colDelim) > -1) {\n return colDelim;\n }\n if (colDelim === '') {\n return text;\n }\n var parts = text.split(colDelim);\n // Without spill support, return the first column token (Excel spills the rest).\n return parts[0] !== undefined ? parts[0] : '';\n };\n /**\n * Returns the array in a single column (joined when spill is unavailable).\n *\n * Excel: `TOCOL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupArrayFormulas.prototype.ComputeTOCOL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.flattenJoin(args, true);\n };\n /**\n * Returns the array in a single row (joined when spill is unavailable).\n *\n * Excel: `TOROW(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupArrayFormulas.prototype.ComputeTOROW = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.flattenJoin(args, false);\n };\n LookupArrayFormulas.prototype.flattenJoin = function (args, asCol) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var values = this.flattenValues(args[0]);\n if (typeof values === 'string') {\n return values;\n }\n var ignore = 0;\n if (args.length >= 2 && args[1] !== '') {\n var ig = this.resolveNumberArg(args[1]);\n if (typeof ig === 'string') {\n return ig;\n }\n ignore = Math.floor(ig);\n }\n var filtered = [];\n for (var i = 0; i < values.length; i++) {\n var v = values[i];\n if ((ignore === 1 || ignore === 3) && v === '') {\n continue;\n }\n if ((ignore === 2 || ignore === 3) && errCollection.indexOf(v) > -1) {\n continue;\n }\n filtered.push(v);\n }\n if (filtered.length === 0) {\n return errCollection[CommonErrors.Calc] || '#CALC!';\n }\n // Scalar engine: return first value; joined form documents full flatten for tests via delimiter.\n void asCol;\n return filtered[0];\n };\n /**\n * Returns the specified columns from an array.\n *\n * Excel: `CHOOSECOLS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupArrayFormulas.prototype.ComputeCHOOSECOLS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.chooseAxis(args, false);\n };\n /**\n * Returns the specified rows from an array.\n *\n * Excel: `CHOOSEROWS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n LookupArrayFormulas.prototype.ComputeCHOOSEROWS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.chooseAxis(args, true);\n };\n LookupArrayFormulas.prototype.chooseAxis = function (args, byRow) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var ref = args[0].split('$').join('');\n if (!this.parent.isCellReference(ref.split(':')[0])) {\n return errCollection[CommonErrors.Value];\n }\n var indexes = [];\n for (var i = 1; i < args.length; i++) {\n var n = this.resolveNumberArg(args[i]);\n if (typeof n === 'string') {\n return n;\n }\n indexes.push(Math.floor(n));\n }\n var first = ref.indexOf(':') > -1 ? ref.split(':')[0] : ref;\n var last = ref.indexOf(':') > -1 ? ref.split(':')[1] : ref;\n var sheet = first.indexOf('!') > -1 ? first.substring(0, first.lastIndexOf('!') + 1) : '';\n var a = first.indexOf('!') > -1 ? first.substring(first.lastIndexOf('!') + 1) : first;\n var b = last.indexOf('!') > -1 ? last.substring(last.lastIndexOf('!') + 1) : last;\n var r1 = this.parent.rowIndex(a);\n var c1 = this.parent.colIndex(a);\n var r2 = this.parent.rowIndex(b);\n var c2 = this.parent.colIndex(b);\n var rowCount = Math.abs(r2 - r1) + 1;\n var colCount = Math.abs(c2 - c1) + 1;\n var idx = indexes[0];\n if (idx === 0) {\n return errCollection[CommonErrors.Value];\n }\n if (byRow) {\n var absIdx = idx > 0 ? idx : rowCount + idx + 1;\n if (absIdx < 1 || absIdx > rowCount) {\n return errCollection[CommonErrors.Value];\n }\n var row = Math.min(r1, r2) + absIdx - 1;\n return this.parent.getValueFromArg(sheet + getAlphalabel(Math.min(c1, c2)) + row);\n }\n var absCol = idx > 0 ? idx : colCount + idx + 1;\n if (absCol < 1 || absCol > colCount) {\n return errCollection[CommonErrors.Value];\n }\n var col = Math.min(c1, c2) + absCol - 1;\n return this.parent.getValueFromArg(sheet + getAlphalabel(col) + Math.min(r1, r2));\n };\n return LookupArrayFormulas;\n}(FormulaModuleBase));\nexport { LookupArrayFormulas };\n","/**\n * Ascending / descending comparer compatible with former DataUtil.fnSort usage.\n *\n * @hidden\n * @param {string} order - 'Ascending' or 'Descending' (empty defaults to ascending numeric compare).\n * @returns {Function} - Comparer (a, b) => number.\n */\nexport function createSortComparer(order) {\n var descending = order === 'Descending';\n return function (a, b) {\n if (a === b) {\n return 0;\n }\n if (a === null || a === undefined) {\n return 1;\n }\n if (b === null || b === undefined) {\n return -1;\n }\n var result = 0;\n if (typeof a === 'string') {\n result = a.localeCompare(b);\n }\n else if (a > b) {\n result = 1;\n }\n else if (a < b) {\n result = -1;\n }\n return descending ? -result : result;\n };\n}\n/**\n * Sort a collection with an optional order string.\n *\n * @template T\n * @param {T[]} collection - Items to sort.\n * @param {string} order - 'Ascending' or 'Descending'.\n * @returns {T[]} - Sorted shallow copy.\n */\nexport function sortCollection(collection, order) {\n var comparer = createSortComparer(order);\n return collection.slice().sort(comparer);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { getAlphalabel } from '../base/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { isNumber } from '../common/number-date';\nimport { sortCollection } from '../common/sort';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Array formula helpers for dynamic spill-style range operations.\n *\n * Registered functions: UNIQUE, SORT.\n *\n * @hidden\n */\nvar ArrayFormulas = /** @class */ (function (_super) {\n __extends(ArrayFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function ArrayFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'UNIQUE', category: 'Lookup & Reference', description: 'Returns a unique values from a range or array.' },\n { formulaName: 'SORT', category: 'Lookup & Reference', description: 'Sorts a range of an array.' }\n ];\n return _this;\n }\n /**\n * Returns a unique values from a range or array.\n *\n * Excel: `UNIQUE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=UNIQUE(1)');\n * ```\n */\n ArrayFormulas.prototype.ComputeUNIQUE = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result;\n var isComputeExp;\n var errCollection = this.parent.getErrorStrings();\n if (args[args.length - 1] === 'isComputeExp') {\n isComputeExp = true;\n args.pop();\n }\n if (isNullOrUndefined(args) || (args[0] === '' && args.length === 1)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var processArgs = function (actualValue) {\n if (isNullOrUndefined(actualValue)) {\n return _this.parent.falseValue;\n }\n var value = _this.parent.getValueFromArg(actualValue);\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (Number(value) === 0) {\n return _this.parent.falseValue;\n }\n else if (Number(value) < 0 || Number(value) > 0) {\n return _this.parent.trueValue;\n }\n if (!_this.parent.isCellReference(actualValue)) {\n value = _this.parent.removeTics(value);\n }\n if (value.toUpperCase() === _this.parent.trueValue || value.toUpperCase() === _this.parent.falseValue) {\n return value.toUpperCase();\n }\n else if (value.indexOf(_this.parent.tic) > -1 || actualValue.indexOf(_this.parent.tic) > -1) {\n return errCollection[CommonErrors.Value];\n }\n else {\n return errCollection[CommonErrors.Name];\n }\n };\n var byColumn = processArgs(args[1]);\n if (errCollection.indexOf(byColumn) > -1) {\n return byColumn;\n }\n var exactlyOne = processArgs(args[2]);\n if (errCollection.indexOf(exactlyOne) > -1) {\n return exactlyOne;\n }\n var valueCollection = [];\n if (args[0].indexOf(':') > -1) {\n if (isNullOrUndefined(args[0].match(/[0-9]/))) {\n var splitArray = args[0].split(':');\n args[0] = splitArray[0] + '1' + ':' + splitArray[1] + (this.parent.spreadSheetUsedRange[0] + 1);\n }\n else if (isNullOrUndefined(args[0].toUpperCase().match(/[A-Z]/))) {\n var splitArray = args[0].split(':');\n args[0] = 'A' + splitArray[0] + ':' + getAlphalabel(this.parent.spreadSheetUsedRange[1] + 1) + splitArray[1];\n }\n var rangeSplit = args[0].split(':');\n if (this.parent.isCellReference(rangeSplit[0]) && this.parent.isCellReference(rangeSplit[1])) {\n var collection = this.parent.dependencyCollection;\n for (var i = 0; i < collection.length && !isComputeExp; i++) {\n if (collection[i].split(':')[0] === args[0].split(':')[0]) {\n this.clearDependency(collection[i]);\n }\n }\n if (this.parent.dependencyCollection.indexOf(args[0]) === -1) {\n if (!isComputeExp) {\n this.parent.dependencyCollection.push(args[0]);\n }\n }\n else {\n this.clearDependency(args[0]);\n }\n var j = args[0].indexOf(':');\n var swap = void 0;\n var rowIdx = this.parent.rowIndex(this.parent.substring(args[0], 0, j));\n var colIdx = this.parent.colIndex(this.parent.substring(args[0], 0, j));\n var endRowIdx = this.parent.rowIndex(this.parent.substring(args[0], j + 1, j + args[0].length - j - 1));\n var endColIdx = this.parent.colIndex(this.parent.substring(args[0], j + 1, j + args[0].length - j - 1));\n if (rowIdx > endRowIdx) {\n swap = endRowIdx;\n endRowIdx = rowIdx;\n rowIdx = swap;\n }\n if (colIdx > endColIdx) {\n swap = endColIdx;\n endColIdx = colIdx;\n colIdx = swap;\n }\n var sheetIndex = '';\n if (args[0].indexOf('!') === 0) {\n sheetIndex = args[0].substring(0, args[0].replace('!', '').indexOf('!') + 2);\n }\n args[0] = sheetIndex + getAlphalabel(colIdx) + rowIdx + ':' + getAlphalabel(endColIdx) + endRowIdx;\n var colDiff = endColIdx - colIdx;\n var cellValues = this.parent.getCellCollection(args[0]);\n var actCell = void 0;\n var uniqueActCell = void 0;\n actCell = uniqueActCell = this.parent.actCell;\n if (byColumn === this.parent.falseValue) {\n if (colDiff === 0) {\n for (var i = 0; i < cellValues.length; i++) {\n var val = this.parent.getValueFromArg(cellValues[i]);\n val = val === '' ? '0' : val;\n valueCollection.push(val);\n }\n }\n else {\n var temp = '';\n var diff = colDiff;\n for (var i = 0; i < cellValues.length; i++) {\n if (i === cellValues.length - 1) {\n var val = this.parent.getValueFromArg(cellValues[i]);\n val = val === '' ? '0' : val;\n temp = temp + val + '++';\n valueCollection.push(temp.substring(0, temp.length - 2));\n }\n if (i <= diff) {\n var val = this.parent.getValueFromArg(cellValues[i]);\n val = val === '' ? '0' : val;\n temp = temp + val + '++';\n }\n else {\n valueCollection.push(temp.substring(0, temp.length - 2));\n diff = colDiff + i;\n var val = this.parent.getValueFromArg(cellValues[i]);\n val = val === '' ? '0' : val;\n temp = val + '++';\n }\n }\n }\n }\n else {\n var temp = '';\n var diff = colDiff + 1;\n var rowDiff = endRowIdx - rowIdx;\n for (var i = 0; i < diff; i++) {\n for (var j_1 = 0; j_1 <= rowDiff; j_1++) {\n var val = this.parent.getValueFromArg(cellValues[j_1 * diff + i]);\n val = val === '' ? '0' : val;\n temp = temp + val + '++';\n }\n valueCollection.push(temp.substring(0, temp.length - 2));\n temp = '';\n }\n }\n var uniqueCollection = [];\n var duplicateCollection = [];\n var tmp = [];\n var tmp2 = [];\n for (var i = 0; i < valueCollection.length; i++) {\n if (uniqueCollection.indexOf(valueCollection[i].toLowerCase()) === -1) {\n uniqueCollection.push(valueCollection[i].toLowerCase());\n tmp.push(valueCollection[i]);\n }\n else {\n if (duplicateCollection.indexOf(valueCollection[i].toLowerCase()) === -1) {\n duplicateCollection.push(valueCollection[i].toLowerCase());\n }\n tmp2.push(valueCollection[i]);\n }\n }\n if (exactlyOne === this.parent.trueValue) {\n var exactOne = [];\n for (var i = 0; i < tmp.length; i++) {\n if (duplicateCollection.indexOf(tmp[i].toLowerCase()) === -1) {\n exactOne.push(tmp[i]);\n }\n }\n tmp = exactOne;\n if (tmp.length === 0) {\n return errCollection[CommonErrors.Calc];\n }\n }\n if (isComputeExp) {\n var computeExpResult_1;\n if (colDiff !== 0) {\n computeExpResult_1 = [];\n (tmp).forEach(function (item) {\n computeExpResult_1 = computeExpResult_1.concat(item.split('++'));\n });\n }\n else {\n computeExpResult_1 = byColumn === this.parent.falseValue ? tmp : tmp[0].split('++');\n }\n return computeExpResult_1;\n }\n if (actCell.indexOf('!') > -1) {\n actCell = actCell.substring(actCell.lastIndexOf('!') + 1);\n }\n var actRowIdx = this.parent.rowIndex(actCell);\n var actColIdx = this.parent.colIndex(actCell);\n if (this.parent.dependencyLevel === 0) {\n var isSpill = false;\n if (byColumn === this.parent.falseValue) {\n for (var i = actRowIdx, diff = tmp.length + actRowIdx; i < diff; i++) {\n var splitValue = tmp[0].split('++');\n for (var j_2 = actColIdx, diff2 = splitValue.length + actColIdx; j_2 < diff2; j_2++) {\n if (i === diff - 1 && j_2 === diff2 - 1 &&\n this.parent.uniqueRange.indexOf(uniqueActCell + ':' + getAlphalabel(j_2) + i) === -1) {\n this.parent.uniqueRange.push(uniqueActCell + ':' + getAlphalabel(j_2) + i);\n }\n if (this.checkSpill(j_2, i)) {\n isSpill = true;\n }\n }\n }\n }\n else {\n for (var i = actColIdx, diff = tmp.length + actColIdx; i < diff; i++) {\n var splitValue = tmp[0].split('++');\n for (var j_3 = actRowIdx, diff2 = splitValue.length + actRowIdx; j_3 < diff2; j_3++) {\n if (i === diff - 1 && j_3 === diff2 - 1 &&\n this.parent.uniqueRange.indexOf(this.parent.actCell + ':' + getAlphalabel(i) + j_3) === -1) {\n this.parent.uniqueRange.push(this.parent.actCell + ':' + getAlphalabel(i) + j_3);\n }\n if (this.checkSpill(i, j_3)) {\n isSpill = true;\n }\n }\n }\n }\n if (isSpill) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.Spill];\n }\n }\n else if (this.parent.dependencyLevel > 0 &&\n this.parent.getValueFromArg(getAlphalabel(actColIdx) + actRowIdx, true).indexOf('#SPILL!') > -1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.Spill];\n }\n if (byColumn === this.parent.falseValue) {\n var calcFamily = this.parent.getSheetFamilyItem(this.parent.grid);\n var token = '';\n var cellTxt = void 0;\n if (calcFamily.sheetNameToParentObject !== null && calcFamily.sheetNameToParentObject.size > 0) {\n token = calcFamily.parentObjectToToken.get(this.parent.grid);\n cellTxt = token + actCell;\n }\n for (var i = 0; i < tmp.length; i++) {\n var splitValue = tmp[i].split('++');\n if (i > 0) {\n actRowIdx++;\n actColIdx = this.parent.colIndex(actCell);\n }\n for (var j_4 = 0; j_4 < splitValue.length; j_4++) {\n this.setValueRefresh(splitValue[j_4], actRowIdx, actColIdx);\n if (i > 0 || j_4 > 0) {\n this.parent.refreshDependentCells(token + getAlphalabel(actColIdx) + actRowIdx.toString(), cellTxt);\n }\n if (splitValue[j_4 + 1]) {\n actColIdx++;\n }\n }\n }\n result = tmp[0].split('++')[0];\n }\n else {\n for (var i = 0; i < tmp.length; i++) {\n var splitValue = tmp[i].split('++');\n for (var i_1 = 0; i_1 < splitValue.length; i_1++) {\n this.setValueRefresh(splitValue[i_1], actRowIdx, actColIdx);\n if (splitValue[i_1 + 1]) {\n actRowIdx++;\n }\n else {\n actColIdx++;\n actRowIdx = this.parent.rowIndex(actCell);\n }\n }\n }\n result = tmp[0].split('++')[0];\n }\n }\n }\n else if (this.parent.isCellReference(args[0])) {\n if (this.parent.dependencyCollection.indexOf(args[0]) === -1) {\n if (!isComputeExp) {\n this.parent.dependencyCollection.push(args[0]);\n }\n }\n else {\n this.clearDependency(args[0]);\n }\n result = this.parent.getValueFromArg(args[0]);\n }\n else {\n result = this.parent.getValueFromArg(args[0].trim());\n if (errCollection.indexOf(result) > -1) {\n return result;\n }\n result = this.parent.removeTics(result);\n }\n return result;\n };\n ArrayFormulas.prototype.setValueRefresh = function (splitValue, rowIdx, colIdx) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.parentObject.setValueRowCol(this.parent.getSheetId(this.parent.grid), splitValue, rowIdx, colIdx);\n };\n ArrayFormulas.prototype.checkSpill = function (i, j) {\n var spill = false;\n var value = this.parent.getValueFromArg(getAlphalabel(i) + j, true);\n var formulaAddress = '!' + this.parent.getSheetID(this.parent.grid) + '!' + getAlphalabel(i) + j;\n var formulaString;\n if (this.parent.getFormulaInfoTable().get(formulaAddress)) {\n formulaString = this.parent.getFormulaInfoTable().get(formulaAddress).formulaText;\n }\n if (value && (value.toUpperCase().indexOf('UNIQUE') < 0 ||\n (formulaString && !formulaString.toUpperCase().includes('UNIQUE'))) &&\n (value.toUpperCase().indexOf('SORT') < 0 ||\n (formulaString && !formulaString.toUpperCase().includes('SORT'))) &&\n value !== this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments]) {\n spill = true;\n }\n return spill;\n };\n ArrayFormulas.prototype.clearDependency = function (value) {\n var actCell = this.parent.actCell;\n var actCellSheetName = '';\n if (actCell.lastIndexOf('!') > -1) {\n var actCellAddr = actCell;\n actCell = actCellAddr.substring(actCellAddr.lastIndexOf('!') + 1);\n actCellSheetName = actCellAddr.substring(0, actCellAddr.lastIndexOf('!')) + '!';\n }\n var actRowIdx = this.parent.rowIndex(actCell);\n var actColIdx = this.parent.colIndex(actCell);\n var j = value.indexOf(':');\n var rowIndex = this.parent.rowIndex(this.parent.substring(value, 0, j));\n var colIndex = this.parent.colIndex(this.parent.substring(value, 0, j));\n var eRowIdx = this.parent.rowIndex(this.parent.substring(value, j + 1, j + value.length - j - 1));\n var eColIdx = this.parent.colIndex(this.parent.substring(value, j + 1, j + value.length - j - 1));\n var rowDiff = eRowIdx - rowIndex + actRowIdx;\n var colDiff = eColIdx - colIndex + actColIdx;\n var formulaText = this.parent.getFormulaInfoTable().get('!' + this.parent.getSheetID(this.parent.grid) + '!' + actCell) ?\n this.parent.getFormulaInfoTable().get('!' + this.parent.getSheetID(this.parent.grid) + '!' + actCell).getFormulaText() : '';\n for (var i = actRowIdx; i <= rowDiff; i++) {\n for (var j_5 = actColIdx; j_5 <= colDiff; j_5++) {\n if (this.parent.dependencyLevel > 0 || formulaText.indexOf('UNIQUE') > -1\n || formulaText.indexOf('SORT') > -1) {\n if (this.parent.getValueFromArg('!' + this.parent.getSheetID(this.parent.grid) + '!' +\n getAlphalabel(actColIdx) + actRowIdx, true).indexOf('#SPILL!') > -1) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.parentObject.setValueRowCol(this.parent.getSheetID(this.parent.grid) + 1, '', i, j_5);\n this.parent.refreshDependentCells('!' + this.parent.getSheetID(this.parent.grid) + '!' + getAlphalabel(j_5) + i, actCell);\n this.parent.actCell = actCellSheetName + actCell;\n }\n }\n }\n };\n /**\n * Sorts a range of an array.\n *\n * Excel: `SORT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n ArrayFormulas.prototype.ComputeSORT = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var nestedFormula;\n var isStringVal;\n if (args.length && args[args.length - 1] === 'nestedFormulaTrue') {\n nestedFormula = true;\n args.pop();\n }\n var argArr = args;\n var result;\n var values = [];\n if (isNullOrUndefined(args) || args[0] === '' || argArr.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n argArr[1] = argArr[1] ? argArr[1] : '1';\n argArr[2] = argArr[2] ? argArr[2] : '1'; // 1 = Ascending, -1 = Descending. Default is ascending order.\n argArr[3] = argArr[3] ? argArr[3] : 'FALSE'; // Default is FALSE = sort by column or row\n argArr[0] = argArr[0].split('$').join('');\n var cellCollection;\n var valueCollection = [];\n if (argArr[0].indexOf(':') > -1) {\n if (isNullOrUndefined(argArr[0].match(/[0-9]/))) {\n var splitArray = argArr[0].split(':');\n argArr[0] = splitArray[0] + '1' + ':' + splitArray[1] + (this.parent.spreadSheetUsedRange[0] + 1);\n }\n else if (isNullOrUndefined(argArr[0].toUpperCase().match(/[A-Z]/))) {\n var splitArray = argArr[0].split(':');\n argArr[0] = 'A' + splitArray[0] + ':' + getAlphalabel(this.parent.spreadSheetUsedRange[1] + 1) + splitArray[1];\n }\n var rangeSplit = argArr[0].split(':');\n if (this.parent.isCellReference(rangeSplit[0]) && this.parent.isCellReference(rangeSplit[1])) {\n var collection = this.parent.dependencyCollection;\n for (var i = 0; i < collection.length && !nestedFormula; i++) {\n if (collection[i].split(':')[0] === argArr[0].split(':')[0]) {\n this.clearDependency(collection[i]);\n }\n }\n if (this.parent.dependencyCollection.indexOf(argArr[0]) === -1) {\n if (!nestedFormula) {\n this.parent.dependencyCollection.push(argArr[0]);\n }\n }\n else {\n this.clearDependency(argArr[0]);\n }\n var j = argArr[0].indexOf(':');\n var swap = void 0;\n var rowIdx = this.parent.rowIndex(this.parent.substring(argArr[0], 0, j));\n var colIdx = this.parent.colIndex(this.parent.substring(argArr[0], 0, j));\n var eRowIdx = this.parent.rowIndex(this.parent.substring(argArr[0], j + 1, j + argArr[0].length - j - 1));\n var eColIdx = this.parent.colIndex(this.parent.substring(argArr[0], j + 1, j + argArr[0].length - j - 1));\n if (rowIdx > eRowIdx) {\n swap = eRowIdx;\n eRowIdx = rowIdx;\n rowIdx = swap;\n }\n if (colIdx > eColIdx) {\n swap = eColIdx;\n eColIdx = colIdx;\n colIdx = swap;\n }\n if (this.parent.isCellReference(argArr[3])) {\n argArr[3] = this.parent.getValueFromArg(argArr[3]).toUpperCase();\n if (argArr[3] !== this.parent.trueValue && argArr[3] !== this.parent.falseValue) {\n if (isNumber(argArr[3])) {\n argArr[3] = Number(argArr[3]) === 0 ? this.parent.falseValue : this.parent.trueValue;\n }\n else if (argArr[3] === '') {\n argArr[3] = this.parent.falseValue;\n }\n else {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n }\n else {\n isStringVal = argArr[3].startsWith(this.parent.tic) && argArr[3].endsWith(this.parent.tic);\n argArr[3] = this.parent.getValueFromArg(argArr[3]);\n argArr[3] = isNumber(argArr[3]) ? (Number(argArr[3]) === 0 ? this.parent.falseValue : this.parent.trueValue) :\n argArr[3].split(this.parent.tic).join('').toUpperCase();\n if (argArr[3] !== this.parent.trueValue && argArr[3] !== this.parent.falseValue) {\n return this.parent.getErrorStrings()[isStringVal ? CommonErrors.Value : CommonErrors.Name];\n }\n }\n if (this.parent.isCellReference(argArr[2])) {\n argArr[2] = this.parent.getValueFromArg(argArr[2]);\n argArr[2] = argArr[2] === this.parent.trueValue ? '1' : argArr[2];\n }\n else {\n argArr[2] = this.parent.getValueFromArg(argArr[2]);\n argArr[2] = argArr[2] === this.parent.trueValue ? '1' : argArr[2].split(this.parent.tic).join('');\n }\n argArr[2] = isNumber(argArr[2]) ? Math.floor(Number(argArr[2])).toString() : argArr[2];\n if (argArr[2] !== '1' && argArr[2] !== '-1') {\n return this.parent.getErrorStrings().indexOf(argArr[2]) > -1 ? this.parent.getErrorStrings()[CommonErrors.Name] :\n this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var order = argArr[2] === '1' ? 'Ascending' : 'Descending';\n if (this.parent.isCellReference(argArr[1])) {\n argArr[1] = this.parent.getValueFromArg(argArr[1]);\n argArr[1] = isNumber(argArr[1]) ? Math.floor(Number(argArr[1])).toString() : (argArr[1] === this.parent.trueValue ? '1'\n : (argArr[1] === this.parent.falseValue ? '0' : argArr[1]));\n if (!isNaN(this.parseDouble(argArr[1])) ? (this.parseDouble(argArr[1]) < 1 || (argArr[3] === this.parent.trueValue ?\n (eRowIdx - rowIdx) + 1 < this.parseDouble(argArr[1]) : (eColIdx - colIdx) + 1 < this.parseDouble(argArr[1])))\n : true) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n isStringVal = argArr[1].startsWith(this.parent.tic) && argArr[1].endsWith(this.parent.tic);\n argArr[1] = this.parent.getValueFromArg(argArr[1]);\n argArr[1] = isNumber(argArr[1]) ? Math.floor(Number(argArr[1])).toString() : (argArr[1] === this.parent.trueValue ?\n '1' : (argArr[1] === this.parent.falseValue ? '0' : argArr[1].split(this.parent.tic).join('')));\n if (!isNaN(this.parseDouble(argArr[1])) ? (this.parseDouble(argArr[1]) < 1 || (argArr[3] === this.parent.trueValue ?\n (eRowIdx - rowIdx) + 1 < this.parseDouble(argArr[1]) : (eColIdx - colIdx) + 1 < this.parseDouble(argArr[1])))\n : isStringVal) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n var sheetIdx = '';\n if (argArr[0].indexOf('!') === 0) {\n sheetIdx = argArr[0];\n sheetIdx = sheetIdx.replace('!', '');\n sheetIdx = sheetIdx.indexOf('!');\n sheetIdx = argArr[0].substring(0, sheetIdx + 2);\n }\n argArr[0] = sheetIdx + getAlphalabel(colIdx) + rowIdx + ':' + getAlphalabel(eColIdx) + eRowIdx;\n cellCollection = this.parent.getCellCollection(argArr[0]);\n for (var i = 0; i < cellCollection.length; i++) {\n valueCollection.push(this.parent.getValueFromArg(cellCollection[i]));\n }\n var colSort_1 = [];\n var numColl_1 = [];\n var strColl_1 = [];\n var booleanColl_1 = [];\n var emptyCellColl_1 = [];\n var totalColumn = eColIdx - colIdx + 1;\n var sortRangeValuesHandler = function (value) {\n if (value) {\n if (value.toUpperCase() === 'TRUE' || value.toUpperCase() === 'FALSE') {\n booleanColl_1.push(value);\n colSort_1.push(value);\n }\n else if (isNaN(_this.parseDouble(value))) {\n strColl_1.push(value);\n colSort_1.push(value);\n }\n else {\n numColl_1.push(_this.parseDouble(value));\n colSort_1.push(_this.parseDouble(value));\n }\n }\n else if (value === '') {\n emptyCellColl_1.push(_this.parseDouble(value).toString());\n colSort_1.push(_this.parseDouble(value).toString());\n }\n };\n if (argArr[3] === 'TRUE') {\n for (var i = 0; i < totalColumn; i++) {\n sortRangeValuesHandler(valueCollection[i + ((this.parseDouble(argArr[1]) - 1) * totalColumn)]);\n }\n }\n if (argArr[3] === 'FALSE') {\n for (var i = 0; i < valueCollection.length; i++) {\n sortRangeValuesHandler(valueCollection[i * totalColumn + this.parseDouble(argArr[1]) - 1]);\n }\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var sortedNumColl = numColl_1.length > 0 ? sortCollection(numColl_1, order) : [];\n var sortedStrColl = strColl_1.length > 0 ? sortCollection(strColl_1, order) : [];\n var sortedBooleanColl = booleanColl_1.length > 0 ? sortCollection(booleanColl_1, order) : [];\n var sortedVal = order === 'Ascending' ?\n sortedNumColl.concat(sortedStrColl, sortedBooleanColl, emptyCellColl_1) :\n sortedBooleanColl.concat(sortedStrColl, sortedNumColl, emptyCellColl_1);\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var id = [];\n for (var a = 0; a < sortedVal.length; a++) {\n for (var b = 0; b < colSort_1.length; b++) {\n if (JSON.stringify(sortedVal[a]) === JSON.stringify(colSort_1[b])) {\n if (id.indexOf(b) === -1) {\n id.push(b);\n }\n }\n }\n }\n var activeCell = void 0;\n var sortActCell = void 0;\n activeCell = sortActCell = this.parent.actCell;\n if (activeCell) {\n activeCell = activeCell.indexOf('!') > -1 ? activeCell.substring(activeCell.lastIndexOf('!') + 1) : activeCell;\n }\n else {\n activeCell = this.parent.actCell;\n }\n var actRowIdx = this.parent.rowIndex(activeCell);\n var actColIdx = this.parent.colIndex(activeCell);\n if (this.parent.dependencyLevel === 0) {\n var isSpill = false;\n var resultRows = (argArr[3] === 'TRUE') ? (eRowIdx - rowIdx + 1) : id.length;\n var resultCols = (argArr[3] === 'TRUE') ? id.length : (eColIdx - colIdx + 1);\n for (var rowOffset = 0; rowOffset < resultRows; rowOffset++) {\n for (var colOffset = 0; colOffset < resultCols; colOffset++) {\n if (this.checkSpill(actColIdx + colOffset, actRowIdx + rowOffset)) {\n isSpill = true;\n }\n if (rowOffset === resultRows - 1 && colOffset === resultCols - 1) {\n var endCell = getAlphalabel(actColIdx + colOffset) + (actRowIdx + rowOffset);\n if (this.parent.sortRange.indexOf(sortActCell + ':' + endCell) === -1) {\n this.parent.sortRange.push(sortActCell + ':' + endCell);\n }\n }\n }\n }\n if (isSpill) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.Spill];\n }\n }\n else if (this.parent.dependencyLevel > 0 &&\n this.parent.getValueFromArg(getAlphalabel(actColIdx) + actRowIdx, true).indexOf('#SPILL!') > -1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.Spill];\n }\n if (argArr[3] === 'TRUE') {\n for (var startRow = rowIdx, rowInc = 0; startRow <= eRowIdx; startRow++, rowInc++) {\n for (var a = 0, colInc = 0; a < id.length; a++, colInc++) {\n var cellValue = this.parent.getValueFromArg(sheetIdx + getAlphalabel(id[a] + colIdx) + startRow);\n if (nestedFormula && cellValue !== '') {\n values.push(cellValue);\n continue;\n }\n cellValue = cellValue === '' ? '0' : cellValue;\n var activeCell_1 = this.parent.cell;\n if (activeCell_1) {\n activeCell_1 = activeCell_1.indexOf('!') > -1 ? activeCell_1.substring(activeCell_1.lastIndexOf('!') + 1) :\n activeCell_1;\n var actRowIdx_1 = this.parent.rowIndex(activeCell_1);\n var actColIdx_1 = this.parent.colIndex(activeCell_1);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.parentObject.setValueRowCol(this.parent.getSheetID(this.parent.grid) + 1, cellValue, actRowIdx_1 + rowInc, actColIdx_1 + colInc);\n }\n }\n }\n result = this.parent.getValueFromArg(sheetIdx + getAlphalabel(id[0] + colIdx) + rowIdx);\n }\n if (argArr[3] === 'FALSE') {\n for (var a = 0, rowInc = 0; a < id.length; a++, rowInc++) {\n for (var startCol = colIdx, colInc = 0; startCol <= eColIdx; startCol++, colInc++) {\n var value = this.parent.getValueFromArg(sheetIdx + getAlphalabel(startCol) + (id[a] + rowIdx));\n if (nestedFormula && value !== '') {\n values.push(value);\n continue;\n }\n value = value === '' ? '0' : value;\n var activeCell_2 = this.parent.cell;\n if (activeCell_2) {\n activeCell_2 = activeCell_2.indexOf('!') > -1 ? activeCell_2.substring(activeCell_2.lastIndexOf('!') + 1) :\n activeCell_2;\n var actColIdx_2 = this.parent.colIndex(activeCell_2);\n var actRowIdx_2 = this.parent.rowIndex(activeCell_2);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.parentObject.setValueRowCol(this.parent.getSheetID(this.parent.grid) + 1, value, actRowIdx_2 + rowInc, actColIdx_2 + colInc);\n }\n }\n }\n result = this.parent.getValueFromArg(sheetIdx + getAlphalabel(colIdx) + (id[0] + rowIdx));\n }\n }\n }\n else if (this.parent.isCellReference(argArr[0])) {\n if (this.parent.dependencyCollection.indexOf(argArr[0]) === -1) {\n if (!nestedFormula) {\n this.parent.dependencyCollection.push(argArr[0]);\n }\n }\n else {\n this.clearDependency(argArr[0]);\n }\n result = this.parent.getValueFromArg(argArr[0]);\n }\n else {\n result = argArr[0].trim();\n if (this.parent.getErrorStrings().indexOf(result) > -1) {\n return result;\n }\n result = this.parent.removeTics(result);\n }\n if (nestedFormula) {\n return values.join(',');\n }\n return result === '' ? '0' : result;\n };\n return ArrayFormulas;\n}(FormulaModuleBase));\nexport { ArrayFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined, Internationalization } from '@syncfusion/ej2-base';\nimport { isValidCellReference } from '../common/cell-ref';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Core text manipulation: concatenation, case conversion, trimming, and substring extraction.\n *\n * Registers 10 functions including FIND, CONCATENATE, CONCAT, T, EXACT, and others.\n *\n * @hidden\n */\nvar TextFormulas = /** @class */ (function (_super) {\n __extends(TextFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function TextFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n _this.isConcat = false;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'FIND', category: 'Text', description: 'Returns the position of a string of text within another string.' },\n { formulaName: 'CONCATENATE', category: 'Text', description: ' Used to join two or more strings together.' },\n { formulaName: 'CONCAT', category: 'Text', description: 'Concatenates a list or range of text strings.' },\n { formulaName: 'T', category: 'Text', description: 'Checks whether a value is text or not and returns the text.' },\n { formulaName: 'EXACT', category: 'Text', description: 'Checks whether a two text strings are exactly same and returns TRUE or FALSE.' },\n { formulaName: 'LEN', category: 'Text', description: 'Returns a number of characters in a given string.' },\n { formulaName: 'CHAR', category: 'Text', description: 'Returns the character from the specified number.' },\n { formulaName: 'CODE', category: 'Text', description: 'Returns the numeric code for the first character in a given string.' },\n { formulaName: 'DOLLAR', category: 'Text', description: 'Converts the number to currency formatted text.' },\n { formulaName: 'PROPER', category: 'Text', description: 'Converts a text to proper case; first letter to uppercase and other letters to lowercase.' }\n ];\n return _this;\n }\n /**\n * Returns the position of a string of text within another string.\n *\n * Excel: `FIND(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=FIND(1)');\n * ```\n */\n TextFormulas.prototype.ComputeFIND = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length === 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var processArgs = function (actuaValue) {\n var value = _this.parent.getValueFromArg(actuaValue);\n if (isNullOrUndefined(value)) {\n value = '';\n }\n else {\n value = value.toString();\n }\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (!_this.parent.isCellReference(actuaValue)) {\n if (value.split('%').length === 2 && _this.parent.isNumber(value.split('%')[0])) {\n value = (Number(value.split('%')[0]) * 0.01).toString();\n }\n else if (actuaValue.indexOf(_this.parent.tic) > -1) {\n if (_this.parent.removeTics(actuaValue).match(/^(\\d*\\.\\d+|\\d+)\\s*[-*/]\\s*(\\d*\\.\\d+|\\d+)$/)) {\n value = _this.parent.getValueFromArg(_this.parent.removeTics(actuaValue));\n if (isNullOrUndefined(value)) {\n value = '';\n }\n else {\n value = value.toString();\n }\n }\n else if (value.indexOf(_this.parent.tic + _this.parent.tic) > -1) {\n value = value.replace(/\"\"/g, _this.parent.tic);\n }\n }\n }\n return value;\n };\n var findText = '';\n if (!isNullOrUndefined(args[0])) {\n findText = processArgs(args[0]);\n if (errCollection.indexOf(findText) > -1) {\n return findText;\n }\n else if (!this.parent.isCellReference(args[0])) {\n findText = this.parent.removeTics(findText);\n }\n }\n var withinText = '';\n if (!isNullOrUndefined(args[1])) {\n withinText = processArgs(args[1]);\n if (errCollection.indexOf(withinText) > -1) {\n return withinText;\n }\n else if (!this.parent.isCellReference(args[1])) {\n withinText = this.parent.removeTics(withinText);\n }\n }\n var startNum = 1;\n if (!isNullOrUndefined(args[2])) {\n startNum = processArgs(args[2]);\n if (errCollection.indexOf(startNum) > -1) {\n return startNum;\n }\n else if (startNum.toUpperCase() === this.parent.trueValue) {\n startNum = '1';\n }\n else if (startNum.toUpperCase() === this.parent.falseValue) {\n startNum = '0';\n }\n if (!this.parent.isCellReference(args[2])) {\n startNum = this.parent.removeTics(startNum);\n }\n startNum = this.parent.parseFloat(startNum);\n if (isNaN(startNum) || startNum <= 0) {\n return errCollection[CommonErrors.Value];\n }\n }\n startNum = withinText.indexOf(findText, startNum - 1);\n if (startNum < 0) {\n return errCollection[CommonErrors.Value];\n }\n return (Number(startNum) + Number(1)).toString();\n };\n /**\n * Used to join two or more strings together.\n *\n * Excel: `CONCATENATE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextFormulas.prototype.ComputeCONCATENATE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n var argsList = args;\n var result = '';\n var tempStr = '';\n for (var i = 0; i < argsList.length; i++) {\n var val = argsList[i];\n if (this.parent.isCellReference(val)) {\n if (val.indexOf(':') > -1) {\n if (this.isConcat) {\n var cells = this.parent.getCellCollection(val);\n for (var i_1 = 0; i_1 < cells.length; i_1++) {\n var tempString = this.parent.getValueFromArg(cells[i_1]);\n result = result + tempString;\n }\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n }\n else {\n if (argsList.length === 1 && argsList[0].indexOf(this.parent.tic) < 0 &&\n !isValidCellReference(argsList[0])) {\n return errCollection[CommonErrors.Name];\n }\n else {\n tempStr = this.parent.getValueFromArg(val);\n }\n }\n if (errCollection.indexOf(tempStr) > -1) {\n return tempStr;\n }\n }\n else {\n if (val.startsWith(this.parent.tic) && val.endsWith(this.parent.tic) && val.indexOf('\"\"') > -1) {\n tempStr = val.substring(1, val.length - 1);\n tempStr = tempStr.replace(/\"\"/g, '\"');\n }\n else {\n tempStr = val.split(this.parent.tic).join('');\n if (!(!(this.parent.isNumber(tempStr)) && !isNullOrUndefined(this.parent.isDate(tempStr))) || val.startsWith(' n')) {\n tempStr = this.parent.getValueFromArg(val).split(this.parent.tic).join('');\n }\n }\n if (errCollection.indexOf(tempStr) > -1) {\n return tempStr;\n }\n }\n result += tempStr;\n }\n this.isConcat = false;\n return result;\n };\n /**\n * Concatenates a list or range of text strings.\n *\n * Excel: `CONCAT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextFormulas.prototype.ComputeCONCAT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _a;\n this.isConcat = true;\n return (_a = this.owner).ComputeCONCATENATE.apply(_a, args);\n };\n /**\n * Checks whether a value is text or not and returns the text.\n *\n * Excel: `T(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextFormulas.prototype.ComputeT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n var nestedFormula;\n var errCollection = this.parent.getErrorStrings();\n if (args.length && args[args.length - 1] === 'nestedFormulaTrue') {\n nestedFormula = true;\n args.pop();\n }\n if (isNullOrUndefined(args) || (args.length === 1 && args[0].trim() === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n value = this.parent.getValueFromArg(args[0]).trim();\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (args[0].indexOf(this.parent.tic) > -1) {\n value = this.parent.removeTics(args[0].trim());\n if (value.indexOf(this.parent.tic + this.parent.tic) > -1) {\n value = value.replace(/\"\"/g, this.parent.tic);\n }\n }\n else {\n if (value.split('%').length === 2 && this.parent.isNumber(value.split('%')[0])) {\n value = (Number(value.split('%')[0]) / 100).toString();\n }\n if (this.parent.isNumber(value) ||\n value.toUpperCase() === this.parent.trueValue || value.toUpperCase() === this.parent.falseValue) {\n return '';\n }\n }\n if (nestedFormula) {\n value = this.parent.tic + value + this.parent.tic;\n }\n return value;\n };\n /**\n * Checks whether a two text strings are exactly same and returns TRUE or FALSE.\n *\n * Excel: `EXACT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n TextFormulas.prototype.ComputeEXACT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = false;\n var nestedFormula = args.length && args[args.length - 1] === 'nestedFormulaTrue';\n var errCollection = this.parent.getErrorStrings();\n if (nestedFormula) {\n args.pop();\n }\n if (!args || (!args[0] && args.length === 1)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var value1;\n var value2;\n var isCellRef;\n if (args[0]) {\n value1 = this.parent.getValueFromArg(args[0]);\n if (errCollection.indexOf(value1) > -1) {\n return value1;\n }\n if (value1.indexOf(this.parent.tic) === -1 && value1.includes('%')) {\n value1 = (Number(value1.split('%')[0]) / 100).toString();\n }\n if (this.parent.isCellReference(args[0])) {\n isCellRef = true;\n }\n else {\n value1 = value1.split(this.parent.tic).join('');\n }\n }\n if (args[1]) {\n value2 = this.parent.getValueFromArg(args[1]);\n if (errCollection.indexOf(value2) > -1) {\n return value2;\n }\n if (value2.indexOf(this.parent.tic) === -1 && value2.includes('%')) {\n value2 = (Number(value2.split('%')[0]) / 100).toString();\n }\n if (this.parent.isCellReference(args[1])) {\n if (!isCellRef && ((value1.trim().length === 0) && (value2.trim().length === 0))) {\n result = false;\n }\n }\n else {\n value2 = value2.split(this.parent.tic).join('');\n if (isCellRef && ((value1.trim().length === 0) && (value2.trim().length === 0))) {\n result = false;\n }\n }\n }\n if (value1 === value2) {\n result = true;\n }\n return nestedFormula ? (result ? '1' : '0') : result;\n };\n /**\n * Returns a number of characters in a given string.\n *\n * Excel: `LEN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextFormulas.prototype.ComputeLEN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n var errorStrings = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args[0].trim() === '' && args.length === 1)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n value = this.parent.getValueFromArg(args[0]);\n if (errorStrings.indexOf(value) > -1) {\n return value;\n }\n if (args[0].indexOf(this.parent.tic) > -1) {\n if (args[0] !== value && args[0].startsWith('n')) {\n value = this.parent.removeTics(value.trim());\n }\n else {\n value = this.parent.removeTics(args[0].trim());\n if (value.indexOf(this.parent.tic + this.parent.tic) > -1) {\n value = value.replace(/\"\"/g, this.parent.tic);\n }\n }\n }\n else if (!args[0].startsWith('n') && value.split('%').length === 2 && this.parent.isNumber(value.split('%')[0])) {\n value = (Number(value.split('%')[0]) / 100).toString();\n }\n else if (this.parent.isNumber(value)) {\n value = value.trim();\n }\n return value.length;\n };\n /**\n * Returns the character from the specified number.\n *\n * Excel: `CHAR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextFormulas.prototype.ComputeCHAR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var val = this.parent.getValueFromArg(args[0]).trim();\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n else if (val.indexOf('\"TRUE\"') > -1 || (this.parent.isCellReference(args[0]) &&\n val.startsWith(this.parent.tic))) {\n return errCollection[CommonErrors.Value];\n }\n val = val.split(this.parent.tic).join('');\n if (this.parent.isNumber(val)) {\n val = Math.floor(Number(val)).toString();\n }\n else if (val.indexOf('%') > -1) {\n val = Math.floor(Number(val.split('%')[0]) / 100).toString();\n }\n else if (val === this.parent.trueValue) {\n val = '1';\n }\n if (val.toUpperCase().match(/^[0-9]+$/)) {\n var char = parseInt(val, 10);\n if (char > 255 || char <= 0) {\n return errCollection[CommonErrors.Value];\n }\n value = String.fromCharCode(char);\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n return value;\n };\n /**\n * Returns the numeric code for the first character in a given string.\n *\n * Excel: `CODE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextFormulas.prototype.ComputeCODE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0].trim() === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n value = this.parent.getValueFromArg(args[0]).trim();\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (args[0].indexOf(this.parent.tic) > -1) {\n if (args[0] !== value && args[0].startsWith('n')) {\n value = this.parent.removeTics(value.trim());\n }\n else {\n value = this.parent.removeTics(args[0].trim());\n }\n }\n else if (!args[0].startsWith('n') && value.split('%').length === 2 && this.parent.isNumber(value.split('%')[0])) {\n value = (Number(value.split('%')[0]) / 100).toString();\n }\n if (value !== '') {\n value = value.charCodeAt(0);\n }\n else {\n return errCollection[CommonErrors.Value];\n }\n return value;\n };\n /**\n * Converts the number to currency formatted text.\n *\n * Excel: `DOLLAR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextFormulas.prototype.ComputeDOLLAR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var value;\n var isEmpty;\n var nestedFormula;\n if (args.length && args[args.length - 1] === 'nestedFormulaTrue') {\n nestedFormula = true;\n args.pop();\n }\n if (args.length === 1) {\n if (args[0] === '') {\n isEmpty = true;\n }\n args.push('2');\n }\n if (isNullOrUndefined(args) || args.length !== 2 || isEmpty) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n for (var i = 0; i < args.length; i++) {\n if (args[i].indexOf(this.parent.tic) > -1) {\n if (isNaN(this.parent.parseFloat(args[i]))) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n }\n var val = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');\n var val2 = this.parent.getValueFromArg(args[1]).split(this.parent.tic).join('');\n val = val === '' || val === this.parent.falseValue ? '0' : val === this.parent.trueValue ? '1' : val;\n val2 = val2 === '' || val2 === this.parent.falseValue ? '0' : val2 === this.parent.trueValue ? '1' : val2;\n if (val === '#NAME?' || val2 === '#NAME?') {\n return this.parent.getErrorStrings()[CommonErrors.Name];\n }\n if (val.toUpperCase().match(/^[-]?[0-9.]+$/) && val2.toUpperCase().match(/^[-]?[0-9.]+$/)) {\n var intl = new Internationalization();\n var decimalCount = parseInt(val2, 10);\n var divisor = Math.pow(10, -1 * decimalCount);\n var decimalValue = '';\n for (var decimalIdx = 1; decimalIdx <= decimalCount; decimalIdx++) {\n decimalValue += '0';\n }\n var roundedNumber = Math.round(this.parent.parseFloat(val) / divisor) * divisor;\n if (!isNaN(roundedNumber)) {\n value = intl.formatNumber(roundedNumber, { format: '$#,##0.' + decimalValue + ';($#,##0.' + decimalValue + ');$0.' + decimalValue });\n }\n else {\n value = this.parent.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n if (nestedFormula) {\n value = this.parent.tic + value + this.parent.tic;\n }\n return value;\n };\n /**\n * Converts a text to proper case; first letter to uppercase and other letters to lowercase.\n *\n * Excel: `PROPER(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextFormulas.prototype.ComputePROPER = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var str;\n var nestedFormula;\n var errCollection = this.parent.getErrorStrings();\n if (args.length && args[args.length - 1] === 'nestedFormulaTrue') {\n nestedFormula = true;\n args.pop();\n }\n if (isNullOrUndefined(args) || (args[0].trim() === '' && args.length === 1)) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length > 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n str = this.parent.getValueFromArg(args[0]).trim();\n if (errCollection.indexOf(str) > -1) {\n return str;\n }\n if (args[0].indexOf(this.parent.tic) > -1) {\n if (args[0] !== str && args[0].startsWith('n')) {\n str = this.parent.removeTics(str.trim());\n }\n else {\n str = this.parent.removeTics(args[0].trim());\n if (str.indexOf(this.parent.tic + this.parent.tic) > -1) {\n str = str.replace(/\"\"/g, this.parent.tic);\n }\n }\n }\n else if (!args[0].startsWith('n') && str.split('%').length === 2 && this.parent.isNumber(str.split('%')[0])) {\n str = (Number(str.split('%')[0]) / 100).toString();\n }\n str = str.toLowerCase().replace(/\\b\\w/g, function (char) {\n return char.toUpperCase();\n }).replace(/(\\d)([a-z])/g, function (match, number, char) {\n return number + char.toUpperCase();\n });\n if (nestedFormula) {\n str = this.parent.tic + str + this.parent.tic;\n }\n return str;\n };\n return TextFormulas;\n}(FormulaModuleBase));\nexport { TextFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Extended text functions for search, replace, formatting, and character-code conversion.\n *\n * Registers 19 functions including LEFT, RIGHT, MID, UPPER, LOWER, and others.\n *\n * @hidden\n */\nvar TextExtraFormulas = /** @class */ (function (_super) {\n __extends(TextExtraFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function TextExtraFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'LEFT', category: 'Text', description: 'Returns the leftmost characters from a text value.' },\n { formulaName: 'RIGHT', category: 'Text', description: 'Returns the rightmost characters from a text value.' },\n { formulaName: 'MID', category: 'Text', description: 'Returns a specific number of characters from a text string starting at the position you specify.' },\n { formulaName: 'UPPER', category: 'Text', description: 'Converts text to uppercase.' },\n { formulaName: 'LOWER', category: 'Text', description: 'Converts text to lowercase.' },\n { formulaName: 'TRIM', category: 'Text', description: 'Removes spaces from text except for single spaces between words.' },\n { formulaName: 'REPLACE', category: 'Text', description: 'Replaces characters within text.' },\n { formulaName: 'SUBSTITUTE', category: 'Text', description: 'Substitutes new text for old text in a text string.' },\n { formulaName: 'REPT', category: 'Text', description: 'Repeats text a given number of times.' },\n { formulaName: 'SEARCH', category: 'Text', description: 'Finds one text value within another (not case-sensitive).' },\n { formulaName: 'VALUE', category: 'Text', description: 'Converts a text argument to a number.' },\n { formulaName: 'CLEAN', category: 'Text', description: 'Removes all nonprintable characters from text.' },\n { formulaName: 'FIXED', category: 'Text', description: 'Formats a number as text with a fixed number of decimals.' },\n { formulaName: 'TEXTJOIN', category: 'Text', description: 'Combines text from multiple ranges/strings with a delimiter.' },\n { formulaName: 'LEFTB', category: 'Text', description: 'Returns the leftmost characters from a text value (byte count alias).' },\n { formulaName: 'RIGHTB', category: 'Text', description: 'Returns the rightmost characters from a text value (byte count alias).' },\n { formulaName: 'MIDB', category: 'Text', description: 'Returns characters from a text string (byte count alias).' },\n { formulaName: 'REPLACEB', category: 'Text', description: 'Replaces characters within text (byte count alias).' },\n { formulaName: 'SEARCHB', category: 'Text', description: 'Finds one text value within another (byte count alias).' }\n ];\n return _this;\n }\n /**\n * Returns the leftmost characters from a text value.\n *\n * Excel: `LEFT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=LEFT(\"Calculate\",4)');\n * ```\n */\n TextExtraFormulas.prototype.ComputeLEFT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.substringSide(args, true);\n };\n /**\n * Returns the rightmost characters from a text value.\n *\n * Excel: `RIGHT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeRIGHT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.substringSide(args, false);\n };\n TextExtraFormulas.prototype.substringSide = function (args, fromLeft) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || (args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n if (args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n var count = 1;\n if (args.length === 2) {\n var num = this.resolveNumberArg(args[1]);\n if (typeof num === 'string') {\n return num;\n }\n count = Math.floor(num);\n if (count < 0) {\n return errCollection[CommonErrors.Value];\n }\n }\n if (fromLeft) {\n return text.substring(0, count);\n }\n return count >= text.length ? text : text.substring(text.length - count);\n };\n /**\n * Returns a specific number of characters from a text string starting at the position you specify.\n *\n * Excel: `MID(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeMID = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n var start = this.resolveNumberArg(args[1]);\n var numChars = this.resolveNumberArg(args[2]);\n if (typeof start === 'string') {\n return start;\n }\n if (typeof numChars === 'string') {\n return numChars;\n }\n var startIdx = Math.floor(start);\n var length = Math.floor(numChars);\n if (startIdx < 1 || length < 0) {\n return errCollection[CommonErrors.Value];\n }\n return text.substring(startIdx - 1, startIdx - 1 + length);\n };\n /**\n * Converts text to uppercase.\n *\n * Excel: `UPPER(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeUPPER = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.caseTransform(args, true);\n };\n /**\n * Converts text to lowercase.\n *\n * Excel: `LOWER(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeLOWER = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.caseTransform(args, false);\n };\n TextExtraFormulas.prototype.caseTransform = function (args, upper) {\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n return upper ? text.toUpperCase() : text.toLowerCase();\n };\n /**\n * Removes spaces from text except for single spaces between words.\n *\n * Excel: `TRIM(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeTRIM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n return text.trim().replace(/\\s+/g, ' ');\n };\n /**\n * Replaces characters within text.\n *\n * Excel: `REPLACE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeREPLACE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n var start = this.resolveNumberArg(args[1]);\n var numChars = this.resolveNumberArg(args[2]);\n var newText = this.resolveTextArg(args[3]);\n if (typeof start === 'string') {\n return start;\n }\n if (typeof numChars === 'string') {\n return numChars;\n }\n if (errCollection.indexOf(newText) > -1) {\n return newText;\n }\n var startIdx = Math.floor(start);\n var length = Math.floor(numChars);\n if (startIdx < 1 || length < 0) {\n return errCollection[CommonErrors.Value];\n }\n return text.substring(0, startIdx - 1) + newText + text.substring(startIdx - 1 + length);\n };\n /**\n * Substitutes new text for old text in a text string.\n *\n * Excel: `SUBSTITUTE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeSUBSTITUTE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n var oldText = this.resolveTextArg(args[1]);\n var newText = this.resolveTextArg(args[2]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n if (errCollection.indexOf(oldText) > -1) {\n return oldText;\n }\n if (errCollection.indexOf(newText) > -1) {\n return newText;\n }\n if (oldText === '') {\n return text;\n }\n if (args.length === 3) {\n return text.split(oldText).join(newText);\n }\n var instance = this.resolveNumberArg(args[3]);\n if (typeof instance === 'string') {\n return instance;\n }\n var nth = Math.floor(instance);\n if (nth < 1) {\n return errCollection[CommonErrors.Value];\n }\n var found = 0;\n var index = text.indexOf(oldText);\n while (index > -1) {\n found++;\n if (found === nth) {\n return text.substring(0, index) + newText + text.substring(index + oldText.length);\n }\n index = text.indexOf(oldText, index + oldText.length);\n }\n return text;\n };\n /**\n * Repeats text a given number of times.\n *\n * Excel: `REPT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeREPT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n var times = this.resolveNumberArg(args[1]);\n if (typeof times === 'string') {\n return times;\n }\n var count = Math.floor(times);\n if (count < 0) {\n return errCollection[CommonErrors.Value];\n }\n if (count === 0 || text === '') {\n return '';\n }\n return new Array(count + 1).join(text);\n };\n /**\n * Finds one text value within another (not case-sensitive).\n *\n * Excel: `SEARCH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextExtraFormulas.prototype.ComputeSEARCH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var findText = this.resolveTextArg(args[0]).toLowerCase();\n var withinText = this.resolveTextArg(args[1]).toLowerCase();\n if (errCollection.indexOf(findText) > -1) {\n return findText;\n }\n if (errCollection.indexOf(withinText) > -1) {\n return withinText;\n }\n var startNum = 1;\n if (args.length === 3) {\n var start = this.resolveNumberArg(args[2]);\n if (typeof start === 'string') {\n return start;\n }\n startNum = Math.floor(start);\n if (startNum < 1) {\n return errCollection[CommonErrors.Value];\n }\n }\n var idx = withinText.indexOf(findText, startNum - 1);\n if (idx < 0) {\n return errCollection[CommonErrors.Value];\n }\n return (idx + 1).toString();\n };\n /**\n * Converts a text argument to a number.\n *\n * Excel: `VALUE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextExtraFormulas.prototype.ComputeVALUE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n if (text === '') {\n return '0';\n }\n var cleaned = text.replace(/,/g, '').replace(/\\$/g, '').trim();\n var num = this.parent.parseFloat(cleaned);\n if (isNaN(num)) {\n return errCollection[CommonErrors.Value];\n }\n return num.toString();\n };\n /**\n * Removes all nonprintable characters from text.\n *\n * Excel: `CLEAN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeCLEAN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n var result = '';\n for (var i = 0; i < text.length; i++) {\n var code = text.charCodeAt(i);\n if (code >= 32) {\n result += text.charAt(i);\n }\n }\n return result;\n };\n /**\n * Formats a number as text with a fixed number of decimals.\n *\n * Excel: `FIXED(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeFIXED = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var number = this.resolveNumberArg(args[0]);\n if (typeof number === 'string') {\n return number;\n }\n var decimals = 2;\n if (args.length >= 2 && args[1] !== '') {\n var d = this.resolveNumberArg(args[1]);\n if (typeof d === 'string') {\n return d;\n }\n decimals = Math.floor(d);\n }\n var noCommas = false;\n if (args.length === 3 && args[2] !== '') {\n var flag = this.parent.getValueFromArg(args[2]).toUpperCase();\n noCommas = flag === this.parent.trueValue || this.parent.parseFloat(flag) !== 0;\n }\n if (decimals < 0) {\n var factor = Math.pow(10, -decimals);\n var rounded = Math.round(number / factor) * factor;\n return noCommas ? rounded.toString() : rounded.toLocaleString('en-US');\n }\n var fixed = number.toFixed(decimals);\n if (noCommas) {\n return fixed;\n }\n var parts = fixed.split('.');\n var intPart = parts[0];\n var sign = intPart.charAt(0) === '-' ? '-' : '';\n if (sign) {\n intPart = intPart.substring(1);\n }\n var grouped = '';\n for (var i = 0; i < intPart.length; i++) {\n var fromEnd = intPart.length - i;\n if (i > 0 && fromEnd % 3 === 0) {\n grouped += ',';\n }\n grouped += intPart.charAt(i);\n }\n parts[0] = sign + grouped;\n return parts.join('.');\n };\n /**\n * Combines text from multiple ranges/strings with a delimiter.\n *\n * Excel: `TEXTJOIN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeTEXTJOIN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var delimiter = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(delimiter) > -1) {\n return delimiter;\n }\n var ignoreEmptyFlag = this.parent.getValueFromArg(args[1]).toUpperCase();\n var ignoreEmpty = ignoreEmptyFlag === this.parent.trueValue ||\n (!isNaN(this.parent.parseFloat(ignoreEmptyFlag)) && this.parent.parseFloat(ignoreEmptyFlag) !== 0);\n var parts = [];\n for (var i = 2; i < args.length; i++) {\n var arg = args[i];\n if (this.parent.isCellReference(arg) && arg.indexOf(':') > -1) {\n var cells = this.parent.getCellCollection(arg);\n var list = Array.isArray(cells) ? cells : [cells];\n for (var c = 0; c < list.length; c++) {\n var val = this.parent.getValueFromArg(list[c]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (!(ignoreEmpty && val === '')) {\n parts.push(val);\n }\n }\n }\n else {\n var val = this.resolveTextArg(arg);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (!(ignoreEmpty && val === '')) {\n parts.push(val);\n }\n }\n }\n return parts.join(delimiter);\n };\n /**\n * Returns the leftmost characters from a text value (byte count alias).\n *\n * Excel: `LEFTB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeLEFTB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.ComputeLEFT.apply(this, args);\n };\n /**\n * Returns the rightmost characters from a text value (byte count alias).\n *\n * Excel: `RIGHTB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeRIGHTB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.ComputeRIGHT.apply(this, args);\n };\n /**\n * Returns characters from a text string (byte count alias).\n *\n * Excel: `MIDB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeMIDB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.ComputeMID.apply(this, args);\n };\n /**\n * Replaces characters within text (byte count alias).\n *\n * Excel: `REPLACEB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n TextExtraFormulas.prototype.ComputeREPLACEB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.ComputeREPLACE.apply(this, args);\n };\n /**\n * Finds one text value within another (byte count alias).\n *\n * Excel: `SEARCHB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextExtraFormulas.prototype.ComputeSEARCHB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.ComputeSEARCH.apply(this, args);\n };\n return TextExtraFormulas;\n}(FormulaModuleBase));\nexport { TextExtraFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Advanced text parsing, regex-style extraction, and structured text transforms.\n *\n * Registered functions: ASC, TEXTBEFORE, VALUETOTEXT, ARRAYTOTEXT.\n *\n * @hidden\n */\nvar TextAdvancedFormulas = /** @class */ (function (_super) {\n __extends(TextAdvancedFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function TextAdvancedFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'ASC', category: 'Text', description: 'Changes full-width characters to half-width.' },\n { formulaName: 'TEXTBEFORE', category: 'Text', description: 'Returns text before a given character or string.' },\n { formulaName: 'VALUETOTEXT', category: 'Text', description: 'Returns text from any specified value.' },\n { formulaName: 'ARRAYTOTEXT', category: 'Text', description: 'Returns the text representation of an array.' }\n ];\n return _this;\n }\n /**\n * Changes full-width characters to half-width.\n *\n * Excel: `ASC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=ASC(1)');\n * ```\n */\n TextAdvancedFormulas.prototype.ComputeASC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (this.parent.getErrorStrings().indexOf(text) > -1) {\n return text;\n }\n var result = '';\n for (var i = 0; i < text.length; i++) {\n var code = text.charCodeAt(i);\n if (code >= 0xFF01 && code <= 0xFF5E) {\n result += String.fromCharCode(code - 0xFEE0);\n }\n else if (code === 0x3000) {\n result += ' ';\n }\n else {\n result += text.charAt(i);\n }\n }\n return result;\n };\n /**\n * Returns text before a given character or string.\n *\n * Excel: `TEXTBEFORE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextAdvancedFormulas.prototype.ComputeTEXTBEFORE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 6) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var text = this.resolveTextArg(args[0]);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n var delimiter = this.resolveTextArg(args[1]);\n if (errCollection.indexOf(delimiter) > -1) {\n return delimiter;\n }\n var instance = 1;\n if (args.length >= 3 && args[2] !== '') {\n var inst = this.resolveNumberArg(args[2]);\n if (typeof inst === 'string') {\n return inst;\n }\n instance = Math.floor(inst);\n if (instance < 1) {\n return errCollection[CommonErrors.Value];\n }\n }\n var start = 0;\n for (var i = 0; i < instance; i++) {\n var idx = text.indexOf(delimiter, start);\n if (idx < 0) {\n if (args.length >= 6 && args[5] !== '') {\n return this.resolveTextArg(args[5]);\n }\n return errCollection[CommonErrors.NA];\n }\n if (i === instance - 1) {\n return text.substring(0, idx);\n }\n start = idx + delimiter.length;\n }\n return text;\n };\n /**\n * Returns text from any specified value.\n *\n * Excel: `VALUETOTEXT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextAdvancedFormulas.prototype.ComputeVALUETOTEXT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var errCollection = this.parent.getErrorStrings();\n var val = this.parent.getValueFromArg(args[0]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (val === '') {\n return '';\n }\n var concise = true;\n if (args.length === 2) {\n var fmt = this.resolveNumberArg(args[1]);\n if (typeof fmt === 'string') {\n return fmt;\n }\n concise = fmt === 0;\n }\n if (!concise && !this.parent.isCellReference(args[0]) && args[0].indexOf(this.parent.tic) > -1) {\n return this.parent.removeTics(val);\n }\n return val;\n };\n /**\n * Returns the text representation of an array.\n *\n * Excel: `ARRAYTOTEXT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextAdvancedFormulas.prototype.ComputeARRAYTOTEXT = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var errCollection = this.parent.getErrorStrings();\n var parts = [];\n var collect = function (arg) {\n if (_this.parent.isCellReference(arg) && arg.indexOf(':') > -1) {\n var cells = _this.parent.getCellCollection(arg);\n var list = Array.isArray(cells) ? cells : [cells];\n for (var i = 0; i < list.length; i++) {\n var val = _this.parent.getValueFromArg(list[i]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n parts.push(val);\n }\n }\n else {\n var val = _this.resolveTextArg(arg);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n parts.push(val);\n }\n return null;\n };\n var err = collect(args[0]);\n if (err) {\n return err;\n }\n return parts.join(this.parent.getParseArgumentSeparator());\n };\n return TextAdvancedFormulas;\n}(FormulaModuleBase));\nexport { TextAdvancedFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings } from '../common/index';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Type and content inspection functions that classify cell values (numbers, text, errors).\n *\n * Registered functions: ISNUMBER.\n *\n * @hidden\n */\nvar InformationFormulas = /** @class */ (function (_super) {\n __extends(InformationFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function InformationFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'ISNUMBER', category: 'Information', description: 'Returns TRUE, if the argument is number and FALSE otherwise.' }\n ];\n return _this;\n }\n /**\n * Returns TRUE, if the argument is number and FALSE otherwise.\n *\n * Excel: `ISNUMBER(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n *\n * @example\n * ```ts\n * engine.computeFormula('=ISNUMBER(1)');\n * ```\n */\n InformationFormulas.prototype.ComputeISNUMBER = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argArr = args;\n var isNestedFormula;\n if (argArr && argArr[argArr.length - 1] === 'nestedFormulaTrue') {\n isNestedFormula = true;\n argArr.pop();\n }\n if (args.length === 1 && args[0] === '') {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n }\n else if (args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var orgValue = (this.parent.isCellReference(argArr[0])) ? this.parent.getValueFromArg(argArr[0]) :\n this.parent.getValueFromArg(argArr[0].split(this.parent.tic).join(''));\n if (orgValue.toString() === '' || args.toString().startsWith(this.parent.tic)) {\n return isNestedFormula ? '0' : false;\n }\n var isLogVal = !isNaN(this.parent.parseFloat(orgValue));\n return isNestedFormula ? (isLogVal ? '1' : '0') : isLogVal;\n };\n return InformationFormulas;\n}(FormulaModuleBase));\nexport { InformationFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Extended information functions: ISBLANK, ISERROR, ISFORMULA, and cell metadata probes.\n *\n * Registers 12 functions including ISBLANK, ISTEXT, ISNONTEXT, ISLOGICAL, ISERROR, and others.\n *\n * @hidden\n */\nvar InformationExtraFormulas = /** @class */ (function (_super) {\n __extends(InformationExtraFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function InformationExtraFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'ISBLANK', category: 'Information', description: 'Returns TRUE if the value is blank.' },\n { formulaName: 'ISTEXT', category: 'Information', description: 'Returns TRUE if the value is text.' },\n { formulaName: 'ISNONTEXT', category: 'Information', description: 'Returns TRUE if the value is not text.' },\n { formulaName: 'ISLOGICAL', category: 'Information', description: 'Returns TRUE if the value is a logical value.' },\n { formulaName: 'ISERROR', category: 'Information', description: 'Returns TRUE if the value is any error value.' },\n { formulaName: 'ISERR', category: 'Information', description: 'Returns TRUE if the value is any error value except #N/A.' },\n { formulaName: 'ISNA', category: 'Information', description: 'Returns TRUE if the value is the #N/A error value.' },\n { formulaName: 'ISEVEN', category: 'Information', description: 'Returns TRUE if the number is even.' },\n { formulaName: 'ISODD', category: 'Information', description: 'Returns TRUE if the number is odd.' },\n { formulaName: 'N', category: 'Information', description: 'Returns a value converted to a number.' },\n { formulaName: 'NA', category: 'Information', description: 'Returns the error value #N/A.' },\n { formulaName: 'TYPE', category: 'Information', description: 'Returns a number indicating the data type of a value.' }\n ];\n return _this;\n }\n InformationExtraFormulas.prototype.requireOne = function (args) {\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n return null;\n };\n /**\n * Returns TRUE if the value is blank.\n *\n * Excel: `ISBLANK(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n *\n * @example\n * ```ts\n * engine.computeFormula('=ISBLANK(1)');\n * ```\n */\n InformationExtraFormulas.prototype.ComputeISBLANK = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireOne(args);\n if (bad) {\n return bad;\n }\n if (this.parent.isCellReference(args[0])) {\n return this.parent.getValueFromArg(args[0]) === '';\n }\n var val = this.parent.getValueFromArg(args[0]);\n return val === '';\n };\n /**\n * Returns TRUE if the value is text.\n *\n * Excel: `ISTEXT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n InformationExtraFormulas.prototype.ComputeISTEXT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireOne(args);\n if (bad) {\n return bad;\n }\n var val = this.parent.getValueFromArg(args[0]);\n if (this.parent.getErrorStrings().indexOf(val) > -1) {\n return false;\n }\n if (val === '') {\n return false;\n }\n if (val.toUpperCase() === this.parent.trueValue || val.toUpperCase() === this.parent.falseValue) {\n return false;\n }\n return isNaN(this.parent.parseFloat(val)) || (!this.parent.isCellReference(args[0]) && args[0].indexOf(this.parent.tic) > -1);\n };\n /**\n * Returns TRUE if the value is not text.\n *\n * Excel: `ISNONTEXT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n InformationExtraFormulas.prototype.ComputeISNONTEXT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = this.ComputeISTEXT.apply(this, args);\n return typeof result === 'string' ? result : !result;\n };\n /**\n * Returns TRUE if the value is a logical value.\n *\n * Excel: `ISLOGICAL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n InformationExtraFormulas.prototype.ComputeISLOGICAL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireOne(args);\n if (bad) {\n return bad;\n }\n var val = this.parent.getValueFromArg(args[0]).toUpperCase();\n return val === this.parent.trueValue || val === this.parent.falseValue;\n };\n /**\n * Returns TRUE if the value is any error value.\n *\n * Excel: `ISERROR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n InformationExtraFormulas.prototype.ComputeISERROR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireOne(args);\n if (bad) {\n return bad;\n }\n var val = this.parent.getValueFromArg(args[0]);\n return this.parent.getErrorStrings().indexOf(val) > -1 || /^#[A-Z/?!]+$/.test(val);\n };\n /**\n * Returns TRUE if the value is any error value except #N/A.\n *\n * Excel: `ISERR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n InformationExtraFormulas.prototype.ComputeISERR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireOne(args);\n if (bad) {\n return bad;\n }\n var val = this.parent.getValueFromArg(args[0]);\n if (val === this.parent.getErrorStrings()[CommonErrors.NA] || val === '#N/A') {\n return false;\n }\n return this.parent.getErrorStrings().indexOf(val) > -1 || /^#[A-Z/?!]+$/.test(val);\n };\n /**\n * Returns TRUE if the value is the #N/A error value.\n *\n * Excel: `ISNA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n InformationExtraFormulas.prototype.ComputeISNA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireOne(args);\n if (bad) {\n return bad;\n }\n var val = this.parent.getValueFromArg(args[0]);\n return val === this.parent.getErrorStrings()[CommonErrors.NA] || val === '#N/A';\n };\n /**\n * Returns TRUE if the number is even.\n *\n * Excel: `ISEVEN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n InformationExtraFormulas.prototype.ComputeISEVEN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.parity(args, true);\n };\n /**\n * Returns TRUE if the number is odd.\n *\n * Excel: `ISODD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {boolean} - Boolean result, nested-formula numeric string (`\"0\"`/`\"1\"`), or an Excel error token.\n */\n InformationExtraFormulas.prototype.ComputeISODD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.parity(args, false);\n };\n InformationExtraFormulas.prototype.parity = function (args, wantEven) {\n var errCollection = this.parent.getErrorStrings();\n var bad = this.requireOne(args);\n if (bad) {\n return bad;\n }\n var num = this.resolveNumberArg(args[0]);\n if (typeof num === 'string') {\n return errCollection[CommonErrors.Value];\n }\n var truncated = num < 0 ? Math.ceil(num) : Math.floor(num);\n var even = truncated % 2 === 0;\n return wantEven ? even : !even;\n };\n /**\n * Returns a value converted to a number.\n *\n * Excel: `N(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n InformationExtraFormulas.prototype.ComputeN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n var bad = this.requireOne(args);\n if (bad) {\n return bad;\n }\n var val = this.parent.getValueFromArg(args[0]);\n if (errCollection.indexOf(val) > -1) {\n return val;\n }\n if (val.toUpperCase() === this.parent.trueValue) {\n return '1';\n }\n if (val.toUpperCase() === this.parent.falseValue || val === '') {\n return '0';\n }\n var num = this.parent.parseFloat(val);\n return isNaN(num) ? '0' : num.toString();\n };\n /**\n * Returns the error value #N/A.\n *\n * Excel: `NA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed text result or an Excel error token such as `#VALUE!`.\n */\n InformationExtraFormulas.prototype.ComputeNA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args && args.length === 1 && args[0] === '') {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n if (args && args.length > 0 && !(args.length === 1 && args[0] === '')) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n return this.parent.getErrorStrings()[CommonErrors.NA];\n };\n /**\n * Returns a number indicating the data type of a value.\n *\n * Excel: `TYPE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n InformationExtraFormulas.prototype.ComputeTYPE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireOne(args);\n if (bad) {\n return bad;\n }\n var val = this.parent.getValueFromArg(args[0]);\n if (this.parent.getErrorStrings().indexOf(val) > -1 || /^#[A-Z/?!]+$/.test(val)) {\n return '16';\n }\n if (val.toUpperCase() === this.parent.trueValue || val.toUpperCase() === this.parent.falseValue) {\n return '4';\n }\n if (val !== '' && !isNaN(this.parent.parseFloat(val)) &&\n (this.parent.isCellReference(args[0]) || args[0].indexOf(this.parent.tic) === -1)) {\n return '1';\n }\n return '2';\n };\n return InformationExtraFormulas;\n}(FormulaModuleBase));\nexport { InformationExtraFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Advanced information utilities including SHEET, SHEETS, and structured reference introspection.\n *\n * Registered functions: INFO, CELL.\n *\n * @hidden\n */\nvar InformationAdvancedFormulas = /** @class */ (function (_super) {\n __extends(InformationAdvancedFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function InformationAdvancedFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'INFO', category: 'Information', description: 'Returns information about the current operating environment.' },\n { formulaName: 'CELL', category: 'Information', description: 'Returns information about the formatting, location, or contents of a cell.' }\n ];\n return _this;\n }\n /**\n * Returns information about the current operating environment.\n *\n * Excel: `INFO(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=INFO(1)');\n * ```\n */\n InformationAdvancedFormulas.prototype.ComputeINFO = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var typeText = this.resolveTextArg(args[0]).toLowerCase();\n if (errCollection.indexOf(typeText) > -1) {\n return typeText;\n }\n var validTypes = ['system', 'release', 'numfile', 'directory', 'origin', 'recalc', 'memavail', 'memused'];\n if (validTypes.indexOf(typeText) === -1) {\n return errCollection[CommonErrors.NA];\n }\n var infoType = typeText;\n switch (infoType) {\n case 'system':\n return 'pcdos';\n case 'release':\n return '16.0';\n case 'numfile':\n return '1';\n case 'directory':\n return '/';\n case 'origin':\n return 'A1';\n case 'recalc':\n return this.parent.parentObject.calculationMode === 'Manual' ? 'Manual' : 'Automatic';\n case 'memavail':\n return '1048576';\n case 'memused':\n return '0';\n default: {\n var _exhaustive = infoType;\n return _exhaustive;\n }\n }\n };\n /**\n * Returns information about the formatting, location, or contents of a cell.\n *\n * Excel: `CELL(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n InformationAdvancedFormulas.prototype.ComputeCELL = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var infoType = this.resolveTextArg(args[0]).toLowerCase();\n if (errCollection.indexOf(infoType) > -1) {\n return infoType;\n }\n var ref = args.length === 2 ? args[1] : (this.parent.actCell || this.parent.cell || 'A1');\n ref = ref.split('$').join('');\n if (!this.parent.isCellReference(ref.split(':')[0])) {\n return errCollection[CommonErrors.Value];\n }\n var cell = ref.indexOf(':') > -1 ? ref.split(':')[0] : ref;\n var stripped = cell.indexOf('!') > -1 ? cell.substring(cell.lastIndexOf('!') + 1) : cell;\n var value = this.parent.getValueFromArg(cell);\n switch (infoType) {\n case 'address':\n return '$' + stripped.replace(/([A-Z]+)(\\d+)/, '$1$$$2');\n case 'col':\n return this.parent.colIndex(stripped).toString();\n case 'row':\n return this.parent.rowIndex(stripped).toString();\n case 'contents':\n return value;\n case 'format':\n return 'G';\n case 'prefix':\n return '';\n case 'protect':\n return '0';\n case 'type':\n if (value === '') {\n return 'b';\n }\n if (this.parent.isNumber(value)) {\n return 'v';\n }\n return 'l';\n case 'width':\n return '8';\n case 'parentheses':\n return '0';\n default:\n return errCollection[CommonErrors.NA];\n }\n };\n return InformationAdvancedFormulas;\n}(FormulaModuleBase));\nexport { InformationAdvancedFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Locale-aware and ECMA date functions including DATEDIF and custom-weekend WORKDAY/NETWORKDAYS variants.\n *\n * Registered functions: DATEDIF, NETWORKDAYS.INTL, WORKDAY.INTL.\n *\n * @hidden\n */\nvar DateTimeIntlFormulas = /** @class */ (function (_super) {\n __extends(DateTimeIntlFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function DateTimeIntlFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'DATEDIF', category: 'Date & Time', description: 'Calculates the number of days, months, or years between two dates.' },\n { formulaName: 'NETWORKDAYS.INTL', category: 'Date & Time', description: 'Returns workdays between dates for a custom weekend.' },\n { formulaName: 'WORKDAY.INTL', category: 'Date & Time', description: 'Returns the date before or after a number of workdays with a custom weekend.' }\n ];\n return _this;\n }\n DateTimeIntlFormulas.prototype.toSerial = function (arg) {\n var errCollection = this.parent.getErrorStrings();\n var value = this.parent.getValueFromArg(arg);\n if (errCollection.indexOf(value) > -1) {\n return value;\n }\n if (!this.parent.isCellReference(arg)) {\n value = this.parent.removeTics(value);\n }\n if (value === '') {\n return errCollection[CommonErrors.Value];\n }\n if (this.parent.isNumber(value)) {\n return Math.floor(this.parent.parseFloat(value));\n }\n var parsed = this.parent.isDate(new Date(value));\n if (parsed) {\n return Math.floor(this.parent.toOADate(parsed));\n }\n return errCollection[CommonErrors.Value];\n };\n DateTimeIntlFormulas.prototype.holidaySet = function (arg) {\n var set = new Set();\n if (!arg || arg === '') {\n return set;\n }\n var errCollection = this.parent.getErrorStrings();\n if (this.parent.isCellReference(arg) && arg.indexOf(':') > -1) {\n var cells = this.parent.getCellCollection(arg);\n var list = Array.isArray(cells) ? cells : [cells];\n for (var i = 0; i < list.length; i++) {\n var serial = this.toSerial(list[i]);\n if (typeof serial === 'string') {\n if (errCollection.indexOf(serial) > -1) {\n return serial;\n }\n continue;\n }\n set.add(serial);\n }\n }\n else {\n var serial = this.toSerial(arg);\n if (typeof serial === 'string') {\n return serial;\n }\n set.add(serial);\n }\n return set;\n };\n DateTimeIntlFormulas.prototype.weekendMask = function (weekendArg) {\n var defaultMask = [false, false, false, false, false, true, true];\n if (!weekendArg || weekendArg === '') {\n return defaultMask;\n }\n var errCollection = this.parent.getErrorStrings();\n var text = this.resolveTextArg(weekendArg);\n if (errCollection.indexOf(text) > -1) {\n return text;\n }\n if (text.length === 7 && /^[01]+$/.test(text)) {\n var mask = [];\n for (var i = 0; i < 7; i++) {\n mask.push(text.charAt(i) === '1');\n }\n return mask;\n }\n var num = this.resolveNumberArg(weekendArg);\n if (typeof num === 'string') {\n return num;\n }\n var n = Math.floor(num);\n var masks = {\n 1: [false, false, false, false, false, true, true],\n 2: [true, false, false, false, false, false, true],\n 3: [true, true, false, false, false, false, false],\n 4: [false, true, true, false, false, false, false],\n 5: [false, false, true, true, false, false, false],\n 6: [false, false, false, true, true, false, false],\n 7: [false, false, false, false, true, true, false],\n 11: [true, false, false, false, false, false, false],\n 12: [false, true, false, false, false, false, false],\n 13: [false, false, true, false, false, false, false],\n 14: [false, false, false, true, false, false, false],\n 15: [false, false, false, false, true, false, false],\n 16: [false, false, false, false, false, true, false],\n 17: [false, false, false, false, false, false, true]\n };\n // eslint-disable-next-line security/detect-object-injection\n return masks[n] || errCollection[CommonErrors.Num];\n };\n DateTimeIntlFormulas.prototype.isWeekendMask = function (date, mask) {\n var dow = (date.getDay() + 6) % 7;\n return mask[dow];\n };\n /**\n * Calculates the number of days, months, or years between two dates.\n *\n * Excel: `DATEDIF(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=DATEDIF(DATE(2020,1,1),DATE(2024,1,1),\"Y\")');\n * ```\n */\n DateTimeIntlFormulas.prototype.ComputeDATEDIF = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var start = this.toSerial(args[0]);\n var end = this.toSerial(args[1]);\n if (typeof start === 'string') {\n return start;\n }\n if (typeof end === 'string') {\n return end;\n }\n var unit = this.resolveTextArg(args[2]).toUpperCase();\n if (start > end) {\n return errCollection[CommonErrors.Num];\n }\n var d1 = this.parent.fromOADate(start);\n var d2 = this.parent.fromOADate(end);\n switch (unit) {\n case 'Y':\n return (d2.getFullYear() - d1.getFullYear() -\n (d2.getMonth() < d1.getMonth() || (d2.getMonth() === d1.getMonth() && d2.getDate() < d1.getDate()) ? 1 : 0)).toString();\n case 'M': {\n var months = (d2.getFullYear() - d1.getFullYear()) * 12 + (d2.getMonth() - d1.getMonth());\n if (d2.getDate() < d1.getDate()) {\n months--;\n }\n return months.toString();\n }\n case 'D':\n return (end - start).toString();\n case 'MD': {\n var md = d2.getDate() - d1.getDate();\n if (md < 0) {\n md += new Date(d2.getFullYear(), d2.getMonth(), 0).getDate();\n }\n return md.toString();\n }\n case 'YM': {\n var ym = d2.getMonth() - d1.getMonth();\n if (d2.getDate() < d1.getDate()) {\n ym--;\n }\n if (ym < 0) {\n ym += 12;\n }\n return ym.toString();\n }\n case 'YD': {\n var anchor = new Date(d2.getFullYear(), d1.getMonth(), d1.getDate());\n var yd = Math.round((d2.getTime() - anchor.getTime()) / 86400000);\n if (yd < 0) {\n yd += this.isLeapYear(d2.getFullYear()) ? 366 : 365;\n }\n return yd.toString();\n }\n default:\n return errCollection[CommonErrors.Num];\n }\n };\n DateTimeIntlFormulas.prototype.isLeapYear = function (year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n };\n /**\n * Returns workdays between dates for a custom weekend.\n *\n * Excel: `NETWORKDAYS.INTL(...)`.\n *\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeIntlFormulas.prototype['ComputeNETWORKDAYS.INTL'] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var start = this.toSerial(args[0]);\n var end = this.toSerial(args[1]);\n if (typeof start === 'string') {\n return start;\n }\n if (typeof end === 'string') {\n return end;\n }\n var mask = this.weekendMask(args[2]);\n if (!(mask instanceof Array)) {\n return mask;\n }\n var holidays = this.holidaySet(args[3]);\n if (!(holidays instanceof Set)) {\n return holidays;\n }\n var step = start <= end ? 1 : -1;\n var count = 0;\n for (var s = start; step > 0 ? s <= end : s >= end; s += step) {\n var d = this.parent.fromOADate(s);\n if (!this.isWeekendMask(d, mask) && !holidays.has(s)) {\n count += step;\n }\n }\n return count.toString();\n };\n /**\n * Returns the date before or after a number of workdays with a custom weekend.\n *\n * Excel: `WORKDAY.INTL(...)`.\n *\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DateTimeIntlFormulas.prototype['ComputeWORKDAY.INTL'] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var start = this.toSerial(args[0]);\n var daysArg = this.resolveNumberArg(args[1]);\n if (typeof start === 'string') {\n return start;\n }\n if (typeof daysArg === 'string') {\n return daysArg;\n }\n var mask = this.weekendMask(args[2]);\n if (!(mask instanceof Array)) {\n return mask;\n }\n var holidays = this.holidaySet(args[3]);\n if (!(holidays instanceof Set)) {\n return holidays;\n }\n var current = start;\n var step = daysArg >= 0 ? 1 : -1;\n var remaining = Math.abs(Math.trunc(daysArg));\n while (remaining > 0) {\n current += step;\n var d = this.parent.fromOADate(current);\n if (!this.isWeekendMask(d, mask) && !holidays.has(current)) {\n remaining--;\n }\n if (current < 0) {\n return errCollection[CommonErrors.Num];\n }\n }\n return current.toString();\n };\n return DateTimeIntlFormulas;\n}(FormulaModuleBase));\nexport { DateTimeIntlFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * ECMA-376 ceiling rounding variants (ISO.CEILING and ECMA.CEILING) with significance-based rounding rules.\n *\n * Registered functions: ISO.CEILING, ECMA.CEILING.\n *\n * @hidden\n */\nvar MathCeilingEcmaFormulas = /** @class */ (function (_super) {\n __extends(MathCeilingEcmaFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function MathCeilingEcmaFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'ISO.CEILING', category: 'Math & Trig', description: 'Rounds a number up to the nearest integer or multiple of significance.' },\n { formulaName: 'ECMA.CEILING', category: 'Math & Trig', description: 'Rounds a number up, away from zero, to the nearest multiple of significance.' }\n ];\n return _this;\n }\n /**\n * Rounds a number up to the nearest integer or multiple of significance.\n *\n * Excel: `ISO.CEILING(...)`.\n *\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=ISO.CEILING(1)');\n * ```\n */\n MathCeilingEcmaFormulas.prototype['ComputeISO.CEILING'] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 1 || args.length > 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n if (typeof x === 'string') {\n return x;\n }\n var sig = 1;\n if (args.length === 2 && args[1] !== '') {\n var s = this.resolveNumberArg(args[1]);\n if (typeof s === 'string') {\n return s;\n }\n sig = Math.abs(s);\n }\n if (x === 0 || sig === 0) {\n return '0';\n }\n var result = Math.ceil(x / sig) * sig;\n return result.toString();\n };\n /**\n * Rounds a number up, away from zero, to the nearest multiple of significance.\n *\n * Excel: `ECMA.CEILING(...)`.\n *\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n MathCeilingEcmaFormulas.prototype['ComputeECMA.CEILING'] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var sig = this.resolveNumberArg(args[1]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof sig === 'string') {\n return sig;\n }\n if (x === 0 || sig === 0) {\n return '0';\n }\n if (x > 0 && sig < 0) {\n return errCollection[CommonErrors.Num];\n }\n var result;\n if (x > 0) {\n result = Math.ceil(x / sig) * sig;\n }\n else if (sig > 0) {\n result = Math.ceil(x / sig) * sig;\n }\n else {\n result = Math.floor(x / sig) * sig;\n }\n return result.toString();\n };\n return MathCeilingEcmaFormulas;\n}(FormulaModuleBase));\nexport { MathCeilingEcmaFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * ECMA information helpers such as ERROR.TYPE for classifying error values.\n *\n * Registered functions: ERROR.TYPE.\n *\n * @hidden\n */\nvar InformationEcmaFormulas = /** @class */ (function (_super) {\n __extends(InformationEcmaFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function InformationEcmaFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'ERROR.TYPE', category: 'Information', description: 'Returns a number corresponding to an error type.' }\n ];\n return _this;\n }\n /**\n * Returns a number corresponding to an error type.\n *\n * Excel: `ERROR.TYPE(...)`.\n *\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=ERROR.TYPE(1)');\n * ```\n */\n InformationEcmaFormulas.prototype['ComputeERROR.TYPE'] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 1) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var val = this.parent.getValueFromArg(args[0]);\n var map = {\n '#NULL!': 1,\n '#DIV/0!': 2,\n '#VALUE!': 3,\n '#REF!': 4,\n '#NAME?': 5,\n '#NUM!': 6,\n '#N/A': 7,\n '#GETTING_DATA': 8\n };\n // eslint-disable-next-line security/detect-object-injection\n if (map[val] !== undefined) {\n // eslint-disable-next-line security/detect-object-injection\n return map[val].toString();\n }\n for (var i = 0; i < errCollection.length; i++) {\n if (val === errCollection[i]) {\n var idx = i + 1;\n if (idx >= 1 && idx <= 8) {\n return idx.toString();\n }\n }\n }\n return errCollection[CommonErrors.NA];\n };\n return InformationEcmaFormulas;\n}(FormulaModuleBase));\nexport { InformationEcmaFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings } from '../common/index';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * ECMA text function aliases and byte-oriented variants (FINDB, LENB, USDOLLAR).\n *\n * Registered functions: USDOLLAR, FINDB, LENB.\n *\n * @hidden\n */\nvar TextEcmaFormulas = /** @class */ (function (_super) {\n __extends(TextEcmaFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function TextEcmaFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'USDOLLAR', category: 'Text', description: 'Converts a number to text using currency format (US dollar).' },\n { formulaName: 'FINDB', category: 'Text', description: 'Finds text within another string (byte-count alias of FIND).' },\n { formulaName: 'LENB', category: 'Text', description: 'Returns the length of a text string (byte-count alias of LEN).' }\n ];\n return _this;\n }\n /**\n * Converts a number to text using currency format (US dollar).\n *\n * Excel: `USDOLLAR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=USDOLLAR(1)');\n * ```\n */\n TextEcmaFormulas.prototype.ComputeUSDOLLAR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var fn = this.owner['ComputeDOLLAR'];\n if (fn) {\n return fn.apply(void 0, args);\n }\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n };\n /**\n * Finds text within another string (byte-count alias of FIND).\n *\n * Excel: `FINDB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextEcmaFormulas.prototype.ComputeFINDB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var fn = this.owner['ComputeFIND'];\n if (fn) {\n return fn.apply(void 0, args);\n }\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n };\n /**\n * Returns the length of a text string (byte-count alias of LEN).\n *\n * Excel: `LENB(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n TextEcmaFormulas.prototype.ComputeLENB = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var fn = this.owner['ComputeLEN'];\n if (fn) {\n return fn.apply(void 0, args);\n }\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];\n };\n return TextEcmaFormulas;\n}(FormulaModuleBase));\nexport { TextEcmaFormulas };\n","/**\n * Shared bond/coupon date helpers for financial ECMA formulas.\n *\n * @hidden\n */\nvar FinancialBondHelpers = /** @class */ (function () {\n function FinancialBondHelpers(parent) {\n this.parent = parent;\n }\n /**\n * yearDays helper.\n *\n * @param {number} basis - basis argument.\n * @returns {number} - yearDays result.\n */\n FinancialBondHelpers.prototype.yearDays = function (basis) {\n switch (basis) {\n case 1:\n return 365;\n case 3:\n return 365;\n default:\n return 360;\n }\n };\n /**\n * toDate helper.\n *\n * @param {number} serial - serial argument.\n * @returns {Date} - toDate result.\n */\n FinancialBondHelpers.prototype.toDate = function (serial) {\n return this.parent.fromOADate(serial);\n };\n /**\n * toSerial helper.\n *\n * @param {Date} date - date argument.\n * @returns {number} - toSerial result.\n */\n FinancialBondHelpers.prototype.toSerial = function (date) {\n return this.parent.toOADate(date);\n };\n /**\n * coupPCD helper.\n *\n * @param {number} settlement - settlement argument.\n * @param {number} maturity - maturity argument.\n * @param {number} frequency - frequency argument.\n * @returns {number} - coupPCD result.\n */\n FinancialBondHelpers.prototype.coupPCD = function (settlement, maturity, frequency) {\n var mat = this.toDate(maturity);\n var coupon = new Date(mat.getFullYear(), mat.getMonth(), mat.getDate());\n var monthsPer = 12 / frequency;\n while (this.toSerial(coupon) > settlement) {\n coupon = this.addMonths(coupon, -monthsPer);\n }\n if (this.toSerial(coupon) > settlement) {\n return settlement;\n }\n return this.toSerial(coupon);\n };\n /**\n * coupNCD helper.\n *\n * @param {number} settlement - settlement argument.\n * @param {number} maturity - maturity argument.\n * @param {number} frequency - frequency argument.\n * @returns {number} - coupNCD result.\n */\n FinancialBondHelpers.prototype.coupNCD = function (settlement, maturity, frequency) {\n var pcd = this.coupPCD(settlement, maturity, frequency);\n if (pcd <= settlement) {\n var monthsPer = 12 / frequency;\n pcd = this.toSerial(this.addMonths(this.toDate(pcd), monthsPer));\n }\n return pcd;\n };\n /**\n * coupDays helper.\n *\n * @param {number} settlement - settlement argument.\n * @param {number} maturity - maturity argument.\n * @param {number} frequency - frequency argument.\n * @param {number} basis - basis argument.\n * @returns {number} - coupDays result.\n */\n FinancialBondHelpers.prototype.coupDays = function (settlement, maturity, frequency, basis) {\n if (basis === void 0) { basis = 0; }\n var pcd = this.coupPCD(settlement, maturity, frequency);\n var ncd = this.coupNCD(settlement, maturity, frequency);\n return this.daysBetween(pcd, ncd, basis);\n };\n /**\n * coupDayBS helper.\n *\n * @param {number} settlement - settlement argument.\n * @param {number} maturity - maturity argument.\n * @param {number} frequency - frequency argument.\n * @param {number} basis - basis argument.\n * @returns {number} - coupDayBS result.\n */\n FinancialBondHelpers.prototype.coupDayBS = function (settlement, maturity, frequency, basis) {\n if (basis === void 0) { basis = 0; }\n var pcd = this.coupPCD(settlement, maturity, frequency);\n return this.daysBetween(pcd, settlement, basis);\n };\n /**\n * coupDaysNC helper.\n *\n * @param {number} settlement - settlement argument.\n * @param {number} maturity - maturity argument.\n * @param {number} frequency - frequency argument.\n * @param {number} basis - basis argument.\n * @returns {number} - coupDaysNC result.\n */\n FinancialBondHelpers.prototype.coupDaysNC = function (settlement, maturity, frequency, basis) {\n if (basis === void 0) { basis = 0; }\n var ncd = this.coupNCD(settlement, maturity, frequency);\n return this.daysBetween(settlement, ncd, basis);\n };\n /**\n * coupNum helper.\n *\n * @param {number} settlement - settlement argument.\n * @param {number} maturity - maturity argument.\n * @param {number} frequency - frequency argument.\n * @param {number} _basis - basis argument.\n * @returns {number} - coupNum result.\n */\n FinancialBondHelpers.prototype.coupNum = function (settlement, maturity, frequency, _basis) {\n if (_basis === void 0) { _basis = 0; }\n void _basis;\n var monthsPer = 12 / frequency;\n var mat = this.toDate(maturity);\n var coupon = new Date(mat.getFullYear(), mat.getMonth(), mat.getDate());\n var count = 0;\n while (this.toSerial(coupon) > settlement) {\n count++;\n coupon = this.addMonths(coupon, -monthsPer);\n }\n return count;\n };\n /**\n * daysBetween helper.\n *\n * @param {number} start - start argument.\n * @param {number} end - end argument.\n * @param {number} basis - basis argument.\n * @returns {number} - daysBetween result.\n */\n FinancialBondHelpers.prototype.daysBetween = function (start, end, basis) {\n if (basis === 1) {\n return Math.round((end - start));\n }\n var d1 = this.toDate(start);\n var d2 = this.toDate(end);\n if (basis === 3) {\n return Math.abs(Math.round((d2.getTime() - d1.getTime()) / 86400000));\n }\n var y1 = d1.getFullYear();\n var m1 = d1.getMonth() + 1;\n var day1 = d1.getDate();\n var y2 = d2.getFullYear();\n var m2 = d2.getMonth() + 1;\n var day2 = d2.getDate();\n if (day1 === 31) {\n day1 = 30;\n }\n if (day2 === 31) {\n day2 = 30;\n }\n return (y2 - y1) * 360 + (m2 - m1) * 30 + (day2 - day1);\n };\n /**\n * addMonths helper.\n *\n * @param {Date} date - date argument.\n * @param {number} months - months argument.\n * @returns {Date} - addMonths result.\n */\n FinancialBondHelpers.prototype.addMonths = function (date, months) {\n var d = new Date(date.getTime());\n d.setMonth(d.getMonth() + months);\n return d;\n };\n return FinancialBondHelpers;\n}());\nexport { FinancialBondHelpers };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\nimport { FinancialBondHelpers } from './financial-bond-helpers';\n/**\n * Bond coupon payment schedules, accrued interest, and coupon-period date boundaries.\n *\n * Registers 20 functions including COUPDAYBS, COUPDAYS, COUPDAYSNC, COUPNCD, COUPNUM, and others.\n *\n * @hidden\n */\nvar FinancialCouponsFormulas = /** @class */ (function (_super) {\n __extends(FinancialCouponsFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function FinancialCouponsFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'COUPDAYBS', category: 'Financial', description: 'Returns the number of days from the beginning of the coupon period to the settlement date.' },\n { formulaName: 'COUPDAYS', category: 'Financial', description: 'Returns the number of days in the coupon period that contains the settlement date.' },\n { formulaName: 'COUPDAYSNC', category: 'Financial', description: 'Returns the number of days from the settlement date to the next coupon date.' },\n { formulaName: 'COUPNCD', category: 'Financial', description: 'Returns the next coupon date after the settlement date.' },\n { formulaName: 'COUPNUM', category: 'Financial', description: 'Returns the number of coupons payable between settlement and maturity.' },\n { formulaName: 'COUPPCD', category: 'Financial', description: 'Returns the previous coupon date before the settlement date.' },\n { formulaName: 'ACCRINT', category: 'Financial', description: 'Returns the accrued interest for a security that pays periodic interest.' },\n { formulaName: 'ACCRINTM', category: 'Financial', description: 'Returns the accrued interest for a security that pays interest at maturity.' },\n { formulaName: 'ISPMT', category: 'Financial', description: 'Returns the interest paid during a specific period of an investment.' },\n { formulaName: 'MDURATION', category: 'Financial', description: 'Returns the modified Macauley duration for a security with an assumed par value of $100.' },\n { formulaName: 'PRICE', category: 'Financial', description: 'Returns the price per $100 face value of a security that pays periodic interest.' },\n { formulaName: 'PRICEDISC', category: 'Financial', description: 'Returns the price per $100 face value of a discounted security.' },\n { formulaName: 'PRICEMAT', category: 'Financial', description: 'Returns the price per $100 face value of a security that pays interest at maturity.' },\n { formulaName: 'TBILLEQ', category: 'Financial', description: 'Returns the bond-equivalent yield for a Treasury bill.' },\n { formulaName: 'TBILLPRICE', category: 'Financial', description: 'Returns the price per $100 face value for a Treasury bill.' },\n { formulaName: 'TBILLYIELD', category: 'Financial', description: 'Returns the yield for a Treasury bill.' },\n { formulaName: 'XNPV', category: 'Financial', description: 'Returns the net present value for a schedule of cash flows that is not necessarily periodic.' },\n { formulaName: 'YIELD', category: 'Financial', description: 'Returns the yield on a security that pays periodic interest.' },\n { formulaName: 'YIELDDISC', category: 'Financial', description: 'Returns the annual yield for a discounted security.' },\n { formulaName: 'YIELDMAT', category: 'Financial', description: 'Returns the annual yield of a security that pays interest at maturity.' }\n ];\n _this.bond = new FinancialBondHelpers(_this.parent);\n return _this;\n }\n FinancialCouponsFormulas.prototype.parseBondArgs = function (args, minLen, maxLen) {\n if (isNullOrUndefined(args) || args.length < minLen || args.length > maxLen) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n var result = { settlement: settlement, maturity: maturity };\n if (args.length >= 3) {\n var rate = this.resolveNumberArg(args[2]);\n if (typeof rate === 'string') {\n return rate;\n }\n result.rate = rate;\n }\n if (args.length >= 4) {\n var yld = this.resolveNumberArg(args[3]);\n if (typeof yld === 'string') {\n return yld;\n }\n result.yld = yld;\n }\n if (args.length >= 5) {\n var red = this.resolveNumberArg(args[4]);\n if (typeof red === 'string') {\n return red;\n }\n result.redemption = red;\n }\n result.frequency = args.length >= 6 && args[5] !== '' ? this.resolveNumberArg(args[5]) : 2;\n if (typeof result.frequency === 'string') {\n return result.frequency;\n }\n result.basis = args.length >= 7 && args[6] !== '' ? this.resolveNumberArg(args[6]) : 0;\n if (typeof result.basis === 'string') {\n return result.basis;\n }\n return result;\n };\n FinancialCouponsFormulas.prototype.coupArgs = function (args) {\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var frequency = this.resolveNumberArg(args[2]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof frequency === 'string') {\n return frequency;\n }\n var basis = 0;\n if (args.length === 4 && args[3] !== '') {\n var b = this.resolveNumberArg(args[3]);\n if (typeof b === 'string') {\n return b;\n }\n basis = Math.floor(b);\n }\n return { settlement: settlement, maturity: maturity, frequency: Math.floor(frequency), basis: basis };\n };\n /**\n * Returns the number of days from the beginning of the coupon period to the settlement date.\n *\n * Excel: `COUPDAYBS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=COUPDAYBS(1)');\n * ```\n */\n FinancialCouponsFormulas.prototype.ComputeCOUPDAYBS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var parsed = this.coupArgs(args);\n if (typeof parsed === 'string') {\n return parsed;\n }\n return this.bond.coupDayBS(parsed.settlement, parsed.maturity, parsed.frequency, parsed.basis).toString();\n };\n /**\n * Returns the number of days in the coupon period that contains the settlement date.\n *\n * Excel: `COUPDAYS(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeCOUPDAYS = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var parsed = this.coupArgs(args);\n if (typeof parsed === 'string') {\n return parsed;\n }\n return this.bond.coupDays(parsed.settlement, parsed.maturity, parsed.frequency, parsed.basis).toString();\n };\n /**\n * Returns the number of days from the settlement date to the next coupon date.\n *\n * Excel: `COUPDAYSNC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeCOUPDAYSNC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var parsed = this.coupArgs(args);\n if (typeof parsed === 'string') {\n return parsed;\n }\n return this.bond.coupDaysNC(parsed.settlement, parsed.maturity, parsed.frequency, parsed.basis).toString();\n };\n /**\n * Returns the next coupon date after the settlement date.\n *\n * Excel: `COUPNCD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeCOUPNCD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var parsed = this.coupArgs(args);\n if (typeof parsed === 'string') {\n return parsed;\n }\n return this.bond.coupNCD(parsed.settlement, parsed.maturity, parsed.frequency).toString();\n };\n /**\n * Returns the number of coupons payable between settlement and maturity.\n *\n * Excel: `COUPNUM(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeCOUPNUM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var parsed = this.coupArgs(args);\n if (typeof parsed === 'string') {\n return parsed;\n }\n return this.bond.coupNum(parsed.settlement, parsed.maturity, parsed.frequency, parsed.basis).toString();\n };\n /**\n * Returns the previous coupon date before the settlement date.\n *\n * Excel: `COUPPCD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeCOUPPCD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var parsed = this.coupArgs(args);\n if (typeof parsed === 'string') {\n return parsed;\n }\n return this.bond.coupPCD(parsed.settlement, parsed.maturity, parsed.frequency).toString();\n };\n /**\n * Returns the accrued interest for a security that pays periodic interest.\n *\n * Excel: `ACCRINT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeACCRINT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n var parsed = this.parseBondArgs(args, 6, 8);\n if (typeof parsed === 'string') {\n return parsed;\n }\n var issue = args.length >= 8 ? this.resolveNumberArg(args[7]) : parsed.settlement;\n if (typeof issue === 'string') {\n return issue;\n }\n var rate = parsed.rate;\n var freq = parsed.frequency;\n var basis = parsed.basis;\n var days = this.bond.coupDayBS(parsed.settlement, parsed.maturity, freq, basis);\n var periodDays = this.bond.coupDays(parsed.settlement, parsed.maturity, freq, basis);\n if (periodDays === 0) {\n return errCollection[CommonErrors.Num];\n }\n var par = args.length >= 7 && args[6] !== '' ? this.resolveNumberArg(args[6]) : 1000;\n return (par * rate / freq * days / periodDays).toString();\n };\n /**\n * Returns the accrued interest for a security that pays interest at maturity.\n *\n * Excel: `ACCRINTM(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeACCRINTM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 4 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var issue = this.resolveNumberArg(args[0]);\n var settlement = this.resolveNumberArg(args[1]);\n var rate = this.resolveNumberArg(args[2]);\n var par = this.resolveNumberArg(args[3]);\n if (typeof issue === 'string') {\n return issue;\n }\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof par === 'string') {\n return par;\n }\n var basis = 0;\n if (args.length === 5 && args[4] !== '') {\n var b = this.resolveNumberArg(args[4]);\n if (typeof b === 'string') {\n return b;\n }\n basis = Math.floor(b);\n }\n var days = this.bond.daysBetween(issue, settlement, basis);\n var yearDays = this.bond.yearDays(basis);\n return (par * rate * days / yearDays).toString();\n };\n /**\n * Returns the interest paid during a specific period of an investment.\n *\n * Excel: `ISPMT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeISPMT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var rate = this.resolveNumberArg(args[0]);\n var per = this.resolveNumberArg(args[1]);\n var nper = this.resolveNumberArg(args[2]);\n var pv = this.resolveNumberArg(args[3]);\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof per === 'string') {\n return per;\n }\n if (typeof nper === 'string') {\n return nper;\n }\n if (typeof pv === 'string') {\n return pv;\n }\n var p = Math.floor(per);\n if (p < 1 || p > nper) {\n return errCollection[CommonErrors.Num];\n }\n return (-pv * rate * (1 - (p - 1) / nper)).toString();\n };\n /**\n * Returns the modified Macauley duration for a security with an assumed par value of $100.\n *\n * Excel: `MDURATION(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeMDURATION = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var parsed = this.parseBondArgs(args, 5, 7);\n if (typeof parsed === 'string') {\n return parsed;\n }\n var freq = parsed.frequency;\n var yld = parsed.yld;\n var duration = 1 / freq;\n return (duration / (1 + yld / freq)).toString();\n };\n /**\n * Returns the price per $100 face value of a security that pays periodic interest.\n *\n * Excel: `PRICE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputePRICE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var parsed = this.parseBondArgs(args, 6, 7);\n if (typeof parsed === 'string') {\n return parsed;\n }\n var rate = parsed.rate;\n var yld = parsed.yld;\n var redemption = parsed.redemption;\n var freq = parsed.frequency;\n var basis = parsed.basis;\n var n = this.bond.coupNum(parsed.settlement, parsed.maturity, freq, basis);\n var dsc = this.bond.coupDaysNC(parsed.settlement, parsed.maturity, freq, basis);\n var e = this.bond.coupDays(parsed.settlement, parsed.maturity, freq, basis);\n var a = this.bond.coupDayBS(parsed.settlement, parsed.maturity, freq, basis);\n var coupon = 100 * rate / freq;\n var price = redemption / Math.pow(1 + yld / freq, n - 1 + dsc / e);\n for (var k = 1; k <= n; k++) {\n price += coupon / Math.pow(1 + yld / freq, k - 1 + dsc / e);\n }\n price -= coupon * a / e;\n return price.toString();\n };\n /**\n * Returns the price per $100 face value of a discounted security.\n *\n * Excel: `PRICEDISC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputePRICEDISC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 4 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var discount = this.resolveNumberArg(args[2]);\n var redemption = this.resolveNumberArg(args[3]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof discount === 'string') {\n return discount;\n }\n if (typeof redemption === 'string') {\n return redemption;\n }\n var basis = 0;\n if (args.length === 5 && args[4] !== '') {\n var b = this.resolveNumberArg(args[4]);\n if (typeof b === 'string') {\n return b;\n }\n basis = Math.floor(b);\n }\n var days = this.bond.daysBetween(settlement, maturity, basis);\n var yearDays = this.bond.yearDays(basis);\n return (redemption * (1 - discount * days / yearDays)).toString();\n };\n /**\n * Returns the price per $100 face value of a security that pays interest at maturity.\n *\n * Excel: `PRICEMAT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputePRICEMAT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 5 || args.length > 6) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var issue = this.resolveNumberArg(args[2]);\n var rate = this.resolveNumberArg(args[3]);\n var yld = this.resolveNumberArg(args[4]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof issue === 'string') {\n return issue;\n }\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof yld === 'string') {\n return yld;\n }\n var basis = 0;\n if (args.length === 6 && args[5] !== '') {\n var b = this.resolveNumberArg(args[5]);\n if (typeof b === 'string') {\n return b;\n }\n basis = Math.floor(b);\n }\n var yearDays = this.bond.yearDays(basis);\n var ds = this.bond.daysBetween(issue, settlement, basis);\n var dm = this.bond.daysBetween(issue, maturity, basis);\n return ((100 + rate * dm / yearDays) / (1 + yld * ds / yearDays)).toString();\n };\n /**\n * Returns the price per $100 face value for a Treasury bill.\n *\n * Excel: `TBILLPRICE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeTBILLPRICE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var discount = this.resolveNumberArg(args[2]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof discount === 'string') {\n return discount;\n }\n var days = maturity - settlement;\n if (days <= 0) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return (100 * (1 - discount * days / 360)).toString();\n };\n /**\n * Returns the yield for a Treasury bill.\n *\n * Excel: `TBILLYIELD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeTBILLYIELD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var pr = this.resolveNumberArg(args[2]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof pr === 'string') {\n return pr;\n }\n var days = maturity - settlement;\n if (days <= 0 || pr <= 0) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return ((100 - pr) / pr * 360 / days).toString();\n };\n /**\n * Returns the bond-equivalent yield for a Treasury bill.\n *\n * Excel: `TBILLEQ(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeTBILLEQ = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var yieldResult = this.ComputeTBILLYIELD.apply(this, args);\n var errCollection = this.parent.getErrorStrings();\n if (typeof yieldResult === 'string' && errCollection.indexOf(yieldResult) > -1) {\n return yieldResult;\n }\n var y = this.parent.parseFloat(yieldResult);\n return ((365 * y) / (360 - y * (this.resolveNumberArg(args[1]) - this.resolveNumberArg(args[0])))).toString();\n };\n /**\n * Returns the net present value for a schedule of cash flows that is not necessarily periodic.\n *\n * Excel: `XNPV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeXNPV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var rate = this.resolveNumberArg(args[0]);\n if (typeof rate === 'string') {\n return rate;\n }\n var values = [];\n var dates = [];\n var valCells = this.parent.getCellCollection(args[1]);\n var dateCells = this.parent.getCellCollection(args[2]);\n var vList = Array.isArray(valCells) ? valCells : [valCells];\n var dList = Array.isArray(dateCells) ? dateCells : [dateCells];\n if (vList.length !== dList.length || vList.length < 1) {\n return errCollection[CommonErrors.Num];\n }\n for (var i = 0; i < vList.length; i++) {\n var v = this.parent.getValueFromArg(vList[i]);\n var d = this.parent.getValueFromArg(dList[i]);\n if (errCollection.indexOf(v) > -1) {\n return v;\n }\n if (errCollection.indexOf(d) > -1) {\n return d;\n }\n values.push(this.parent.parseFloat(v));\n dates.push(this.parent.parseFloat(d));\n }\n var t0 = dates[0];\n var npv = 0;\n for (var i = 0; i < values.length; i++) {\n npv += values[i] / Math.pow(1 + rate, (dates[i] - t0) / 365);\n }\n return npv.toString();\n };\n /**\n * Returns the yield on a security that pays periodic interest.\n *\n * Excel: `YIELD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeYIELD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var priceResult = this.ComputePRICE.apply(this, args);\n var errCollection = this.parent.getErrorStrings();\n if (typeof priceResult === 'string' && (errCollection.indexOf(priceResult) > -1 || priceResult.match(/arguments/i))) {\n return priceResult;\n }\n var parsed = this.parseBondArgs(args, 6, 7);\n if (typeof parsed === 'string') {\n return parsed;\n }\n var price = this.parent.parseFloat(priceResult);\n var yld = parsed.yld || 0.05;\n for (var iter = 0; iter < 50; iter++) {\n parsed.yld = yld;\n var p = this.parent.parseFloat(this.ComputePRICE(args[0], args[1], args[2], yld.toString(), args[4], args[5], args[6]));\n var diff = p - price;\n if (Math.abs(diff) < 1e-8) {\n return yld.toString();\n }\n yld += diff * 0.0001;\n }\n return yld.toString();\n };\n /**\n * Returns the annual yield for a discounted security.\n *\n * Excel: `YIELDDISC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeYIELDDISC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 4 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var pr = this.resolveNumberArg(args[2]);\n var redemption = this.resolveNumberArg(args[3]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof pr === 'string') {\n return pr;\n }\n if (typeof redemption === 'string') {\n return redemption;\n }\n var basis = 0;\n if (args.length === 5 && args[4] !== '') {\n var b = this.resolveNumberArg(args[4]);\n if (typeof b === 'string') {\n return b;\n }\n basis = Math.floor(b);\n }\n var days = this.bond.daysBetween(settlement, maturity, basis);\n var yearDays = this.bond.yearDays(basis);\n if (days <= 0) {\n return this.parent.getErrorStrings()[CommonErrors.Num];\n }\n return ((redemption - pr) / pr * yearDays / days).toString();\n };\n /**\n * Returns the annual yield of a security that pays interest at maturity.\n *\n * Excel: `YIELDMAT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialCouponsFormulas.prototype.ComputeYIELDMAT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 5 || args.length > 6) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var issue = this.resolveNumberArg(args[2]);\n var rate = this.resolveNumberArg(args[3]);\n var pr = this.resolveNumberArg(args[4]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof issue === 'string') {\n return issue;\n }\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof pr === 'string') {\n return pr;\n }\n var basis = 0;\n if (args.length === 6 && args[5] !== '') {\n var b = this.resolveNumberArg(args[5]);\n if (typeof b === 'string') {\n return b;\n }\n basis = Math.floor(b);\n }\n var yearDays = this.bond.yearDays(basis);\n var ds = this.bond.daysBetween(issue, settlement, basis);\n var dm = this.bond.daysBetween(issue, maturity, basis);\n var num = (100 + rate * dm / yearDays - pr);\n var den = pr * ds / yearDays;\n if (den === 0) {\n return errCollection[CommonErrors.Num];\n }\n return (num / den).toString();\n };\n return FinancialCouponsFormulas;\n}(FormulaModuleBase));\nexport { FinancialCouponsFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FormulaModuleBase } from './formula-module-base';\nimport { FinancialBondHelpers } from './financial-bond-helpers';\n/**\n * ECMA amortization and odd-period bond pricing/yield functions for European accounting conventions.\n *\n * Registered functions: AMORDEGRC, AMORLINC, ODDFPRICE, ODDFYIELD, ODDLPRICE, ODDLYIELD.\n *\n * @hidden\n */\nvar FinancialAmortizationEcmaFormulas = /** @class */ (function (_super) {\n __extends(FinancialAmortizationEcmaFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function FinancialAmortizationEcmaFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'AMORDEGRC', category: 'Financial', description: 'Returns the depreciation for each accounting period using a depreciation coefficient.' },\n { formulaName: 'AMORLINC', category: 'Financial', description: 'Returns the depreciation for each accounting period.' },\n { formulaName: 'ODDFPRICE', category: 'Financial', description: 'Returns the price per $100 face value of a security with an odd first period.' },\n { formulaName: 'ODDFYIELD', category: 'Financial', description: 'Returns the yield of a security with an odd first period.' },\n { formulaName: 'ODDLPRICE', category: 'Financial', description: 'Returns the price per $100 face value of a security with an odd last period.' },\n { formulaName: 'ODDLYIELD', category: 'Financial', description: 'Returns the yield of a security with an odd last period.' }\n ];\n _this.bond = new FinancialBondHelpers(_this.parent);\n return _this;\n }\n /**\n * Returns the depreciation for each accounting period.\n *\n * Excel: `AMORLINC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=AMORLINC(1)');\n * ```\n */\n FinancialAmortizationEcmaFormulas.prototype.ComputeAMORLINC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 6 || args.length > 7) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var cost = this.resolveNumberArg(args[0]);\n var purchased = this.resolveNumberArg(args[1]);\n var firstPeriod = this.resolveNumberArg(args[2]);\n var salvage = this.resolveNumberArg(args[3]);\n var period = this.resolveNumberArg(args[4]);\n var rate = this.resolveNumberArg(args[5]);\n if (typeof cost === 'string') {\n return cost;\n }\n if (typeof purchased === 'string') {\n return purchased;\n }\n if (typeof firstPeriod === 'string') {\n return firstPeriod;\n }\n if (typeof salvage === 'string') {\n return salvage;\n }\n if (typeof period === 'string') {\n return period;\n }\n if (typeof rate === 'string') {\n return rate;\n }\n var p = Math.floor(period);\n if (p < 0) {\n return errCollection[CommonErrors.Num];\n }\n var dep = Math.min((cost - salvage) * rate * (p + 1), cost - salvage);\n return dep.toString();\n };\n /**\n * Returns the depreciation for each accounting period using a depreciation coefficient.\n *\n * Excel: `AMORDEGRC(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAmortizationEcmaFormulas.prototype.ComputeAMORDEGRC = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 7 || args.length > 8) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var cost = this.resolveNumberArg(args[0]);\n var purchased = this.resolveNumberArg(args[1]);\n var firstPeriod = this.resolveNumberArg(args[2]);\n var salvage = this.resolveNumberArg(args[3]);\n var period = this.resolveNumberArg(args[4]);\n var rate = this.resolveNumberArg(args[5]);\n var basis = args.length >= 8 ? this.resolveNumberArg(args[7]) : 0;\n if (typeof cost === 'string') {\n return cost;\n }\n if (typeof purchased === 'string') {\n return purchased;\n }\n if (typeof firstPeriod === 'string') {\n return firstPeriod;\n }\n if (typeof salvage === 'string') {\n return salvage;\n }\n if (typeof period === 'string') {\n return period;\n }\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof basis === 'string') {\n return basis;\n }\n var coef = rate < 0.03 ? 1 : rate < 0.05 ? 1.5 : rate < 0.1 ? 2 : 2.5;\n var linear = this.ComputeAMORLINC(args[0], args[1], args[2], args[3], args[4], (rate * coef).toString());\n return linear;\n };\n FinancialAmortizationEcmaFormulas.prototype.oddBondPrice = function (args, oddFirst) {\n if (isNullOrUndefined(args) || args.length < 7 || args.length > 9) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var settlement = this.resolveNumberArg(args[0]);\n var maturity = this.resolveNumberArg(args[1]);\n var issue = this.resolveNumberArg(args[2]);\n var firstCoupon = this.resolveNumberArg(args[3]);\n var rate = this.resolveNumberArg(args[4]);\n var yld = this.resolveNumberArg(args[5]);\n var redemption = this.resolveNumberArg(args[6]);\n if (typeof settlement === 'string') {\n return settlement;\n }\n if (typeof maturity === 'string') {\n return maturity;\n }\n if (typeof issue === 'string') {\n return issue;\n }\n if (typeof firstCoupon === 'string') {\n return firstCoupon;\n }\n if (typeof rate === 'string') {\n return rate;\n }\n if (typeof yld === 'string') {\n return yld;\n }\n if (typeof redemption === 'string') {\n return redemption;\n }\n var freq = args.length >= 8 && args[7] !== '' ? this.resolveNumberArg(args[7]) : 2;\n var basis = args.length >= 9 && args[8] !== '' ? this.resolveNumberArg(args[8]) : 0;\n if (typeof freq === 'string') {\n return freq;\n }\n if (typeof basis === 'string') {\n return basis;\n }\n var n = this.bond.coupNum(settlement, maturity, freq, basis);\n var coupon = 100 * rate / freq;\n var refDate = oddFirst ? firstCoupon : maturity;\n var days = this.bond.daysBetween(settlement, refDate, basis);\n var periodDays = this.bond.coupDays(settlement, maturity, freq, basis) || 180;\n var price = redemption / Math.pow(1 + yld / freq, n + days / periodDays);\n price += coupon * days / periodDays;\n for (var k = 1; k <= n; k++) {\n price += coupon / Math.pow(1 + yld / freq, k - 1 + days / periodDays);\n }\n return price.toString();\n };\n /**\n * Returns the price per $100 face value of a security with an odd first period.\n *\n * Excel: `ODDFPRICE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAmortizationEcmaFormulas.prototype.ComputeODDFPRICE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.oddBondPrice(args, true);\n };\n /**\n * Returns the price per $100 face value of a security with an odd last period.\n *\n * Excel: `ODDLPRICE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAmortizationEcmaFormulas.prototype.ComputeODDLPRICE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return this.oddBondPrice(args, false);\n };\n FinancialAmortizationEcmaFormulas.prototype.oddBondYield = function (computePrice, args) {\n var priceArg = args[6];\n var yldGuess = 0.05;\n var yld = yldGuess;\n var target = this.parent.parseFloat(this.resolveNumberArg(priceArg));\n for (var iter = 0; iter < 50; iter++) {\n var trialArgs = args.slice(0, 6).concat([yld.toString()], args.slice(7));\n var p = this.parent.parseFloat(computePrice.apply(void 0, trialArgs));\n var diff = p - target;\n if (Math.abs(diff) < 1e-6) {\n return yld.toString();\n }\n yld -= diff * 0.0001;\n }\n return yld.toString();\n };\n /**\n * Returns the yield of a security with an odd first period.\n *\n * Excel: `ODDFYIELD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAmortizationEcmaFormulas.prototype.ComputeODDFYIELD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 8 || args.length > 9) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n return this.oddBondYield(this.ComputeODDFPRICE.bind(this), args);\n };\n /**\n * Returns the yield of a security with an odd last period.\n *\n * Excel: `ODDLYIELD(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n FinancialAmortizationEcmaFormulas.prototype.ComputeODDLYIELD = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 8 || args.length > 9) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n return this.oddBondYield(this.ComputeODDLPRICE.bind(this), args);\n };\n return FinancialAmortizationEcmaFormulas;\n}(FormulaModuleBase));\nexport { FinancialAmortizationEcmaFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { StatisticalSampleBase } from './statistical-sample-base';\nimport { betaDist, betaInv, tCDF, tInv, fCDF } from './formula-math-helpers';\n/**\n * ECMA-376 statistical distribution and hypothesis-test functions (beta, t, F, frequency).\n *\n * Registered functions: BETADIST, BETAINV, TDIST, TINV, TTEST, FTEST, FREQUENCY.\n *\n * @hidden\n */\nvar StatisticalEcmaFormulas = /** @class */ (function (_super) {\n __extends(StatisticalEcmaFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function StatisticalEcmaFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'BETADIST', category: 'Statistical', description: 'Returns the beta cumulative distribution function.' },\n { formulaName: 'BETAINV', category: 'Statistical', description: 'Returns the inverse of the beta cumulative distribution function.' },\n { formulaName: 'TDIST', category: 'Statistical', description: 'Returns the Student t-distribution.' },\n { formulaName: 'TINV', category: 'Statistical', description: 'Returns the inverse of the Student t-distribution.' },\n { formulaName: 'TTEST', category: 'Statistical', description: 'Returns the probability associated with a Student t-test.' },\n { formulaName: 'FTEST', category: 'Statistical', description: 'Returns the result of an F-test.' },\n { formulaName: 'FREQUENCY', category: 'Statistical', description: 'Returns the frequency distribution of a range of values.' }\n ];\n return _this;\n }\n /**\n * Returns the beta cumulative distribution function.\n *\n * Excel: `BETADIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=BETADIST(1)');\n * ```\n */\n StatisticalEcmaFormulas.prototype.ComputeBETADIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var alpha = this.resolveNumberArg(args[1]);\n var betaParam = this.resolveNumberArg(args[2]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof alpha === 'string') {\n return alpha;\n }\n if (typeof betaParam === 'string') {\n return betaParam;\n }\n var a = 0;\n var b = 1;\n if (args.length >= 4 && args[3] !== '') {\n var av = this.resolveNumberArg(args[3]);\n if (typeof av === 'string') {\n return av;\n }\n a = av;\n }\n if (args.length >= 5 && args[4] !== '') {\n var bv = this.resolveNumberArg(args[4]);\n if (typeof bv === 'string') {\n return bv;\n }\n b = bv;\n }\n if (x < a || x > b || alpha <= 0 || betaParam <= 0 || a >= b) {\n return errCollection[CommonErrors.Num];\n }\n var scaled = (x - a) / (b - a);\n var result = betaDist(scaled, alpha, betaParam);\n if (isNaN(result)) {\n return errCollection[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the inverse of the beta cumulative distribution function.\n *\n * Excel: `BETAINV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalEcmaFormulas.prototype.ComputeBETAINV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 5) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var p = this.resolveNumberArg(args[0]);\n var alpha = this.resolveNumberArg(args[1]);\n var betaParam = this.resolveNumberArg(args[2]);\n if (typeof p === 'string') {\n return p;\n }\n if (typeof alpha === 'string') {\n return alpha;\n }\n if (typeof betaParam === 'string') {\n return betaParam;\n }\n var a = 0;\n var b = 1;\n if (args.length >= 4 && args[3] !== '') {\n var av = this.resolveNumberArg(args[3]);\n if (typeof av === 'string') {\n return av;\n }\n a = av;\n }\n if (args.length >= 5 && args[4] !== '') {\n var bv = this.resolveNumberArg(args[4]);\n if (typeof bv === 'string') {\n return bv;\n }\n b = bv;\n }\n var scaled = betaInv(p, alpha, betaParam);\n if (isNaN(scaled)) {\n return errCollection[CommonErrors.Num];\n }\n return (a + scaled * (b - a)).toString();\n };\n /**\n * Returns the Student t-distribution.\n *\n * Excel: `TDIST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalEcmaFormulas.prototype.ComputeTDIST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var x = this.resolveNumberArg(args[0]);\n var df = this.resolveNumberArg(args[1]);\n if (typeof x === 'string') {\n return x;\n }\n if (typeof df === 'string') {\n return df;\n }\n var tails = 1;\n if (args.length === 3 && args[2] !== '') {\n var t = this.resolveNumberArg(args[2]);\n if (typeof t === 'string') {\n return t;\n }\n tails = Math.floor(t);\n }\n var cdf = tCDF(Math.abs(x), df);\n var p = tails === 1 ? 1 - cdf : 2 * (1 - cdf);\n return p.toString();\n };\n /**\n * Returns the inverse of the Student t-distribution.\n *\n * Excel: `TINV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalEcmaFormulas.prototype.ComputeTINV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var p = this.resolveNumberArg(args[0]);\n var df = this.resolveNumberArg(args[1]);\n if (typeof p === 'string') {\n return p;\n }\n if (typeof df === 'string') {\n return df;\n }\n var tails = 2;\n if (args.length === 3 && args[2] !== '') {\n var t = this.resolveNumberArg(args[2]);\n if (typeof t === 'string') {\n return t;\n }\n tails = Math.floor(t);\n }\n var prob = tails === 1 ? 1 - p : 1 - p / 2;\n var result = tInv(prob, df);\n if (isNaN(result)) {\n return errCollection[CommonErrors.Num];\n }\n return result.toString();\n };\n /**\n * Returns the probability associated with a Student t-test.\n *\n * Excel: `TTEST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalEcmaFormulas.prototype.ComputeTTEST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length < 3 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var a = this.collectSample([args[0]], false);\n var b = this.collectSample([args[1]], false);\n if (typeof a === 'string') {\n return a;\n }\n if (typeof b === 'string') {\n return b;\n }\n if (a.length < 2 || b.length < 2) {\n return errCollection[CommonErrors.DivZero];\n }\n var meanA = this.mean(a);\n var meanB = this.mean(b);\n var varA = 0;\n var varB = 0;\n for (var i = 0; i < a.length; i++) {\n varA += Math.pow(a[i] - meanA, 2);\n }\n for (var i = 0; i < b.length; i++) {\n varB += Math.pow(b[i] - meanB, 2);\n }\n varA /= (a.length - 1);\n varB /= (b.length - 1);\n var se = Math.sqrt(varA / a.length + varB / b.length);\n if (se === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var t = Math.abs(meanA - meanB) / se;\n var df = a.length + b.length - 2;\n var tails = 2;\n if (args.length === 4 && args[3] !== '') {\n var tt = this.resolveNumberArg(args[3]);\n if (typeof tt === 'string') {\n return tt;\n }\n tails = Math.floor(tt);\n }\n var cdf = tCDF(t, df);\n var p = tails === 1 ? 1 - cdf : 2 * (1 - cdf);\n return p.toString();\n };\n /**\n * Returns the result of an F-test.\n *\n * Excel: `FTEST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalEcmaFormulas.prototype.ComputeFTEST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var a = this.collectSample([args[0]], false);\n var b = this.collectSample([args[1]], false);\n if (typeof a === 'string') {\n return a;\n }\n if (typeof b === 'string') {\n return b;\n }\n if (a.length < 2 || b.length < 2) {\n return errCollection[CommonErrors.DivZero];\n }\n var varA = this.sampleVar(a);\n var varB = this.sampleVar(b);\n if (varB === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var f = varA / varB;\n var d1 = a.length - 1;\n var d2 = b.length - 1;\n return (2 * Math.min(fCDF(f, d1, d2), fCDF(1 / f, d2, d1))).toString();\n };\n StatisticalEcmaFormulas.prototype.sampleVar = function (nums) {\n var m = this.mean(nums);\n var sum = 0;\n for (var i = 0; i < nums.length; i++) {\n sum += Math.pow(nums[i] - m, 2);\n }\n return sum / (nums.length - 1);\n };\n /**\n * Returns a frequency distribution as a vertical array (first bin when spill unavailable).\n *\n * Excel: `FREQUENCY(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n StatisticalEcmaFormulas.prototype.ComputeFREQUENCY = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var errCollection = this.parent.getErrorStrings();\n if (isNullOrUndefined(args) || args.length !== 2) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var data = this.collectSample([args[0]], false);\n var bins = this.collectSample([args[1]], false);\n if (typeof data === 'string') {\n return data;\n }\n if (typeof bins === 'string') {\n return bins;\n }\n if (bins.length === 0) {\n return errCollection[CommonErrors.Num];\n }\n var sortedBins = bins.slice().sort(function (x, y) { return x - y; });\n var counts = new Array(sortedBins.length + 1).fill(0);\n for (var i = 0; i < data.length; i++) {\n var v = data[i];\n var placed = false;\n for (var b = 0; b < sortedBins.length; b++) {\n if (v <= sortedBins[b]) {\n counts[b]++;\n placed = true;\n break;\n }\n }\n if (!placed) {\n counts[counts.length - 1]++;\n }\n }\n var sep = this.parent.getParseArgumentSeparator();\n return counts.join(sep);\n };\n return StatisticalEcmaFormulas;\n}(StatisticalSampleBase));\nexport { StatisticalEcmaFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getAlphalabel } from '../base/index';\nimport { FormulaModuleBase } from './formula-module-base';\n/**\n * Database-style conditional aggregates (DSUM, DCOUNT, DGET) over structured table ranges.\n *\n * Registers 12 functions including DAVERAGE, DCOUNT, DCOUNTA, DGET, DMAX, and others.\n *\n * @hidden\n */\nvar DatabaseFormulas = /** @class */ (function (_super) {\n __extends(DatabaseFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function DatabaseFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'DAVERAGE', category: 'Database', description: 'Averages the values in a column of a list or database that match criteria.' },\n { formulaName: 'DCOUNT', category: 'Database', description: 'Counts the cells that contain numbers in a column of a list or database that match criteria.' },\n { formulaName: 'DCOUNTA', category: 'Database', description: 'Counts nonblank cells in a column of a list or database that match criteria.' },\n { formulaName: 'DGET', category: 'Database', description: 'Extracts a single value from a column of a list or database that matches criteria.' },\n { formulaName: 'DMAX', category: 'Database', description: 'Returns the maximum value from a column of a list or database that matches criteria.' },\n { formulaName: 'DMIN', category: 'Database', description: 'Returns the minimum value from a column of a list or database that matches criteria.' },\n { formulaName: 'DPRODUCT', category: 'Database', description: 'Multiplies values in a column of a list or database that match criteria.' },\n { formulaName: 'DSTDEV', category: 'Database', description: 'Estimates the standard deviation of a population based on a sample of entries that match criteria.' },\n { formulaName: 'DSTDEVP', category: 'Database', description: 'Calculates the standard deviation of a population based on entries that match criteria.' },\n { formulaName: 'DSUM', category: 'Database', description: 'Adds the numbers in the field column of records in the database that match the criteria.' },\n { formulaName: 'DVAR', category: 'Database', description: 'Estimates variance based on a sample of entries that match criteria.' },\n { formulaName: 'DVARP', category: 'Database', description: 'Calculates variance based on the entire population of entries that match criteria.' }\n ];\n return _this;\n }\n DatabaseFormulas.prototype.readRange = function (rangeArg) {\n var errCollection = this.parent.getErrorStrings();\n if (!this.parent.isCellReference(rangeArg)) {\n return errCollection[CommonErrors.Value];\n }\n var parts = rangeArg.indexOf(':') > -1 ? rangeArg.split(':') : [rangeArg, rangeArg];\n var r1 = this.parent.rowIndex(parts[0]);\n var c1 = this.parent.colIndex(parts[0]);\n var r2 = this.parent.rowIndex(parts[1]);\n var c2 = this.parent.colIndex(parts[1]);\n var rowStart = Math.min(r1, r2);\n var rowEnd = Math.max(r1, r2);\n var colStart = Math.min(c1, c2);\n var colEnd = Math.max(c1, c2);\n var grid = [];\n for (var r = rowStart; r <= rowEnd; r++) {\n var row = [];\n for (var c = colStart; c <= colEnd; c++) {\n var addr = getAlphalabel(c) + r;\n row.push(this.parent.getValueFromArg(addr));\n }\n grid.push(row);\n }\n return grid;\n };\n DatabaseFormulas.prototype.fieldIndex = function (fieldArg, headers) {\n var errCollection = this.parent.getErrorStrings();\n var fieldVal = this.resolveTextArg(fieldArg);\n if (errCollection.indexOf(fieldVal) > -1) {\n return fieldVal;\n }\n var num = this.parent.parseFloat(fieldVal);\n if (!isNaN(num) && num >= 1 && num <= headers.length) {\n return Math.floor(num) - 1;\n }\n var upper = fieldVal.toUpperCase();\n for (var i = 0; i < headers.length; i++) {\n if (headers[i].toUpperCase() === upper) {\n return i;\n }\n }\n return errCollection[CommonErrors.Value];\n };\n DatabaseFormulas.prototype.matchCriteria = function (row, criteriaRows, headers) {\n for (var cr = 0; cr < criteriaRows.length; cr++) {\n var crit = criteriaRows[cr];\n var rowMatch = true;\n for (var c = 0; c < headers.length; c++) {\n var criterion = crit[c];\n if (criterion === undefined || criterion === '') {\n continue;\n }\n var cellVal = row[c];\n if (!this.matchesCriterion(cellVal, criterion)) {\n rowMatch = false;\n break;\n }\n }\n if (rowMatch) {\n return true;\n }\n }\n return false;\n };\n DatabaseFormulas.prototype.matchesCriterion = function (value, criterion) {\n var crit = criterion.trim();\n if (crit === '') {\n return true;\n }\n var ops = ['>=', '<=', '<>', '>', '<', '='];\n for (var i = 0; i < ops.length; i++) {\n var op = ops[i];\n if (crit.startsWith(op)) {\n var rhs = crit.substring(op.length).trim();\n var lv = this.parent.parseFloat(value);\n var rv = this.parent.parseFloat(rhs);\n if (!isNaN(lv) && !isNaN(rv)) {\n switch (op) {\n case '>=':\n return lv >= rv;\n case '<=':\n return lv <= rv;\n case '<>':\n return lv !== rv;\n case '>':\n return lv > rv;\n case '<':\n return lv < rv;\n case '=':\n return lv === rv;\n default: {\n var _exhaustive = op;\n return _exhaustive;\n }\n }\n }\n if (op === '=' || op === '') {\n return value.toUpperCase() === rhs.toUpperCase();\n }\n if (op === '<>') {\n return value.toUpperCase() !== rhs.toUpperCase();\n }\n return false;\n }\n }\n if (crit.includes('*') || crit.includes('?')) {\n // eslint-disable-next-line security/detect-non-literal-regexp\n var regex = new RegExp('^' + crit.replace(/\\*/g, '.*').replace(/\\?/g, '.') + '$', 'i');\n return regex.test(value);\n }\n return value.toUpperCase() === crit.toUpperCase();\n };\n DatabaseFormulas.prototype.collectMatching = function (databaseArg, fieldArg, criteriaArg, numbersOnly) {\n var db = this.readRange(databaseArg);\n if (typeof db === 'string') {\n return db;\n }\n if (db.length < 2) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var headers = db[0];\n var fieldIdx = this.fieldIndex(fieldArg, headers);\n if (typeof fieldIdx === 'string') {\n return fieldIdx;\n }\n var critGrid = this.readRange(criteriaArg);\n if (typeof critGrid === 'string') {\n return critGrid;\n }\n if (critGrid.length < 2) {\n return this.parent.getErrorStrings()[CommonErrors.Value];\n }\n var critHeaders = critGrid[0];\n var critRows = critGrid.slice(1);\n var nums = [];\n var _loop_1 = function (r) {\n var row = db[r];\n var aligned = headers.map(function (_h, i) { return row[i] || ''; });\n var critAligned = critRows.map(function (cr) {\n return critHeaders.map(function (_h, i) { return cr[i] || ''; });\n });\n if (!this_1.matchCriteria(aligned, critAligned, headers)) {\n return \"continue\";\n }\n var val = row[fieldIdx] || '';\n if (numbersOnly) {\n if (val !== '' && this_1.parent.isNumber(val)) {\n nums.push(this_1.parent.parseFloat(val));\n }\n }\n else if (val !== '') {\n if (this_1.parent.isNumber(val)) {\n nums.push(this_1.parent.parseFloat(val));\n }\n }\n };\n var this_1 = this;\n for (var r = 1; r < db.length; r++) {\n _loop_1(r);\n }\n return nums;\n };\n DatabaseFormulas.prototype.requireThree = function (args) {\n if (isNullOrUndefined(args) || args.length !== 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n return null;\n };\n DatabaseFormulas.prototype.mean = function (nums) {\n return nums.reduce(function (a, b) { return a + b; }, 0) / nums.length;\n };\n DatabaseFormulas.prototype.variance = function (nums, population) {\n var m = this.mean(nums);\n var sum = 0;\n for (var i = 0; i < nums.length; i++) {\n sum += Math.pow(nums[i] - m, 2);\n }\n return sum / (population ? nums.length : nums.length - 1);\n };\n /**\n * Averages the values in a column of a list or database that match criteria.\n *\n * Excel: `DAVERAGE(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=DAVERAGE(1)');\n * ```\n */\n DatabaseFormulas.prototype.ComputeDAVERAGE = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var nums = this.collectMatching(args[0], args[1], args[2], true);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return this.parent.getErrorStrings()[CommonErrors.DivZero];\n }\n return this.mean(nums).toString();\n };\n /**\n * Counts the cells that contain numbers in a column of a list or database that match criteria.\n *\n * Excel: `DCOUNT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDCOUNT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var nums = this.collectMatching(args[0], args[1], args[2], true);\n if (typeof nums === 'string') {\n return nums;\n }\n return nums.length.toString();\n };\n /**\n * Counts nonblank cells in a column of a list or database that match criteria.\n *\n * Excel: `DCOUNTA(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDCOUNTA = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var db = this.readRange(args[0]);\n if (typeof db === 'string') {\n return db;\n }\n var headers = db[0];\n var fieldIdx = this.fieldIndex(args[1], headers);\n if (typeof fieldIdx === 'string') {\n return fieldIdx;\n }\n var critGrid = this.readRange(args[2]);\n if (typeof critGrid === 'string') {\n return critGrid;\n }\n var critRows = critGrid.slice(1);\n var count = 0;\n for (var r = 1; r < db.length; r++) {\n var row = db[r];\n var critAligned = critRows.map(function (cr) {\n return critGrid[0].map(function (_h, i) { return cr[i] || ''; });\n });\n if (this.matchCriteria(row, critAligned, headers) && (row[fieldIdx] || '') !== '') {\n count++;\n }\n }\n return count.toString();\n };\n /**\n * Extracts a single value from a column of a list or database that matches criteria.\n *\n * Excel: `DGET(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDGET = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var errCollection = this.parent.getErrorStrings();\n var nums = this.collectMatching(args[0], args[1], args[2], false);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return errCollection[CommonErrors.NA];\n }\n if (nums.length > 1) {\n return errCollection[CommonErrors.Num];\n }\n return nums[0].toString();\n };\n /**\n * Returns the maximum value from a column of a list or database that matches criteria.\n *\n * Excel: `DMAX(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDMAX = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var nums = this.collectMatching(args[0], args[1], args[2], true);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n return Math.max.apply(Math, nums).toString();\n };\n /**\n * Returns the minimum value from a column of a list or database that matches criteria.\n *\n * Excel: `DMIN(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDMIN = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var nums = this.collectMatching(args[0], args[1], args[2], true);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n return Math.min.apply(Math, nums).toString();\n };\n /**\n * Multiplies values in a column of a list or database that match criteria.\n *\n * Excel: `DPRODUCT(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDPRODUCT = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var nums = this.collectMatching(args[0], args[1], args[2], true);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length === 0) {\n return '0';\n }\n return nums.reduce(function (a, b) { return a * b; }, 1).toString();\n };\n /**\n * Adds the numbers in the field column of records in the database that match the criteria.\n *\n * Excel: `DSUM(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDSUM = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var nums = this.collectMatching(args[0], args[1], args[2], true);\n if (typeof nums === 'string') {\n return nums;\n }\n return nums.reduce(function (a, b) { return a + b; }, 0).toString();\n };\n /**\n * Estimates the standard deviation of a population based on a sample of entries that match criteria.\n *\n * Excel: `DSTDEV(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDSTDEV = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var errCollection = this.parent.getErrorStrings();\n var nums = this.collectMatching(args[0], args[1], args[2], true);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length < 2) {\n return errCollection[CommonErrors.DivZero];\n }\n return Math.sqrt(this.variance(nums, false)).toString();\n };\n /**\n * Calculates the standard deviation of a population based on entries that match criteria.\n *\n * Excel: `DSTDEVP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDSTDEVP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var errCollection = this.parent.getErrorStrings();\n var nums = this.collectMatching(args[0], args[1], args[2], true);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length < 1) {\n return errCollection[CommonErrors.DivZero];\n }\n return Math.sqrt(this.variance(nums, true)).toString();\n };\n /**\n * Estimates variance based on a sample of entries that match criteria.\n *\n * Excel: `DVAR(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDVAR = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var errCollection = this.parent.getErrorStrings();\n var nums = this.collectMatching(args[0], args[1], args[2], true);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length < 2) {\n return errCollection[CommonErrors.DivZero];\n }\n return this.variance(nums, false).toString();\n };\n /**\n * Calculates variance based on the entire population of entries that match criteria.\n *\n * Excel: `DVARP(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n DatabaseFormulas.prototype.ComputeDVARP = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var bad = this.requireThree(args);\n if (bad) {\n return bad;\n }\n var errCollection = this.parent.getErrorStrings();\n var nums = this.collectMatching(args[0], args[1], args[2], true);\n if (typeof nums === 'string') {\n return nums;\n }\n if (nums.length < 1) {\n return errCollection[CommonErrors.DivZero];\n }\n return this.variance(nums, true).toString();\n };\n return DatabaseFormulas;\n}(FormulaModuleBase));\nexport { DatabaseFormulas };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FormulasErrorsStrings, CommonErrors } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { StatisticalSampleBase } from './statistical-sample-base';\n/**\n * ECMA-376 linear and exponential regression/trend functions (LINEST, LOGEST, TREND, GROWTH).\n *\n * Registered functions: LINEST, LOGEST, GROWTH, TREND.\n *\n * @hidden\n */\nvar RegressionEcmaFormulas = /** @class */ (function (_super) {\n __extends(RegressionEcmaFormulas, _super);\n /**\n * @hidden\n * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).\n */\n function RegressionEcmaFormulas(owner) {\n var _this = _super.call(this, owner) || this;\n /** Formula definitions registered with {@link BasicFormulas}. */\n _this.formulas = [\n { formulaName: 'LINEST', category: 'Statistical', description: 'Returns statistics that describe a linear trend.' },\n { formulaName: 'LOGEST', category: 'Statistical', description: 'Returns statistics that describe an exponential curve.' },\n { formulaName: 'GROWTH', category: 'Statistical', description: 'Returns numbers in an exponential growth trend.' },\n { formulaName: 'TREND', category: 'Statistical', description: 'Returns numbers in a linear trend.' }\n ];\n return _this;\n }\n RegressionEcmaFormulas.prototype.linearRegression = function (yArg, xArg) {\n var pair = this.collectPair([xArg, yArg]);\n if (typeof pair === 'string') {\n return pair;\n }\n var x = pair.x, y = pair.y;\n if (x.length < 2) {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n var meanX = this.mean(x);\n var meanY = this.mean(y);\n var sxx = 0;\n var sxy = 0;\n for (var i = 0; i < x.length; i++) {\n var dx = x[i] - meanX;\n sxx += dx * dx;\n sxy += dx * (y[i] - meanY);\n }\n if (sxx === 0) {\n return this.parent.getErrorStrings()[CommonErrors.DivZero];\n }\n var slope = sxy / sxx;\n var intercept = meanY - slope * meanX;\n return { slope: slope, intercept: intercept };\n };\n RegressionEcmaFormulas.prototype.expRegression = function (yArg, xArg) {\n var pair = this.collectPair([xArg, yArg]);\n if (typeof pair === 'string') {\n return pair;\n }\n var x = pair.x, y = pair.y;\n var errCollection = this.parent.getErrorStrings();\n if (x.length < 2) {\n return errCollection[CommonErrors.NA];\n }\n var lnY = [];\n for (var i = 0; i < y.length; i++) {\n if (y[i] <= 0) {\n return errCollection[CommonErrors.Num];\n }\n lnY.push(Math.log(y[i]));\n }\n var meanX = this.mean(x);\n var meanLnY = this.mean(lnY);\n var sxx = 0;\n var sxy = 0;\n for (var i = 0; i < x.length; i++) {\n var dx = x[i] - meanX;\n sxx += dx * dx;\n sxy += dx * (lnY[i] - meanLnY);\n }\n if (sxx === 0) {\n return errCollection[CommonErrors.DivZero];\n }\n var m = sxy / sxx;\n var b = Math.exp(meanLnY - m * meanX);\n return { b: b, m: m };\n };\n /**\n * Returns statistics that describe a linear trend (slope when spill unavailable).\n *\n * Excel: `LINEST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n *\n * @example\n * ```ts\n * engine.computeFormula('=LINEST(1)');\n * ```\n */\n RegressionEcmaFormulas.prototype.ComputeLINEST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var reg = this.linearRegression(args[0], args[1]);\n if (typeof reg === 'string') {\n return reg;\n }\n return reg.slope.toString();\n };\n /**\n * Returns statistics that describe an exponential curve (first coefficient when spill unavailable).\n *\n * Excel: `LOGEST(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n RegressionEcmaFormulas.prototype.ComputeLOGEST = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 4) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var reg = this.expRegression(args[0], args[1]);\n if (typeof reg === 'string') {\n return reg;\n }\n return reg.b.toString();\n };\n /**\n * Returns y values along a linear trend (first predicted value when spill unavailable).\n *\n * Excel: `TREND(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n RegressionEcmaFormulas.prototype.ComputeTREND = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var reg = this.linearRegression(args[0], args[1]);\n if (typeof reg === 'string') {\n return reg;\n }\n var xVal;\n if (args.length === 3 && args[2] !== '') {\n var xNew = this.collectSample([args[2]], false);\n if (typeof xNew === 'string') {\n return xNew;\n }\n if (xNew.length === 0) {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n xVal = xNew[0];\n }\n else {\n var xData = this.collectSample([args[1]], false);\n if (typeof xData === 'string') {\n return xData;\n }\n xVal = xData[xData.length - 1] + 1;\n }\n return (reg.intercept + reg.slope * xVal).toString();\n };\n /**\n * Returns y values along an exponential growth trend (first predicted value when spill unavailable).\n *\n * Excel: `GROWTH(...)`.\n *\n * @hidden\n * @param {string[]} args - Formula argument tokens from the Calculate engine.\n * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.\n */\n RegressionEcmaFormulas.prototype.ComputeGROWTH = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNullOrUndefined(args) || args.length < 2 || args.length > 3) {\n return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var reg = this.expRegression(args[0], args[1]);\n if (typeof reg === 'string') {\n return reg;\n }\n var xVal;\n if (args.length === 3 && args[2] !== '') {\n var xNew = this.collectSample([args[2]], false);\n if (typeof xNew === 'string') {\n return xNew;\n }\n if (xNew.length === 0) {\n return this.parent.getErrorStrings()[CommonErrors.NA];\n }\n xVal = xNew[0];\n }\n else {\n var xData = this.collectSample([args[1]], false);\n if (typeof xData === 'string') {\n return xData;\n }\n xVal = xData[xData.length - 1] + 1;\n }\n return (reg.b * Math.pow(Math.E, reg.m * xVal)).toString();\n };\n return RegressionEcmaFormulas;\n}(StatisticalSampleBase));\nexport { RegressionEcmaFormulas };\n","import { getValue } from '@syncfusion/ej2-base';\nimport { MathAggregateFormulas } from './math-aggregate';\nimport { MathRoundingFormulas } from './math-rounding';\nimport { MathMiscFormulas } from './math-misc';\nimport { MathTrigFormulas } from './math-trig';\nimport { MathTrigHyperbolicFormulas } from './math-trig-hyperbolic';\nimport { MathCombinatoricsFormulas } from './math-combinatorics';\nimport { MathNumberFormulas } from './math-number';\nimport { MatrixFormulas } from './matrix';\nimport { EngineeringBaseFormulas } from './engineering-base';\nimport { EngineeringMiscFormulas } from './engineering-misc';\nimport { EngineeringConvertFormulas } from './engineering-convert';\nimport { EngineeringBesselFormulas } from './engineering-bessel';\nimport { FinancialAnnuityFormulas } from './financial-annuity';\nimport { FinancialDepreciationFormulas } from './financial-depreciation';\nimport { FinancialRatesFormulas } from './financial-rates';\nimport { FinancialCashflowFormulas } from './financial-cashflow';\nimport { FinancialSecuritiesFormulas } from './financial-securities';\nimport { StatisticalFormulas } from './statistical';\nimport { StatisticalAdvancedFormulas } from './statistical-advanced';\nimport { StatisticalDispersionFormulas } from './statistical-dispersion';\nimport { StatisticalMomentsFormulas } from './statistical-moments';\nimport { StatisticalCorrelationFormulas } from './statistical-correlation';\nimport { StatisticalPercentileFormulas } from './statistical-percentile';\nimport { StatisticalDistributionFormulas } from './statistical-distribution';\nimport { StatisticalIfsFormulas } from './statistical-ifs';\nimport { StatisticalExtendedFormulas } from './statistical-extended';\nimport { StatisticalDistributionExtendedFormulas } from './statistical-distribution-extended';\nimport { ComplexNumbersFormulas } from './complex-numbers';\nimport { DateTimeFormulas } from './date-time';\nimport { DateTimeExtraFormulas } from './date-time-extra';\nimport { LogicalFormulas } from './logical';\nimport { LogicalExtraFormulas } from './logical-extra';\nimport { LookupFormulas } from './lookup';\nimport { LookupRefFormulas } from './lookup-ref';\nimport { LookupRefExtraFormulas } from './lookup-ref-extra';\nimport { LookupArrayFormulas } from './lookup-array';\nimport { ArrayFormulas } from './array';\nimport { TextFormulas } from './text';\nimport { TextExtraFormulas } from './text-extra';\nimport { TextAdvancedFormulas } from './text-advanced';\nimport { InformationFormulas } from './information';\nimport { InformationExtraFormulas } from './information-extra';\nimport { InformationAdvancedFormulas } from './information-advanced';\nimport { DateTimeIntlFormulas } from './date-time-intl';\nimport { MathCeilingEcmaFormulas } from './math-ceiling-ecma';\nimport { InformationEcmaFormulas } from './information-ecma';\nimport { TextEcmaFormulas } from './text-ecma';\nimport { FinancialCouponsFormulas } from './financial-coupons';\nimport { FinancialAmortizationEcmaFormulas } from './financial-amortization-ecma';\nimport { StatisticalEcmaFormulas } from './statistical-ecma';\nimport { DatabaseFormulas } from './database';\nimport { RegressionEcmaFormulas } from './regression-ecma';\n/**\n * Central registry that composes all built-in formula category modules and binds them to the Calculate engine.\n *\n * Instantiated by the {@link Calculate} constructor. Each category module contributes\n * `formulas` metadata and `Compute*` handlers that are registered into\n * {@link Calculate.getLibraryFormulas}.\n *\n * @example\n * ```ts\n * // Constructed automatically:\n * const engine = new Calculate();\n * engine.getFunction('SUM'); // bound ComputeSUM handler\n * ```\n * @hidden\n */\nvar BasicFormulas = /** @class */ (function () {\n /**\n * @param {Object} parent - Calculate engine instance that owns formula registration.\n */\n function BasicFormulas(parent) {\n /** Catalog of built-in formula metadata and bound Compute handlers. */\n this.formulas = [];\n /** @hidden */\n this.isConcat = false;\n this.parent = parent;\n var modules = [\n new MathAggregateFormulas(this),\n new MathRoundingFormulas(this),\n new MathMiscFormulas(this),\n new MathTrigFormulas(this),\n new MathTrigHyperbolicFormulas(this),\n new MathCombinatoricsFormulas(this),\n new MathNumberFormulas(this),\n new MatrixFormulas(this),\n new EngineeringBaseFormulas(this),\n new EngineeringMiscFormulas(this),\n new EngineeringConvertFormulas(this),\n new EngineeringBesselFormulas(this),\n new FinancialAnnuityFormulas(this),\n new FinancialDepreciationFormulas(this),\n new FinancialRatesFormulas(this),\n new FinancialCashflowFormulas(this),\n new FinancialSecuritiesFormulas(this),\n new StatisticalFormulas(this),\n new StatisticalAdvancedFormulas(this),\n new StatisticalDispersionFormulas(this),\n new StatisticalMomentsFormulas(this),\n new StatisticalCorrelationFormulas(this),\n new StatisticalPercentileFormulas(this),\n new StatisticalDistributionFormulas(this),\n new StatisticalIfsFormulas(this),\n new StatisticalExtendedFormulas(this),\n new StatisticalDistributionExtendedFormulas(this),\n new ComplexNumbersFormulas(this),\n new DateTimeFormulas(this),\n new DateTimeExtraFormulas(this),\n new LogicalFormulas(this),\n new LogicalExtraFormulas(this),\n new LookupFormulas(this),\n new LookupRefFormulas(this),\n new LookupRefExtraFormulas(this),\n new LookupArrayFormulas(this),\n new ArrayFormulas(this),\n new TextFormulas(this),\n new TextExtraFormulas(this),\n new TextAdvancedFormulas(this),\n new InformationFormulas(this),\n new InformationExtraFormulas(this),\n new InformationAdvancedFormulas(this),\n new DateTimeIntlFormulas(this),\n new MathCeilingEcmaFormulas(this),\n new InformationEcmaFormulas(this),\n new TextEcmaFormulas(this),\n new FinancialCouponsFormulas(this),\n new FinancialAmortizationEcmaFormulas(this),\n new StatisticalEcmaFormulas(this),\n new DatabaseFormulas(this),\n new RegressionEcmaFormulas(this)\n ];\n for (var m = 0; m < modules.length; m++) {\n var mod = modules[m];\n for (var i = 0; i < mod.formulas.length; i++) {\n var formula = mod.formulas[i];\n this.formulas.push(formula);\n var methodName = 'Compute' + formula.formulaName;\n var handler = formula.formulaName.indexOf('.') > -1\n // eslint-disable-next-line security/detect-object-injection\n ? mod[methodName]\n : getValue(methodName, mod);\n if (handler) {\n // eslint-disable-next-line security/detect-object-injection\n this[methodName] = handler.bind(mod);\n }\n }\n }\n this.init();\n }\n /**\n * init helper.\n *\n * @returns {void} - init result.\n */\n BasicFormulas.prototype.init = function () {\n for (var i = 0; i < this.formulas.length; i++) {\n var formula = this.formulas[i];\n var fn = this['Compute' + formula.formulaName];\n this.addFormulaCollection(formula.formulaName.toUpperCase(), fn, formula.category, formula.description);\n }\n };\n /**\n * Registers one formula handler on the parent Calculate engine.\n *\n * @param {string} formulaName - Uppercase formula name key.\n * @param {Function} functionName - Bound Compute handler.\n * @param {string} formulaCategory - Formula category label.\n * @param {string} description - Human-readable formula description.\n * @returns {void}\n * @internal\n */\n BasicFormulas.prototype.addFormulaCollection = function (formulaName, functionName, formulaCategory, description) {\n this.parent.libraryFormulas = {\n fName: formulaName, handler: functionName, category: formulaCategory,\n description: description\n };\n };\n return BasicFormulas;\n}());\nexport { BasicFormulas };\n","/**\n * Find sheet index by internal sheet token name (e.g. 'Sheet1').\n *\n * @hidden\n * @param {string} name - Sheet token name.\n * @param {CalculateSheetInfo[]} info - Host sheet info list.\n * @returns {number} - Sheet index, or -1 when not found.\n */\nexport function getSheetIndexByName(name, info) {\n var len = info.length;\n for (var i = 0; i < len; i++) {\n if (info[i].sheet.toUpperCase() === name.toUpperCase()) {\n return info[i].index;\n }\n }\n return -1;\n}\n","/**\n * Formula tokenizer and parser for the Calculate engine.\n *\n * Converts Excel-style formula text into an internal token string consumed by\n * {@link Calculate.computeFormula}. Handles operators, library function markers,\n * named ranges, and sheet references.\n *\n * @remarks\n * Prefer {@link Calculate.computeFormula} or {@link Calculate.computeExpression}\n * for evaluation. Use {@link Parser.parseFormula} when you need the parsed token\n * form without computing a result.\n *\n * @hidden\n */\nimport { FormulaError } from './index';\nimport { CommonErrors, FormulasErrorsStrings, isExternalFileLink } from '../common/index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar Parser = /** @class */ (function () {\n /**\n * @param {Object} parent - Owning {@link Calculate} engine instance.\n */\n function Parser(parent) {\n this.emptyStr = '';\n this.storedStringText = this.emptyStr;\n this.sheetToken = '!';\n /** @hidden */\n this.tokenAdd = 'a';\n /** @hidden */\n this.tokenSubtract = 's';\n /** @hidden */\n this.tokenMultiply = 'm';\n /** @hidden */\n this.tokenDivide = 'd';\n /** @hidden */\n this.tokenLess = 'l';\n this.charEm = 'r';\n this.charEp = 'x';\n /** @hidden */\n this.tokenGreater = 'g';\n /** @hidden */\n this.tokenEqual = 'e';\n /** @hidden */\n this.tokenLessEq = 'k';\n /** @hidden */\n this.tokenGreaterEq = 'j';\n /** @hidden */\n this.tokenNotEqual = 'o';\n /** @hidden */\n this.tokenAnd = 'c';\n this.tokenEm = 'v';\n this.tokenEp = 't';\n /** @hidden */\n this.tokenOr = String.fromCharCode(126);\n this.charAnd = 'i';\n this.charLess = '<';\n this.charGreater = '>';\n this.charEqual = '=';\n this.charLessEq = 'f';\n this.charGreaterEq = 'h';\n this.charNoEqual = 'z';\n this.stringGreaterEq = '>=';\n this.stringLessEq = '<=';\n this.stringNoEqual = '<>';\n this.stringAnd = '&';\n this.stringOr = '^';\n this.charOr = 'w';\n this.charAdd = '+';\n this.charSubtract = '-';\n this.charMultiply = '*';\n this.charDivide = '/';\n this.fixedReference = '$';\n this.spaceString = ' ';\n this.ignoreBracet = false;\n /**\n * When `true`, the last parse attempt failed.\n *\n * @internal\n */\n this.isError = false;\n /**\n * When `true`, formula text passed to compute is already a parsed token string.\n *\n * @internal\n */\n this.isFormulaParsed = false;\n this.findNamedRange = false;\n this.stringsColl = new Map();\n this.tokens = [\n this.tokenAdd, this.tokenSubtract, this.tokenMultiply, this.tokenDivide, this.tokenLess,\n this.tokenGreater, this.tokenEqual, this.tokenLessEq, this.tokenGreaterEq, this.tokenNotEqual, this.tokenAnd, this.tokenOr\n ];\n this.charNOTop = String.fromCharCode(167);\n this.specialSym = ['~', '@', '#', '?'];\n this.isFailureTriggered = false;\n this.parent = parent;\n }\n /**\n * Parses formula text into the engine's internal token representation.\n *\n * Performs named-range substitution, string literal extraction, operator\n * collapsing, and library-formula marking.\n *\n * @param {string} text - Formula text (leading `=` is optional).\n * @param {string} fkey - Optional formula cell key for named-range / failure context.\n * @returns {string} - Parsed token string, or an error token when parsing fails.\n */\n Parser.prototype.parse = function (text, fkey) {\n var _this = this;\n if (this.parent.isTextEmpty(text)) {\n return text;\n }\n if (isExternalFileLink(text)) {\n return this.parent.getErrorStrings()[CommonErrors.Ref];\n }\n if (this.parent.getFormulaCharacter() !== String.fromCharCode(0) && this.parent.getFormulaCharacter() === text[0]) {\n text = text.substring(1);\n }\n if (this.parent.namedRanges.size > 0 || this.parent.storedData.size > 0) {\n text = this.checkForNamedRangeAndKeyValue(text);\n this.findNamedRange = false;\n }\n // Extract string literals first so sequences like \"//\" in URLs are not treated as operators.\n var formulaString = this.storeStrings(text);\n text = this.storedStringText;\n text = text.replace(/[-+*/&^]+/g, function (operators) {\n var firstOp = '';\n while (1 < operators.length) {\n switch (operators.substring(0, 2)) {\n case '++':\n operators = '+' + operators.substring(2);\n break;\n case '--':\n operators = '+' + operators.substring(2);\n break;\n case '+-':\n operators = '-' + operators.substring(2);\n break;\n case '-+':\n operators = '-' + operators.substring(2);\n break;\n case '*+':\n operators = '*' + operators.substring(2);\n break;\n case '/+':\n operators = '/' + operators.substring(2);\n break;\n case '^+':\n operators = '^' + operators.substring(2);\n break;\n case '&+':\n operators = '&' + operators.substring(2);\n break;\n case '*-':\n case '/-':\n case '^-':\n case '&-':\n firstOp = operators.substring(0, 1);\n operators = operators.substring(1);\n break;\n default:\n throw new FormulaError(_this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidExpression], true);\n }\n }\n return firstOp + operators;\n });\n text = text.split('-' + '(' + '-').join('(');\n var i = 0;\n if (isNullOrUndefined(formulaString)) {\n text = text.split(' ').join('');\n }\n text = text.split('=>').join('>=');\n text = text.split('=<').join('<=');\n if (text[text.length - 1] !== this.parent.arithMarker || this.indexOfAny(text, this.tokens) !== (text.length - 2)) {\n text = text.toUpperCase();\n }\n if (text.indexOf(this.sheetToken) > -1) {\n var family = this.parent.getSheetFamilyItem(this.parent.grid);\n if (family.sheetNameToParentObject != null && family.sheetNameToParentObject.size > 0) {\n if (text[0] !== this.sheetToken.toString()) {\n text = this.parent.setTokensForSheets(text);\n }\n var sheetToken = this.parent.getSheetToken(text.split(this.parent.tic).join(this.emptyStr));\n var scopedRange = this.checkScopedRange(text.split('\"').join(this.emptyStr).split(this.sheetToken).join(''));\n if (isNullOrUndefined(sheetToken) && sheetToken !== '' && this.parent.namedRanges.size > 0 && scopedRange !== '') {\n text = scopedRange;\n }\n }\n }\n text = this.processIndexArg(text);\n text = this.markLibraryFormulas(text);\n try {\n text = this.formulaAutoCorrection(text);\n }\n catch (ex) {\n var args = {\n message: ex.message, exception: ex, isForceCalculable: ex.formulaCorrection,\n computeForceCalculate: false\n };\n if (!args.isForceCalculable) {\n throw this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidExpression];\n }\n if (!this.isFailureTriggered) {\n this.parent.trigger('onFailure', args);\n this.isFailureTriggered = true;\n }\n if (args.isForceCalculable && args.computeForceCalculate) {\n text = this.formulaAutoCorrection(text, args);\n this.parent.storedData.get(fkey).formulaText = '=' + text;\n }\n else {\n throw this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidExpression];\n }\n }\n if (!this.ignoreBracet) {\n i = text.indexOf(')');\n while (i > -1) {\n var k = text.substring(0, i).lastIndexOf('(');\n if (k === -1) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.MismatchedParentheses]);\n }\n if (k === i - 1) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.EmptyExpression]);\n }\n var s = this.emptyStr;\n if (this.ignoreBracet) {\n s = this.parent.substring(text, k, i - k + 1);\n }\n else {\n s = this.parent.substring(text, k + 1, i - k - 1);\n }\n try {\n text = text.substring(0, k) + this.parseSimple(s) + text.substring(i + 1);\n }\n catch (ex) {\n if (ex === this.parent.formulaErrorStrings[FormulasErrorsStrings.CircularReference]) {\n throw ex;\n }\n var args = this.exceptionArgs(ex);\n if (!this.isFailureTriggered) {\n this.parent.trigger('onFailure', args);\n this.isFailureTriggered = true;\n }\n var errorMessage = (typeof args.exception === 'string') ? args.exception : args.message;\n return (this.parent.getErrorLine(ex) ? '' : '#' + this.parent.getErrorLine(ex) + ': ') + errorMessage;\n }\n i = text.indexOf(')');\n }\n }\n if (!this.ignoreBracet && text.indexOf('(') > -1) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.MismatchedParentheses]);\n }\n text = this.parseSimple(text);\n if (formulaString !== null && formulaString.size > 0) {\n text = this.setStrings(text, formulaString);\n }\n return text;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n Parser.prototype.exceptionArgs = function (ex) {\n return {\n message: ex.message, exception: ex, isForceCalculable: ex.formulaCorrection,\n computeForceCalculate: false\n };\n };\n Parser.prototype.formulaAutoCorrection = function (formula, args, isSubString) {\n var arithemeticArr = ['*', '+', '-', '/', '^', '&'];\n var logicalSym = ['>', '=', '<'];\n var i = 0;\n var form = '';\n var op = '';\n var firstOp = '';\n var secondprevOp = '';\n var secondnextOp = '';\n var firstDigit = '';\n var secondDigit = '';\n var countDigit = 0;\n if (this.parent.formulaErrorStrings.indexOf(formula) > -1) {\n return formula;\n }\n else {\n if (this.indexOfAny(formula, this.specialSym) > -1) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidExpression], false);\n }\n // Normalize invalid operator pairs once before the character walk (avoids O(n²) split/join).\n formula = formula.split('-*').join('-').split('/*').join('/').split('*/').join('*').split('-/').join('-').\n split('*+').join('*').split('+*').join('+');\n while (i < formula.length) {\n if ((this.parent.isDigit(formula[i]) && ((formula.length > i + 1)\n && (this.indexOfAny(formula[i + 1], arithemeticArr) > -1)) && ((formula.length > i + 2)\n && (!isNullOrUndefined(formula[i + 2]) && this.indexOfAny(formula[i + 2], arithemeticArr) > -1))) &&\n (formula[i + 2] !== '-' || (formula[i + 1] !== '*' && formula[i + 1] !== '/' && formula[i + 1] !== '^' && formula[i + 1] !== '&'))) {\n if (args && args.computeForceCalculate) {\n if (this.parent.isDigit(formula[i])) {\n if (countDigit < 1) {\n firstDigit = formula[i];\n firstOp = formula[i + 1];\n if (isNullOrUndefined(firstOp)) {\n firstOp = this.emptyStr;\n }\n firstOp = firstOp === '&' ? '' : firstOp;\n countDigit = countDigit + 1;\n form = form + firstDigit + firstOp;\n }\n else if (countDigit < 2) {\n secondDigit = formula[i];\n secondprevOp = formula[i - 1];\n secondnextOp = formula[i + 1];\n countDigit = 0;\n if (secondprevOp === '-') {\n secondnextOp = isNullOrUndefined(secondnextOp) ? this.emptyStr : secondnextOp;\n secondnextOp = secondnextOp === '&' ? '' : secondnextOp;\n form = form + secondprevOp + secondDigit + secondnextOp;\n }\n else {\n secondnextOp = isNullOrUndefined(secondnextOp) ? this.emptyStr : secondnextOp;\n form = form + secondDigit + secondnextOp;\n }\n }\n i = i + 2;\n }\n else {\n form = (formula[i] === '-') ? form + formula[i] : form;\n i = i + 1;\n }\n }\n else {\n throw this.parent.formulaErrorStrings[FormulasErrorsStrings.ImproperFormula];\n }\n }\n else if ((this.parent.isDigit(formula[i]) || formula[i] === this.parent.rightBracket ||\n this.parent.storedData.has(formula[i].toUpperCase())) && (isNullOrUndefined(formula[i + 1]) ||\n (this.indexOfAny(formula[i + 1], arithemeticArr) > -1 && formula[i + 1] !== '&'))) {\n op = isNullOrUndefined(formula[i + 1]) ? this.emptyStr : formula[i + 1];\n op = op === '&' && formula[i + 2] !== '-' ? '' : op; // for the cases 5&3=>53 and 5&-3=>5-3.\n form = formula[i - 1] === '-' ? form + formula[i - 1] + formula[i] + op : form + formula[i] + op;\n i = i + 2;\n }\n else if (this.indexOfAny(formula[i], logicalSym) > -1 && !isNullOrUndefined(formula[i - 1]) &&\n !isNullOrUndefined(formula[i + 1])) {\n form = form + formula[i];\n i = i + 1;\n }\n else if (formula[i] === 'q') {\n while (formula[i] !== this.parent.leftBracket) {\n form = form + formula[i];\n i = i + 1;\n }\n }\n else if (formula[i] === this.parent.leftBracket || formula[i] === this.parent.rightBracket ||\n formula[i] === '{' || formula[i] === '}' || formula[i] === '(' ||\n formula[i] === ')') {\n form = form + formula[i];\n i = i + 1;\n }\n else if (this.parent.isUpperChar(formula[i]) || formula[i].indexOf(':') > -1 ||\n formula[i] === this.parent.getParseArgumentSeparator() || (formula[i] === '%' &&\n this.parent.isDigit(formula[i - 1])) || this.isOtherLangChar(formula[i])) {\n form = form + formula[i];\n i = i + 1;\n }\n else if (formula[i] === this.parent.tic || formula[i] === ' ' || formula[i] ===\n this.parent.getParseDecimalSeparator() || formula[i] === this.sheetToken || formula[i] === '$' ||\n formula[i] === '_') {\n form = form + formula[i];\n i = i + 1;\n }\n else {\n if (this.parent.isDigit(formula[i])) {\n form = formula[i - 1] === '-' ? form + formula[i - 1] + formula[i] : form + formula[i];\n }\n if (formula[i] === '-' || formula[i] === '+') {\n form = form + formula[i];\n form = form.split('++').join('+').split('+-').join('-').split('-+').join('-');\n }\n if (formula[i] === '/' || formula[i] === '*' || formula[i] === '^') {\n form = form + formula[i];\n }\n if (formula[i] === '&' && (isSubString || formula.substring(i + 1).trim()[0] !== 'q')) {\n form = form + formula[i];\n }\n i = i + 1;\n }\n }\n }\n form = form === this.emptyStr ? formula : form;\n if (this.indexOfAny(form[form.length - 1], arithemeticArr) > -1) {\n form = form.substring(0, form.length - 1);\n }\n form = form.split('--').join('-').split('-+').join('-').split('+-').join('-');\n return form;\n };\n Parser.prototype.checkScopedRange = function (text) {\n var _this = this;\n var scopedRange = this.emptyStr;\n var b = 'NaN';\n var id = this.parent.getSheetID(this.parent.grid);\n var sheet = this.parent.getSheetFamilyItem(this.parent.grid);\n if (text[0] === this.sheetToken.toString()) {\n var i = text.indexOf(this.sheetToken, 1);\n var v = parseInt(text.substr(1, i - 1), 10);\n if (i > 1 && !this.parent.isNaN(v)) {\n text = text.substring(i + 1);\n id = v;\n }\n }\n var token = '!' + id.toString();\n if (sheet === null || sheet.sheetNameToToken == null) {\n return b;\n }\n sheet.sheetNameToToken.forEach(function (value, key) {\n if (sheet.sheetNameToToken.get(key).toString() === token + '!') {\n var s_1 = _this.emptyStr;\n _this.parent.namedRanges.forEach(function (value, key) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n if (!isNullOrUndefined(_this.parent.parentObject)) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n s_1 = _this.parent.parentObject.getActiveSheet().name + _this.sheetToken + text.toUpperCase();\n }\n else {\n s_1 = sheet.sheetNameToToken.get(key).toUpperCase();\n }\n if (_this.parent.getNamedRanges().has(s_1)) {\n scopedRange = (_this.parent.getNamedRanges().get(s_1)).toUpperCase();\n b = scopedRange;\n }\n });\n }\n });\n return b;\n };\n Parser.prototype.storeStrings = function (tempString) {\n var i = 0;\n var j = 0;\n var id = 0;\n var key = '';\n var storedString = null;\n var condition;\n var ticLoc = tempString.indexOf(this.parent.tic);\n if (ticLoc > -1) {\n i = tempString.indexOf(this.parent.tic);\n while (i > -1 && tempString.length > 0) {\n if (storedString === null) {\n storedString = this.stringsColl;\n }\n j = i + 1 < tempString.length ? tempString.indexOf(this.parent.tic, i + 1) : -1;\n if (j === -1) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.MismatchedTics]);\n }\n condition = this.parent.substring(tempString, i, j - i + 1);\n key = this.parent.tic + this.spaceString + id.toString() + this.parent.tic;\n storedString = storedString.set(key, condition);\n tempString = tempString.substring(0, i) + key + tempString.substring(j + 1);\n i = i + key.length;\n if (i <= tempString.length) {\n i = tempString.indexOf(this.parent.tic, i);\n }\n id++;\n }\n }\n this.storedStringText = tempString;\n return storedString;\n };\n Parser.prototype.setStrings = function (text, formulaString) {\n formulaString.forEach(function (value, key) {\n text = text.split(key).join(value);\n });\n return text;\n };\n /**\n * Parses a simple (non-library) expression after library formulas are marked.\n *\n * @param {string} formulaText - Partially processed formula text.\n * @returns {string} - Token string with arithmetic markers applied.\n */\n Parser.prototype.parseSimple = function (formulaText) {\n var needToContinue = true;\n var text = formulaText;\n if (text.length > 0 && text[0] === '+') {\n text = text.substring(1);\n }\n if (text === '#DIV/0!') {\n return '#DIV/0!';\n }\n if (text === '#NAME?') {\n return '#NAME?';\n }\n if (text === '') {\n return text;\n }\n if (this.parent.formulaErrorStrings.indexOf(text) > -1) {\n return text;\n }\n text = text.split(this.stringLessEq).join(this.charLessEq);\n text = text.split(this.stringGreaterEq).join(this.charGreaterEq);\n text = text.split(this.stringNoEqual).join(this.charNoEqual);\n text = text.split(this.stringAnd).join(this.charAnd);\n text = text.split(this.stringOr).join(this.charOr);\n text = text.split(this.fixedReference).join(this.emptyStr);\n needToContinue = true;\n var expTokenArray = [this.tokenEp, this.tokenEm];\n var mulTokenArray = [this.tokenMultiply, this.tokenDivide];\n var addTokenArray = [this.tokenAdd, this.tokenSubtract];\n var mulCharArray = [this.charMultiply, this.charDivide];\n var addCharArray = [this.charAdd, this.charSubtract];\n var compareTokenArray = [this.tokenLess, this.tokenGreater, this.tokenEqual, this.tokenLessEq,\n this.tokenGreaterEq, this.tokenNotEqual];\n var compareCharArray = [this.charLess, this.charGreater, this.charEqual, this.charLessEq,\n this.charGreaterEq, this.charNoEqual];\n var expCharArray = [this.charEp, this.charEm];\n var andTokenArray = [this.tokenAnd];\n var andCharArray = [this.charAnd];\n var orCharArray = [this.charOr];\n var orTokenArray = [this.tokenOr];\n text = this.parseSimpleOperators(text, expTokenArray, expCharArray);\n text = this.parseSimpleOperators(text, orTokenArray, orCharArray);\n if (needToContinue) {\n text = this.parseSimpleOperators(text, mulTokenArray, mulCharArray);\n }\n if (needToContinue) {\n text = this.parseSimpleOperators(text, addTokenArray, addCharArray);\n }\n if (needToContinue) {\n text = this.parseSimpleOperators(text, compareTokenArray, compareCharArray);\n }\n if (needToContinue) {\n text = this.parseSimpleOperators(text, andTokenArray, andCharArray);\n }\n return text;\n };\n /**\n * Replaces operator characters with single-character tokens for evaluation.\n *\n * @param {string} formulaText - Formula text containing operator markers.\n * @param {string | number | Object} markers - Replacement token characters.\n * @param {string} operators - Operator strings to replace.\n * @returns {string} - Formula text with operators tokenized.\n */\n Parser.prototype.parseSimpleOperators = function (formulaText, markers, operators) {\n if (this.parent.getErrorStrings().indexOf(formulaText) > -1) {\n return formulaText;\n }\n var text = formulaText;\n var i = 0;\n var op = '';\n for (var c = 0; c < operators.length; c++) {\n op = op + operators[c];\n }\n text = text.split('---').join('-').split('--').join('+').split(this.parent.getParseArgumentSeparator() + '-').join(this.parent.getParseArgumentSeparator() + 'u').split(this.parent.leftBracket + '-').join(this.parent.leftBracket + 'u').split('=-').join('=u');\n text = text.split(',+').join(',').split(this.parent.leftBracket + '+').join(this.parent.leftBracket).split('=+').join('=').split('>+').join('>').split('<+').join('<').split('/+').join('/').split('*+').join('*').split('++').join('+').split('*-').join('*u').split('/-').join('/u').split('w-').join('wu').split('i-').join('iu').toString();\n text = text.split('>-').join('>u').split('<-').join('<u').split('h-').join('hu').split('f-').join('fu').split('z-').join('zu');\n if (text.length > 0 && text[0] === '-') {\n var tokenOrOp = String.fromCharCode(132);\n text = text.substring(1).split('-').join(tokenOrOp);\n text = '0-' + text;\n text = this.parseSimpleOperators(text, [this.tokenSubtract], [this.charSubtract]);\n text = text.split(tokenOrOp).join('-');\n }\n else if (text.length > 0 && text[0] === '+') {\n text = text.substring(1);\n }\n else if (text.length > 0 && text[text.length - 1] === '+') {\n text = text.substring(0, text.length - 1);\n }\n try {\n if (this.indexOfAny(text, operators) > -1) {\n if (text.includes(' ')) {\n var newText = '';\n for (var index = 0; index < text.length; index++) {\n var currChar = text[index];\n if (operators.indexOf(currChar) >= 0) {\n newText = newText.trim() + currChar;\n }\n else if (currChar === ' ' && operators.indexOf(newText[newText.length - 1]) >= 0) {\n continue;\n }\n else {\n newText += currChar;\n }\n }\n text = newText;\n }\n i = this.indexOfAny(text, operators);\n var decimalSep = this.parent.getParseDecimalSeparator();\n while (i > -1) {\n var left = '';\n var right = '';\n var leftIndex = 0;\n var rightIndex = 0;\n var isLeftBool = false;\n var arithOp = ['*', '+', '-', '/', 'w', '=', '<', '>'];\n var isNotOperator = text[i] === this.charNOTop;\n var j = 0;\n if (!isNotOperator) {\n j = i - 1;\n if (text[j] === this.parent.arithMarker) {\n var k = this.findLeftMarker(text.substring(0, j - 1));\n if (k < 0) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.CannotParse]);\n }\n left = this.parent.substring(text, k + 1, j - k - 1);\n leftIndex = k + 1;\n }\n else if (text[j] === this.parent.rightBracket) {\n var bracketCount = 0;\n var k = j - 1;\n while (k > 0 && (text[k] !== 'q' || bracketCount !== 0)) {\n if (text[k] === 'q') {\n bracketCount--;\n }\n else if (text[k] === this.parent.rightBracket) {\n bracketCount++;\n }\n k--;\n }\n if (k < 0) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.CannotParse]);\n }\n left = this.parent.substring(text, k, j - k + 1);\n leftIndex = k;\n }\n else if (text[j] === this.parent.tic[0]) {\n var l = text.substring(0, j - 1).lastIndexOf(this.parent.tic);\n if (l < 0) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.CannotParse]);\n }\n left = this.parent.substring(text, l, j - l + 1);\n leftIndex = l;\n }\n else {\n var period = false;\n while (j > -1 && (this.parent.isDigit(text[j]) ||\n (!period && (text[j] === decimalSep || text[j] === '%')))) {\n if (!this.parent.isDigit(text[j]) && text[j] !== '%') {\n period = true;\n }\n j = j - 1;\n }\n if (j > -1 && period && text[j] === decimalSep) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.NumberContains2DecimalPoints]);\n }\n j = j + 1;\n if (j === 0 || (j > 0 && !this.parent.isUpperChar(text[j - 1]))) {\n left = 'n' + this.parent.substring(text, j, i - j);\n leftIndex = j;\n }\n else if (j > 0 && text[j - 1] === 'E' && ((text.substring(j - 4, j) === 'TRUE' && (!isNullOrUndefined(text[j - 5]) ? arithOp.indexOf(text[j - 5]) > -1 : true)) ||\n (text.substring(j - 5, j) === 'FALSE' && (!isNullOrUndefined(text[j - 6]) ? arithOp.indexOf(text[j - 6]) > -1 : true))) && (text.substring(j + 1, j + 5) === 'TRUE' || text.substring(j + 1, j + 6) === 'FALSE')) {\n j = text.substring(j - 4, j) === 'TRUE' ? j - 4 : j - 5;\n left = text.substring(j, i) === 'TRUE' ? 'n1' : (text.substring(j, i) === 'FALSE' ? 'n0' : left);\n leftIndex = j;\n isLeftBool = true;\n }\n else {\n j = j - 1;\n while (j > -1 && (this.parent.isUpperChar(text[j]) || // Check if character is uppercase alphabets.\n this.parent.isDigit(text[j]) || // Check if character is a digit.\n text[j] === '_')) { // Check if character is an underscore ('_'), for defined names cases.\n j = j - 1;\n }\n if (j > -1 && text[j] === this.sheetToken) {\n j = j - 1;\n while (j > -1 && text[j] !== this.sheetToken) {\n j = j - 1;\n }\n if (j > -1 && text[j] === this.sheetToken) {\n j = j - 1;\n }\n }\n if (j > -1 && text[j] === ':') {\n //// handle range operands\n j = j - 1;\n while (j > -1 && this.parent.isDigit(text[j])) {\n j = j - 1;\n }\n while (j > -1 && this.parent.isUpperChar(text[j])) {\n j = j - 1;\n }\n if (j > -1 && text[j] === this.sheetToken) {\n j--;\n while (j > -1 && text[j] !== this.sheetToken) {\n j--;\n }\n if (j > -1 && text[j] === this.sheetToken) {\n j--;\n }\n }\n j = j + 1;\n left = this.parent.substring(text, j, i - j);\n left = this.parent.getCellFrom(left);\n }\n else {\n var uFound = false;\n if (j > 0 && !this.parent.isUpperChar(text[j])) {\n uFound = text[j] === 'u' && text[j - 1] === this.parent.getParseArgumentSeparator();\n }\n if (!uFound) {\n j = j + 1;\n }\n left = this.parent.substring(text, j, i - j);\n }\n this.parent.updateDependentCell(left);\n leftIndex = j;\n }\n if ((this.parent.namedRanges.size > 0 && this.parent.namedRanges.has(left.toUpperCase())) ||\n (this.parent.storedData.has(left.toUpperCase()))) {\n left = 'n' + this.checkForNamedRangeAndKeyValue(left);\n }\n }\n }\n else {\n leftIndex = i;\n }\n if (i === text.length - 1) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.ExpressionCannotEndWithAnOperator]);\n }\n else {\n j = i + 1;\n var uFound = text[j] === 'u'; // for 3*-2\n if (uFound) {\n j = j + 1;\n }\n if (text[j] === this.parent.tic[0]) {\n var k = text.substring(j + 1).indexOf(this.parent.tic);\n if (k < 0) {\n throw this.parent.formulaErrorStrings[FormulasErrorsStrings.CannotParse];\n }\n right = this.parent.substring(text, j, k + 2);\n rightIndex = k + j + 2;\n }\n else if (text[j] === this.parent.arithMarker) {\n var k = this.findRightMarker(text.substring(j + 1));\n if (k < 0) {\n throw new FormulaError(this.parent.formulaErrorStrings[FormulasErrorsStrings.CannotParse]);\n }\n right = this.parent.substring(text, j + 1, k);\n rightIndex = k + j + 2;\n }\n else if (text[j] === 'q') {\n var bracketCount = 0;\n var k = j + 1;\n while (k < text.length && (text[k] !== this.parent.rightBracket || bracketCount !== 0)) {\n if (text[k] === this.parent.rightBracket) {\n bracketCount++;\n }\n else if (text[k] === 'q') {\n bracketCount--;\n }\n k++;\n }\n if (k === text.length) {\n throw this.parent.formulaErrorStrings[FormulasErrorsStrings.CannotParse];\n }\n right = this.parent.substring(text, j, k - j + 1);\n if (uFound) {\n right = 'u' + right;\n }\n rightIndex = k + 1;\n }\n else if (this.parent.isDigit(text[j]) || text[j] === decimalSep) {\n var period = (text[j] === decimalSep);\n j = j + 1;\n while (j < text.length && (this.parent.isDigit(text[j]) ||\n (!period && text[j] === decimalSep))) {\n if (text[j] === decimalSep) {\n period = true;\n }\n j = j + 1;\n }\n if (j < text.length && text[j] === '%') {\n j += 1;\n }\n if (period && j < text.length && text[j] === decimalSep) {\n throw this.parent.formulaErrorStrings[FormulasErrorsStrings.NumberContains2DecimalPoints];\n }\n right = 'n' + this.parent.substring(text, i + 1, j - i - 1);\n rightIndex = j;\n }\n else if (this.parent.isUpperChar(text[j]) || text[j] === this.sheetToken ||\n text[j] === 'u') {\n if (text[j] === this.sheetToken) {\n j = j + 1;\n while (j < text.length && text[j] !== this.sheetToken) {\n j = j + 1;\n }\n }\n j = j + 1;\n var jTemp = 0;\n var inbracket = false;\n while (j < text.length && (this.parent.isUpperChar(text[j]) || text[j] === '_'\n || text[j] === decimalSep || text[j] === '[' || text[j] === ']' ||\n text[j] === '#' || text[j] === ' ' || text[j] === '%' || text[j] ===\n decimalSep && inbracket)) {\n if (j !== text.length - 1 && text[j] === '[' && text[j + 1] === '[') {\n inbracket = true;\n }\n if (j !== text.length - 1 && text[j] === ']' && text[j + 1] === ']') {\n inbracket = false;\n }\n j++;\n jTemp++;\n }\n var noCellReference = (j === text.length) || !this.parent.isDigit(text[j]);\n if (jTemp > 1) {\n while (j < text.length && (this.parent.isUpperChar(text[j]) ||\n this.parent.isDigit(text[j]) || text[j] === ' ' || text[j] === '_')) {\n j++;\n }\n noCellReference = true;\n }\n while (j < text.length && this.parent.isDigit(text[j])) {\n j = j + 1;\n }\n if (j < text.length && text[j] === ':') {\n j = j + 1;\n if (j < text.length && text[j] === this.sheetToken) {\n j++;\n while (j < text.length && text[j] !== this.sheetToken) {\n j = j + 1;\n }\n if (j < text.length && text[j] === this.sheetToken) {\n j++;\n }\n }\n while (j < text.length && this.parent.isUpperChar(text[j])) {\n j = j + 1;\n }\n while (j < text.length && this.parent.isDigit(text[j])) {\n j = j + 1;\n }\n j = j - 1;\n right = this.parent.substring(text, i + 1, j - i);\n right = this.parent.getCellFrom(right);\n }\n else {\n j = j - 1;\n right = this.parent.substring(text, i + 1, j - i);\n uFound = text[j] === 'u';\n if (uFound) {\n right = 'u' + right;\n }\n }\n if (noCellReference && right.startsWith(this.sheetToken)) {\n noCellReference = !this.parent.isCellReference(right);\n }\n if (!noCellReference) {\n this.parent.updateDependentCell(right);\n }\n if ((this.parent.namedRanges.size > 0 && this.parent.namedRanges.has(right.toUpperCase()))\n || (this.parent.storedData.has(right.toUpperCase()))) {\n right = 'n' + this.checkForNamedRangeAndKeyValue(right);\n }\n var isPrevArithOp = ['*', '+', '-', '/', 'w'].indexOf(text[j - right.length]) > -1;\n right = right === 'TRUE' && (isLeftBool || isPrevArithOp) ? 'n1' : (right === 'FALSE' && (isLeftBool || isPrevArithOp) ? 'n0' : right);\n rightIndex = j + 1;\n }\n }\n var p = op.indexOf(text[i]);\n var s = this.parent.arithMarker + left + right + markers[p] + this.parent.arithMarker;\n if (leftIndex > 0) {\n s = text.substring(0, leftIndex) + s;\n }\n if (rightIndex < text.length) {\n s = s + text.substring(rightIndex);\n }\n s = s.split(this.parent.arithMarker2).join(this.parent.arithMarker.toString());\n text = s;\n i = this.indexOfAny(text, operators);\n }\n }\n else {\n if (text.length > 0 && (this.parent.isUpperChar(text[0]) || text[0] === this.sheetToken)) {\n var isCharacter = true;\n var checkLetter = true;\n var oneTokenFound = false;\n var textLen = text.length;\n for (var k = 0; k < textLen; ++k) {\n if (text[k] === this.sheetToken) {\n if (k > 0 && !oneTokenFound) {\n throw this.parent.getErrorStrings()[CommonErrors.Ref];\n }\n oneTokenFound = true;\n k++;\n while (k < textLen && this.parent.isDigit(text[k])) {\n k++;\n }\n if (k === textLen || text[k] !== this.sheetToken) {\n isCharacter = false;\n break;\n }\n }\n else {\n if (!checkLetter && this.parent.isChar(text[k])) {\n isCharacter = false;\n break;\n }\n if (this.parent.isChar(text[k]) || this.parent.isDigit(text[k]) || text[k] ===\n this.sheetToken) {\n checkLetter = this.parent.isUpperChar(text[k]);\n }\n else {\n isCharacter = false;\n break;\n }\n }\n }\n if (isCharacter) {\n this.parent.updateDependentCell(text);\n }\n }\n }\n return text;\n }\n catch (ex) {\n if (ex === this.parent.formulaErrorStrings[FormulasErrorsStrings.CircularReference]) {\n throw ex;\n }\n throw ex;\n }\n };\n /**\n * Returns the index of the first character in `text` that appears in `operators`.\n *\n * @param {string} text - Text to search.\n * @param {string | number | Object} operators - Characters to find.\n * @returns {string | number} - Index of the first match, or `-1`.\n */\n Parser.prototype.indexOfAny = function (text, operators) {\n for (var i = 0; i < text.length; i++) {\n if (operators.indexOf(text[i]) > -1) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Finds the matching left arithmetic marker for a right-marker position.\n *\n * @param {string} text - Tokenized formula text.\n * @returns {string | number} - Index of the left marker.\n */\n Parser.prototype.findLeftMarker = function (text) {\n var ret = -1;\n if (text.indexOf(this.parent.arithMarker) > -1) {\n var bracketLevel = 0;\n for (var i = text.length - 1; i >= 0; --i) {\n if (text[i] === this.parent.rightBracket) {\n bracketLevel--;\n }\n else if (text[i] === this.parent.leftBracket) {\n bracketLevel++;\n }\n else if (text[i] === this.parent.arithMarker && bracketLevel === 0) {\n ret = i;\n break;\n }\n }\n }\n return ret;\n };\n /**\n * Finds the matching right arithmetic marker for a left-marker position.\n *\n * @param {string} text - Tokenized formula text.\n * @returns {string | number} - Index of the right marker.\n */\n Parser.prototype.findRightMarker = function (text) {\n var ret = -1;\n if (text.indexOf(this.parent.arithMarker) > -1) {\n var bracketLevel = 0;\n for (var j = 0; j < text.length; ++j) {\n if (text[j] === this.parent.rightBracket) {\n bracketLevel--;\n }\n else if (text[j] === this.parent.leftBracket) {\n bracketLevel++;\n }\n else if (text[j] === this.parent.arithMarker && bracketLevel === 0) {\n ret = j;\n break;\n }\n }\n }\n return ret;\n };\n /**\n * Entry point that resets parser state and returns {@link parse} output.\n *\n * @param {string} formula - Formula text to parse.\n * @param {string} fKey - Optional formula cell key.\n * @returns {string} - Parsed token string.\n */\n Parser.prototype.parseFormula = function (formula, fKey) {\n if (formula.length > 0 && formula[0] === this.parent.getFormulaCharacter()) {\n formula = formula.substring(1);\n }\n if (formula.indexOf('#REF!') > -1) {\n return this.parent.getErrorStrings()[CommonErrors.Ref];\n }\n if (formula.length > 0 && formula[0] === '+') {\n formula = formula.substring(1);\n }\n try {\n this.isFailureTriggered = false;\n this.isError = false;\n formula = this.parse(formula.trim(), fKey);\n this.isFormulaParsed = true;\n }\n catch (ex) {\n var args = this.exceptionArgs(ex);\n if (!this.isFailureTriggered) {\n this.parent.trigger('onFailure', args);\n this.isFailureTriggered = true;\n }\n var errorMessage = (typeof args.exception === 'string') ? args.exception : args.message;\n formula = (isNullOrUndefined(this.parent.getErrorLine(ex)) ? '' : '#' + this.parent.getErrorLine(ex) + ': ') + errorMessage;\n this.isError = true;\n }\n return formula;\n };\n /**\n * Wraps recognized library function calls with `q` markers and bracket tokens.\n *\n * @param {string} formula - Formula text.\n * @returns {string} - Formula text with library calls marked for evaluation.\n */\n Parser.prototype.markLibraryFormulas = function (formula) {\n var bracCount = 0;\n var rightParens = formula.indexOf(')');\n if (rightParens === -1) {\n formula = this.markNamedRanges(formula);\n }\n else {\n var _loop_1 = function () {\n var parenCount = 0;\n var leftParens = rightParens - 1;\n while (leftParens > -1 && (formula[leftParens] !== '(' || parenCount !== 0)) {\n if (formula[leftParens] === ')') {\n parenCount++;\n }\n // else if (formula[leftParens] === ')') {\n // parenCount--;\n // }\n leftParens--;\n }\n if (leftParens === -1) {\n throw new FormulaError(this_1.parent.formulaErrorStrings[FormulasErrorsStrings.MismatchedParentheses]);\n }\n var i = leftParens - 1;\n // Include digits so names like LOG10, BIN2DEC, and HEX2OCT are recognized.\n while (i > -1 && (this_1.parent.isChar(formula[i]) || this_1.parent.isDigit(formula[i]) ||\n formula[i] === '.')) {\n i--;\n }\n var len = leftParens - i - 1;\n var libFormula = this_1.parent.substring(formula, i + 1, len);\n if (len > 0 && !isNullOrUndefined(this_1.parent.getFunction(libFormula)) && (!libFormula.includes('.') ||\n this_1.isValidDotFormulaName(libFormula))) {\n var substr = this_1.parent.substring(formula, leftParens, rightParens - leftParens + 1);\n var argsSep = this_1.parent.getParseArgumentSeparator();\n if (libFormula === 'AREAS') {\n this_1.ignoreBracet = true;\n }\n else {\n this_1.ignoreBracet = false;\n if (((libFormula.includes('IFS') && libFormula !== 'COUNTIFS') || libFormula === 'MATCH') && substr.includes('{')) {\n var leftBraceIdx = substr.indexOf('{');\n var criteriaStr = this_1.parent.substring(substr, leftBraceIdx, substr.indexOf('}') - leftBraceIdx + 1);\n substr = substr.split(criteriaStr).join(criteriaStr.split(argsSep).join(this_1.parent.tic + this_1.parent.tic));\n }\n }\n try {\n var args = void 0;\n substr = substr.split('(').join('').split(')').join('');\n substr = '(' + this_1.formulaAutoCorrection(substr, args, true) + ')';\n }\n catch (ex) {\n var args = {\n message: ex.message, exception: ex,\n isForceCalculable: ex.formulaCorrection, computeForceCalculate: false\n };\n if (!args.isForceCalculable) {\n throw this_1.parent.formulaErrorStrings[FormulasErrorsStrings.ImproperFormula];\n }\n if (!this_1.isFailureTriggered) {\n this_1.parent.trigger('onFailure', args);\n this_1.isFailureTriggered = true;\n bracCount = bracCount + 1;\n }\n args.computeForceCalculate = bracCount > 0 ? true : args.computeForceCalculate;\n if (args.isForceCalculable) {\n if (args.computeForceCalculate) {\n substr = substr.split('(').join('').split(')').join('');\n substr = '(' + this_1.formulaAutoCorrection(substr, args) + ')';\n }\n else {\n throw this_1.parent.formulaErrorStrings[FormulasErrorsStrings.ImproperFormula];\n }\n }\n else {\n throw this_1.parent.formulaErrorStrings[FormulasErrorsStrings.ImproperFormula];\n }\n }\n substr = this_1.markNamedRanges(substr);\n substr = this_1.swapInnerParens(substr);\n substr = this_1.addParensToArgs(substr);\n var id = substr.lastIndexOf(argsSep);\n if (id === -1) {\n if (substr.length > 2 && substr[0] === '(' && substr[substr.length - 1] === ')') {\n if (substr[1] !== '{' && substr[1] !== '(') {\n substr = substr.substring(0, substr.length - 1) + '}' + substr.substring(substr.length - 1);\n substr = substr[0] + '{' + substr.substring(1);\n }\n }\n }\n formula = formula.substring(0, i + 1) + 'q' + this_1.parent.substring(formula, i + 1, len) +\n (substr.split('(').join(this_1.parent.leftBracket))\n .split(')').join(this_1.parent.rightBracket) + formula.substring(rightParens + 1);\n }\n else {\n var isIfErrorArg_1 = function (beforeFormula) {\n if (beforeFormula.includes('IFERROR(')) {\n var idx = beforeFormula.lastIndexOf('(');\n return beforeFormula.substring(idx - 7, idx) === 'IFERROR' || isIfErrorArg_1(beforeFormula.substring(0, idx));\n }\n return false;\n };\n if (len > 0 && !isIfErrorArg_1(formula.substring(0, i + 1))) {\n return { value: this_1.parent.getErrorStrings()[CommonErrors.Name] };\n }\n else {\n var s = this_1.emptyStr;\n if (leftParens > 0) {\n s = formula.substring(0, leftParens);\n }\n s = s + '{' + this_1.parent.substring(formula, leftParens + 1, rightParens - leftParens - 1) + '}';\n if (rightParens < formula.length) {\n s = s + formula.substring(rightParens + 1);\n }\n s = this_1.markNamedRanges(s);\n formula = s;\n }\n }\n rightParens = formula.indexOf(')');\n };\n var this_1 = this;\n while (rightParens > -1) {\n var state_1 = _loop_1();\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n }\n formula = (formula.split('{').join('(')).split('}').join(')');\n return formula;\n };\n /**\n * Swaps nested parentheses inside a library-formula substring for token safety.\n *\n * @hidden\n * @param {string} fSubstr - Library formula substring.\n * @returns {string} - Substring with inner parentheses rewritten.\n */\n Parser.prototype.swapInnerParens = function (fSubstr) {\n if (fSubstr.length > 2) {\n fSubstr = fSubstr[0] + fSubstr.substr(1, fSubstr.length - 2).split('(').join('{').split(')').join('}') + fSubstr[fSubstr.length - 1];\n }\n return fSubstr;\n };\n /**\n * Ensures library-formula arguments are wrapped for nested parsing.\n *\n * @hidden\n * @param {string} fSubstr - Library formula substring.\n * @returns {string} - Substring with argument parentheses normalized.\n */\n Parser.prototype.addParensToArgs = function (fSubstr) {\n if (fSubstr.length === 0) {\n return this.emptyStr;\n }\n var rightSides = [];\n rightSides.push(this.parent.getParseArgumentSeparator());\n rightSides.push(this.parent.rightBracket);\n var id = fSubstr.lastIndexOf(this.parent.getParseArgumentSeparator());\n var k = 0;\n if (id === -1) {\n if (fSubstr.length > 2 && fSubstr[0] === '(' && fSubstr[fSubstr.length - 1] === ')') {\n if (fSubstr[1] !== '{' && fSubstr[1] !== '(') {\n fSubstr = fSubstr.substring(0, fSubstr.length - 1) + '}' + fSubstr.substring(fSubstr.length - 1);\n fSubstr = fSubstr[0] + '{' + fSubstr.substring(1);\n }\n else {\n var marker = ['+', '-', '*', '/'];\n id = this.lastIndexOfAny(fSubstr, marker);\n if (k === 0 && fSubstr[fSubstr.length - 1] === ')') {\n k = fSubstr.length - 1;\n }\n if (k > 0) {\n if (fSubstr[id + 1] !== '{' && fSubstr[id - 1] === '}') {\n fSubstr = fSubstr.substr(0, k) + '}' + fSubstr.substr(k);\n fSubstr = fSubstr.substr(0, id + 1) + '{' + fSubstr.substr(id + 1);\n }\n }\n }\n }\n }\n else {\n var oneTimeOnly = true;\n while (id > -1) {\n var j = this.indexOfAny(fSubstr.substring(id + 1, fSubstr.length), rightSides);\n if (j >= 0) {\n j = id + j + 1;\n }\n else if (j === -1 && fSubstr[fSubstr.length - 1] === ')') {\n j = fSubstr.length - 1;\n }\n if (j > 0) {\n if (fSubstr[id + 1] !== '{' && fSubstr[j - 1] !== '}' && fSubstr[j - 1] !== '¢') {\n fSubstr = fSubstr.substr(0, j).trim() + '}' + fSubstr.substr(j);\n fSubstr = fSubstr.substr(0, id + 1) + '{' + fSubstr.substr(id + 1).trim();\n }\n }\n id = fSubstr.substr(0, id).lastIndexOf(this.parent.getParseArgumentSeparator());\n if (oneTimeOnly && id === -1 && fSubstr[0] === '(') {\n id = 0;\n oneTimeOnly = false;\n }\n }\n }\n fSubstr = fSubstr.split('{}').join(this.emptyStr);\n return fSubstr;\n };\n /**\n * @hidden\n * @param {string} text - specify the text\n * @param {string[]} operators - specify the operators\n * @returns {number} - returns last Index Of Any.\n */\n Parser.prototype.lastIndexOfAny = function (text, operators) {\n for (var i = text.length - 1; i > -1; i--) {\n if (operators.indexOf(text[i]) > -1) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Substitutes named ranges in formula text with their defined addresses.\n *\n * @param {string} formula - Formula text that may contain named ranges.\n * @returns {string} - Formula text with names expanded.\n */\n Parser.prototype.markNamedRanges = function (formula) {\n var markers = [')', this.parent.getParseArgumentSeparator(), '}', '+', '-', '*', '/', '<', '>', '=', '&', ':'];\n var i = (formula.length > 0 && (formula[0] === '(' || formula[0] === '{')) ? 1 : 0;\n if (formula.indexOf('#N/A') > -1) {\n formula = formula.split('#N/A').join('#N~A');\n }\n if (formula.indexOf('#DIV/0!') > -1) {\n formula = formula.split('#DIV/0!').join('#DIV~0!');\n }\n var end = this.indexOfAny(formula.substring(i), markers);\n while (end > -1 && end + i < formula.length) {\n var scopedRange = this.emptyStr;\n var s = null;\n if ((this.parent.substring(formula, i, end)).indexOf('[') > -1) {\n s = this.getTableRange(this.parent.substring(formula, i, end));\n }\n else if (this.parent.storedData.has(this.parent.substring(formula, i, end))) {\n s = this.checkForNamedRangeAndKeyValue(this.parent.substring(formula, i, end));\n }\n else if (this.parent.namedRanges.has(this.parent.substring(formula, i, end))) {\n s = this.checkForNamedRangeAndKeyValue(this.parent.substring(formula, i, end));\n }\n if (isNullOrUndefined(s)) {\n scopedRange = this.checkScopedRange(this.parent.substring(formula, i, end));\n if (scopedRange !== 'NaN') {\n this.findNamedRange = true;\n s = scopedRange;\n }\n else if (this.parent.substring(formula, i, end).startsWith(this.sheetToken.toString())) {\n //let formulaStr: number = this.parent.substring(formula, i, end).indexOf(this.sheetToken, 1);\n // if (formulaStr > 1) {\n // s = this.parent.namedRanges.get(this.parent.substring\n // (formula.substring(i), formulaStr + 1, end - formulaStr - 1));\n // }\n }\n if (!isNullOrUndefined(s) && this.findNamedRange) {\n if (s.indexOf(this.fixedReference) > -1) {\n s = s.split(this.fixedReference).join(this.emptyStr);\n }\n }\n }\n if (!isNullOrUndefined(s)) {\n s = s.toUpperCase();\n s = this.parent.setTokensForSheets(s);\n s = this.markLibraryFormulas(s);\n }\n if (!isNullOrUndefined(s) && s !== this.emptyStr) {\n formula = formula.substring(0, i) + s + formula.substring(i + end);\n i += s.length + 1;\n }\n else {\n i += end + 1;\n while (i < formula.length && !this.parent.isUpperChar(formula[i]) && formula[i] !== this.sheetToken) {\n i++;\n }\n }\n end = i;\n if (i < formula.length - 1 && formula[i] === '{') {\n i = i + 1;\n }\n end = this.indexOfAny(formula.substring(i), markers);\n while (end === 0 && i < formula.length - 1) {\n i++;\n end = this.indexOfAny(formula.substring(i), markers);\n }\n if ((end === -1 || formula.substring(i).indexOf('[') > -1) && i < formula.length) {\n if (formula.substring(i).indexOf('[') > -1) {\n s = this.getTableRange(formula.substring(i));\n }\n else {\n if (this.parent.storedData.has(formula.substring(i))) {\n s = this.parent.storedData.size > 0 ? this.checkForNamedRangeAndKeyValue(formula.substring(i)) : s;\n }\n else {\n s = this.parent.namedRanges.size > 0 ? this.checkForNamedRangeAndKeyValue(formula.substring(i)) : s;\n }\n }\n if (isNullOrUndefined(s)) {\n scopedRange = this.checkScopedRange(formula.substring(i));\n if (scopedRange !== 'NaN') {\n s = scopedRange;\n }\n }\n if (!isNullOrUndefined(s) && s !== this.emptyStr) {\n s = s.toUpperCase();\n s = this.parent.setTokensForSheets(s);\n s = this.markLibraryFormulas(s);\n if (s != null) {\n var val = formula.substring(i);\n if (val[val.length - 1] === ')') {\n formula = formula.substring(0, i) + s + ')';\n }\n else {\n formula = formula.substring(0, i) + s;\n }\n i += s.toString().length + 1;\n }\n }\n end = (i < formula.length) ? this.indexOfAny(formula.substring(i), markers) : -1;\n }\n }\n if (formula.indexOf('#N~A') > -1) {\n formula = formula.split('#N~A').join('#N/A');\n }\n if (formula.indexOf('#DIV~0!') > -1) {\n formula = formula.split('#DIV~0!').join('#DIV/0!');\n }\n return formula;\n };\n /**\n * Resolves named ranges and standalone key values embedded in formula text.\n *\n * @param {string} text - Formula text.\n * @returns {string} - Text with names/keys replaced by their values or addresses.\n */\n Parser.prototype.checkForNamedRangeAndKeyValue = function (text) {\n var scopedRange = this.emptyStr;\n if (text.indexOf('[') > -1) {\n var namerangeValue = this.getTableRange(text);\n if (!isNullOrUndefined(namerangeValue)) {\n this.findNamedRange = true;\n text = namerangeValue;\n }\n }\n scopedRange = this.checkScopedRange(text);\n if (scopedRange !== 'NaN') {\n this.findNamedRange = true;\n text = scopedRange;\n }\n else {\n if (text.indexOf(this.sheetToken) > -1) {\n var sheet = this.parent.getSheetFamilyItem(this.parent.grid);\n var value = text.split('\"').join(this.emptyStr);\n value = value.substr(0, value.indexOf(this.sheetToken));\n if (sheet.sheetNameToToken.has(value.toUpperCase())) {\n /* eslint-disable */\n var sheetIndex = parseInt(sheet.sheetNameToToken.get(value.toUpperCase()).split(this.sheetToken).join(this.emptyStr));\n // if (!ej.isNullOrUndefined(this.parentObject) && this.parentObject.pluginName == \"ejSpreadsheet\") {\n // var name = text.replace(value, this.parentObject.model.sheets[(sheetIndex + 1)].sheetInfo.text.toUpperCase()).split(\"'\").join(this._string_empty);\n // if (this.getNamedRanges().length > 0 && this.getNamedRanges().contains(name.toUpperCase())) {\n // text = name;\n // }\n // }\n /* tslint-enable */\n }\n }\n if (this.parent.storedData.size > 0 && this.parent.storedData.has(text)) {\n text = 'A' + this.parent.colIndex(text);\n }\n if (this.parent.namedRanges.size > 0 && this.parent.namedRanges.has(text.toUpperCase())) {\n if (!isNullOrUndefined(this.parent.parentObject)) {\n text = this.parse(this.parent.namedRanges.get(text.toUpperCase()));\n }\n else {\n text = this.parse(this.parent.namedRanges.get(text.toUpperCase()));\n text = this.parent.setTokensForSheets(text);\n if (text.indexOf(this.fixedReference) > -1) {\n text.split(this.fixedReference).join(this.emptyStr);\n }\n this.findNamedRange = true;\n }\n }\n if (this.findNamedRange) {\n if (text[0] !== '!' && text[0] !== 'q' && text[0] !== 'bq') {\n text = this.parent.setTokensForSheets(text);\n if (text.indexOf(this.fixedReference) > -1) {\n text = text.split(this.fixedReference).join(this.emptyStr);\n }\n }\n }\n }\n return text;\n };\n Parser.prototype.getTableRange = function (text) {\n text = text.replace(' ', this.emptyStr).toUpperCase();\n var name = text.replace(']', this.emptyStr).replace('#DATA', this.emptyStr);\n var tableName = name;\n if (name.indexOf(this.parent.getParseArgumentSeparator()) > -1) {\n tableName = name.substring(0, name.indexOf(this.parent.getParseArgumentSeparator())).replace('[', this.emptyStr);\n name = name.replace('[', this.emptyStr).replace(this.parent.getParseArgumentSeparator(), '_');\n }\n var range = this.emptyStr;\n return name.toUpperCase();\n };\n Parser.prototype.findNextEndIndex = function (formula, loc) {\n var count = 0;\n var l = loc;\n var found = false;\n while (!found && loc < formula.length) {\n if (formula[l] === '[') {\n count++;\n }\n else if (formula[l] === ']') {\n count--;\n if (count === 0) {\n found = true;\n }\n }\n loc++;\n }\n loc = loc - l;\n return loc;\n };\n ;\n Parser.prototype.processIndexArg = function (text) {\n var search = 'INDEX((';\n var idx = text.indexOf(search);\n if (idx !== -1) {\n var start = idx + (search.length - 1);\n if (start !== -1) {\n var braces = 0;\n var end = -1;\n for (var j = start; j < text.length; j++) {\n if (text[j] === '(') {\n braces++;\n }\n else if (text[j] === ')') {\n braces--;\n }\n if (braces === 0) {\n end = j;\n break;\n }\n }\n if (end > start) {\n text = text.slice(0, start) +\n this.parent.tic +\n text.slice(start + 1, end) +\n this.parent.tic +\n text.slice(end + 1);\n }\n }\n }\n return text;\n };\n Parser.prototype.isValidDotFormulaName = function (formulaName) {\n formulaName = formulaName.toUpperCase();\n var dotFormulaNames = ['STDEV.P', 'STDEV.S', 'VAR.S', 'VAR.P', 'T.TEST', 'F.TEST', 'Z.TEST', 'CHISQ.TEST',\n 'COVARIANCE.S', 'COVARIANCE.P', 'CHISQ.DIST', 'F.DIST', 'T.DIST', 'NETWORKDAYS.INTL', 'WORKDAY.INTL',\n 'ERROR.TYPE', 'ECMA.CEILING', 'ISO.CEILING'];\n return dotFormulaNames.some(function (formula) { return formulaName === formula; });\n };\n Parser.prototype.isOtherLangChar = function (char) {\n var code = char.charCodeAt(0);\n // checking for Latin characters.\n return (code >= 192 && code <= 214) || (code >= 216 && code <= 246) || (code >= 248 && code <= 255);\n };\n /**\n * Clears parser scratch state and detaches from the owning Calculate engine.\n * @internal\n * @returns {void}\n */\n Parser.prototype.destroy = function () {\n this.stringsColl.clear();\n this.storedStringText = this.emptyStr;\n this.isError = false;\n this.isFormulaParsed = false;\n this.parent = null;\n };\n return Parser;\n}());\nexport { Parser };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getValue, Event, NotifyPropertyChanges, Base, isNullOrUndefined, isUndefined, L10n } from '@syncfusion/ej2-base';\nimport { BasicFormulas } from './../formulas/index';\nimport { CommonErrors, FormulasErrorsStrings } from '../common/enum';\nimport { getRangeIndexes, getCellIndexes, getCellAddress, getRangeAddress } from '../common/address';\nimport { isDateTime } from '../common/number-date';\nimport { getSheetIndexByName } from '../common/sheet-info';\nimport { createSortComparer } from '../common/sort';\nimport { calculateDefaultLocale } from '../common/l10n';\nimport { Parser } from './parser';\nvar maxRows = 1048576;\nvar maxCols = 16384;\n/**\n * Excel-compatible formula calculation engine.\n *\n * Register sheets, named ranges, and cell values, then evaluate formulas with\n * {@link Calculate.computeFormula} or refresh dependent cells after edits.\n *\n * Built-in library functions are registered by {@link BasicFormulas} (math, text,\n * logical, lookup, financial, statistical, engineering, and ECMA-376 extensions).\n *\n * @remarks\n * Integrate with a workbook by passing an {@link ICalculateHost} to the constructor,\n * or use standalone key/value storage via {@link Calculate.setKeyValue}.\n *\n * @example\n * ```ts\n * import { Calculate } from '@syncfusion/ej2-calculate';\n *\n * const engine = new Calculate();\n * engine.setKeyValue('A1', '10');\n * engine.setKeyValue('A2', '20');\n * const sum = engine.computeFormula('=SUM(A1:A2)'); // '30'\n * engine.destroy();\n * ```\n */\nvar Calculate = /** @class */ (function (_super) {\n __extends(Calculate, _super);\n /**\n * Creates a Calculate engine and registers built-in formulas.\n *\n * @param {Object} parent - Optional host implementing {@link ICalculateHost} (for example a workbook),\n * or omit for a standalone engine that stores values with {@link setKeyValue}.\n */\n function Calculate(parent) {\n var _this = _super.call(this, null, null) || this;\n _this.lFormulas = new Map();\n /** @hidden */\n _this.storedData = new Map();\n _this.keyToRowsMap = new Map();\n _this.rowsToKeyMap = new Map();\n /** @hidden */\n _this.rightBracket = String.fromCharCode(161);\n /** @hidden */\n _this.leftBracket = String.fromCharCode(162);\n /** @hidden */\n _this.sheetToken = '!';\n /**\n * Active cell reference currently being evaluated (may include a sheet token).\n *\n * @hidden\n */\n _this.cell = '';\n _this.cellPrefix = '!0!A';\n _this.treatEmptyStringAsZero = false;\n /** @hidden */\n _this.tic = '\"';\n /** @hidden */\n _this.singleTic = '\\'';\n /** @hidden */\n _this.trueValue = 'TRUE';\n /** @hidden */\n _this.falseValue = 'FALSE';\n _this.parseDecimalSeparator = '.';\n /** @hidden */\n _this.arithMarker = String.fromCharCode(180);\n /** @hidden */\n _this.arithMarker2 = _this.arithMarker + _this.arithMarker;\n _this.dependentCells = null;\n _this.dependentFormulaCells = null;\n /**\n * Minimum numeric bound used by library formulas that clamp results.\n *\n * @hidden\n */\n _this.minValue = Number.MIN_SAFE_INTEGER;\n /**\n * Maximum numeric bound used by library formulas that clamp results.\n *\n * @hidden\n */\n _this.maxValue = Number.MAX_SAFE_INTEGER;\n /**\n * Formula category labels used by Insert Function UI integrations.\n * The `'All'` entry is localized via Syncfusion {@link L10n} (key `CategoryAll`).\n *\n * @hidden\n */\n _this.categoryCollection = ['All'];\n /**\n * Nesting depth counter used while walking formula dependencies.\n *\n * @hidden\n */\n _this.dependencyLevel = 0;\n /** @hidden */\n _this.randomValues = new Map();\n /** @hidden */\n _this.isRandomVal = false;\n /** @hidden */\n _this.randCollection = [];\n /** @hidden */\n _this.dependencyCollection = [];\n /** @hidden */\n _this.uniqueRange = [];\n /** @hidden */\n _this.sortRange = [];\n /**\n * Parser and engine failure messages indexed by {@link FormulasErrorsStrings}.\n *\n * Prose entries are localized via {@link L10n} / {@link setLocale}. Excel error\n * tokens in this array (`#NAME?`, `#CIRCULARREF!`, `#SPILL!`, `#DIV/0!`) stay\n * English for workbook compatibility.\n *\n * @hidden\n */\n _this.formulaErrorStrings = [];\n _this.errorStrings = null;\n _this.parseArgumentSeparator = ',';\n _this.dateTime1900 = new Date(1900, 0, 1, 0, 0, 0);\n _this.isParseDecimalSeparatorChanged = false;\n _this.isArgumentSeparatorChanged = false;\n _this.sheetFamilyID = 0;\n _this.defaultFamilyItem = null;\n _this.sheetFamiliesList = null;\n _this.modelToSheetID = null;\n /** @hidden */\n _this.tokenCount = 0;\n _this.sortedSheetNames = null;\n _this.tempSheetPlaceHolder = String.fromCharCode(133);\n /** @hidden */\n _this.namedRanges = new Map();\n _this.formulaInfoTable = null;\n _this.millisecondsOfaDay = 24 * 60 * 60 * 1000;\n _this.parseDateTimeSeparator = '/';\n /** Keys currently being evaluated via {@link getKeyValue} (guards row-map recursion). */\n _this.evaluatingKeys = new Set();\n var host = parent;\n var locale = (host && host.locale) ? host.locale : 'en-US';\n _this.l10n = new L10n('calculate', calculateDefaultLocale, locale);\n _this.refreshLocalizedStrings();\n new BasicFormulas(_this);\n _this.parentObject = isNullOrUndefined(parent) ? _this : parent;\n _this.grid = _this.parentObject;\n _this.parser = new Parser(_this);\n return _this;\n }\n Object.defineProperty(Calculate.prototype, \"libraryFormulas\", {\n /**\n * Registered library formula collection (name → handler metadata).\n *\n * Prefer {@link getLibraryFormulas} for read access. The setter accepts a single\n * formula registration payload used during built-in and custom registration.\n *\n * @hidden\n * @returns {any} - Registered library formula collection.\n */\n get: function () {\n return this.lFormulas;\n },\n set: function (formulaColl) {\n this.lFormulas.set(formulaColl.fName, { handler: formulaColl.handler, category: formulaColl.category, description: formulaColl.description });\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Applies culture-specific prose for parser/engine messages and category labels.\n *\n * Excel error tokens (`#VALUE!`, …), `TRUE`/`FALSE`, and English function names\n * are not localized.\n *\n * @hidden\n * @param {string} locale - Culture id (for example `\"fr-FR\"`). Defaults to host `locale` or `\"en-US\"`.\n * @returns {void}\n */\n Calculate.prototype.setLocale = function (locale) {\n var host = this.parentObject;\n var next = locale || (host && host.locale) || 'en-US';\n this.l10n.setLocale(next);\n this.refreshLocalizedStrings();\n };\n /**\n * Rebuilds {@link formulaErrorStrings} and {@link categoryCollection} from L10n.\n *\n * @hidden\n * @returns {void}\n */\n Calculate.prototype.refreshLocalizedStrings = function () {\n var _this = this;\n var t = function (key) { return _this.l10n.getConstant(key); };\n this.formulaErrorStrings = [\n t('OperatorsCannotStartWithExpression'),\n t('CannotParse'),\n t('BadLibrary'),\n t('InvalidCharInFrontOf'),\n t('NumberContains2DecimalPoints'),\n t('ExpressionCannotEndWithAnOperator'),\n t('InvalidCharactersFollowingWithOperator'),\n t('InvalidCharInNumber'),\n t('MismatchedParentheses'),\n t('UnknownFormulaName'),\n t('RequiresASingleArgument'),\n t('Requires3Args'),\n t('InvalidMathArgument'),\n t('Requires2Args'),\n '#NAME?',\n t('TooComplex'),\n '#CIRCULARREF!',\n t('MissingFormula'),\n t('ImproperFormula'),\n t('InvalidExpression'),\n t('CellEmpty'),\n t('BadFormula'),\n t('EmptyExpression'),\n '',\n t('MismatchedTics'),\n t('WrongNumberArguments'),\n t('InvalidArguments'),\n t('IterationsDoNotConverge'),\n t('AlreadyRegistered'),\n t('CalculationOverflow'),\n t('MissingSheet'),\n t('CannotParseUnderscore'),\n t('ExpressionCannotEndWithAnOperatorUnderscore'),\n '#SPILL!',\n '#DIV/0!'\n ];\n this.categoryCollection = [t('CategoryAll')];\n };\n /**\n * Returns sheet metadata from the calculate host when available.\n *\n * @returns {Object} - Sheet info entries from {@link ICalculateHost.getSheetInfo}, or an empty array.\n * @hidden\n */\n Calculate.prototype.getHostSheetInfo = function () {\n var host = this.parentObject;\n if (host && typeof host.getSheetInfo === 'function') {\n return host.getSheetInfo() || [];\n }\n return [];\n };\n /**\n * Parses a date/time string via the host when {@link ICalculateHost.parseDate} is implemented.\n *\n * @param {string | number | boolean | Object} value - Date or time text to parse.\n * @returns {Object} - Host parse result, or an empty object when no host parser is available.\n * @hidden\n */\n Calculate.prototype.hostParseDate = function (value) {\n var host = this.parentObject;\n if (host && typeof host.parseDate === 'function') {\n return host.parseDate(value) || {};\n }\n return {};\n };\n /**\n * Gets the culture-aware separator used to split formula arguments (typically `,` or `;`).\n *\n * @hidden\n * @returns {string} - Argument separator string.\n */\n Calculate.prototype.getParseArgumentSeparator = function () {\n var seperator = ',';\n if (!this.isArgumentSeparatorChanged && seperator !== this.parseArgumentSeparator) {\n this.parseArgumentSeparator = seperator;\n }\n return this.parseArgumentSeparator;\n };\n /**\n * Sets the separator used to split formula arguments.\n *\n * @param {string | number | boolean | Object} value - Argument separator for the current culture (for example `,` or `;`).\n * @returns {void}\n */\n Calculate.prototype.setParseArgumentSeparator = function (value) {\n this.parseArgumentSeparator = value;\n this.isArgumentSeparatorChanged = true;\n };\n /**\n * Gets the date/time component separator used when parsing date literals.\n *\n * @hidden\n * @returns {Date | Object} - Date/time separator string (default `/`).\n */\n Calculate.prototype.getParseDateTimeSeparator = function () {\n return this.parseDateTimeSeparator;\n };\n /**\n * Controls whether empty string cell values are treated as numeric zero in calculations.\n *\n * @param {string | number | boolean | Object} value - When `true`, empty strings coerce to `0`.\n * @returns {void}\n */\n Calculate.prototype.setTreatEmptyStringAsZero = function (value) {\n this.treatEmptyStringAsZero = value;\n };\n /**\n * Returns whether empty string values are treated as numeric zero.\n *\n * @hidden\n * @returns {string | number} - `true` when empty strings coerce to `0`.\n */\n Calculate.prototype.getTreatEmptyStringAsZero = function () {\n return this.treatEmptyStringAsZero;\n };\n /**\n * Sets the date/time component separator used when parsing date literals.\n *\n * @hidden\n * @param {string | number | boolean | Object} value - Separator character or string (for example `/` or `-`).\n * @returns {void}\n */\n Calculate.prototype.setParseDateTimeSeparator = function (value) {\n this.parseDateTimeSeparator = value;\n };\n /**\n * Syncfusion property-change hook (no-op for Calculate; required by {@link INotifyPropertyChanged}).\n *\n * @param {Object} newProp - Updated model properties.\n * @param {Object} oldProp - Previous model properties.\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Calculate.prototype.onPropertyChanged = function (newProp, oldProp) {\n /** code snippets */\n };\n /**\n * Gets the module name of the Calculate engine.\n *\n * @returns {string} - Returns \"calculate\" as the component module name.\n */\n Calculate.prototype.getModuleName = function () {\n return 'calculate';\n };\n /**\n * Returns the leading character that marks a formula expression (always `=`).\n *\n * @returns {string} - Formula prefix character.\n * @hidden\n */\n Calculate.prototype.getFormulaCharacter = function () {\n return '=';\n };\n /**\n * Returns whether the first character of `text` is an uppercase A–Z letter.\n *\n * @param {string} text - Text to inspect.\n * @returns {string} - `true` when the first character is uppercase ASCII A-Z.\n * @hidden\n */\n Calculate.prototype.isUpperChar = function (text) {\n var charCode = text.charCodeAt(0);\n return charCode > 64 && charCode < 91;\n };\n Calculate.prototype.resetKeys = function () {\n this.storedData.clear();\n this.keyToRowsMap.clear();\n this.rowsToKeyMap.clear();\n };\n /**\n * Records a dependency from the active formula cell to `cellRef` and detects circular references.\n *\n * @param {string} cellRef - Dependent cell reference (may include a sheet token).\n * @throws When a circular reference is detected.\n * @hidden\n * @returns {void}\n */\n Calculate.prototype.updateDependentCell = function (cellRef) {\n var _this = this;\n var formulaCell = this.cell;\n if (formulaCell !== '') {\n var family = this.getSheetFamilyItem(this.grid);\n if (family.sheetNameToParentObject) {\n if (!formulaCell.includes(this.sheetToken)) {\n formulaCell = family.parentObjectToToken.get(this.grid) + formulaCell;\n }\n if (!cellRef.includes(this.sheetToken)) {\n cellRef = family.parentObjectToToken.get(this.grid) + cellRef;\n }\n }\n if (formulaCell !== cellRef) {\n var dependentCellMap = this.getDependentCells();\n if (!dependentCellMap.has(cellRef)) {\n dependentCellMap.set(cellRef, []);\n }\n var dependentCells = dependentCellMap.get(cellRef);\n if (dependentCells.indexOf(formulaCell) === -1) {\n var formulaDependentCellMap_1 = this.getDependentFormulaCells();\n var cellRefObj_1 = {};\n var checkCircularReference_1 = function (refCell) {\n if (formulaDependentCellMap_1.has(refCell)) {\n var formalaRefCells = formulaDependentCellMap_1.get(refCell);\n if (formalaRefCells.has(formulaCell)) {\n throw _this.formulaErrorStrings[FormulasErrorsStrings.CircularReference];\n }\n else if (!cellRefObj_1[refCell]) {\n cellRefObj_1[refCell] = true;\n formalaRefCells.forEach(function (refCell) {\n checkCircularReference_1(refCell);\n });\n }\n }\n };\n checkCircularReference_1(cellRef);\n dependentCells.push(formulaCell);\n if (!formulaDependentCellMap_1.has(formulaCell)) {\n formulaDependentCellMap_1.set(formulaCell, new Map());\n formulaDependentCellMap_1.get(formulaCell).set(cellRef, cellRef);\n }\n else if (!formulaDependentCellMap_1.get(formulaCell).has(cellRef)) {\n formulaDependentCellMap_1.get(formulaCell).set(cellRef, cellRef);\n }\n }\n }\n }\n };\n /**\n * Returns the map of cell references to cells that depend on them.\n *\n * @returns {Object} - Dependency map keyed by referenced cell.\n * @hidden\n */\n Calculate.prototype.getDependentCells = function () {\n if (this.dependentCells == null) {\n this.dependentCells = new Map();\n }\n return this.dependentCells;\n };\n /**\n * Returns the map of formula cells to the references they depend on.\n *\n * @returns {Object} - Nested map of formula cell → referenced cells.\n * @hidden\n */\n Calculate.prototype.getDependentFormulaCells = function () {\n if (this.isSheetMember()) {\n var family = this.getSheetFamilyItem(this.grid);\n if (family.sheetDependentFormulaCells == null) {\n family.sheetDependentFormulaCells = new Map();\n }\n return family.sheetDependentFormulaCells;\n }\n else {\n if (this.dependentFormulaCells == null) {\n this.dependentFormulaCells = new Map();\n }\n return this.dependentFormulaCells;\n }\n };\n /**\n * Returns the map of registered library formula names to their handlers and metadata.\n *\n * @hidden\n * @returns {Object} - Map keyed by uppercase Excel function name (for example `\"SUM\"`, `\"XLOOKUP\"`).\n */\n Calculate.prototype.getLibraryFormulas = function () {\n return this.lFormulas;\n };\n /**\n * Returns the handler function for a registered library formula.\n *\n * @hidden\n * @param {string} libFormula - Excel function name (case-insensitive), for example `\"SUM\"`.\n * @returns {Function | null} - Bound `Compute*` handler, or `null` when the name is not registered.\n *\n * @example\n * ```ts\n * const sum = engine.getFunction('SUM');\n * ```\n */\n Calculate.prototype.getFunction = function (libFormula) {\n if (this.getLibraryFormulas().has(libFormula.toUpperCase())) {\n return this.getLibraryFormulas().get(libFormula.toUpperCase()).handler;\n }\n else {\n return null;\n }\n };\n /**\n * Converts an Excel serial date value to a JavaScript `Date`.\n *\n * @param {string | number} val - Excel serial number as a string.\n * @returns {Date | Object} - Corresponding `Date` (accounts for the Excel 1900 leap-year quirk).\n * @hidden\n */\n Calculate.prototype.intToDate = function (val) {\n var dateVal = Number(val);\n dateVal = (dateVal > 0 && dateVal < 1) ? (1 + dateVal) : (dateVal === 0) ? 1 : dateVal;\n if (dateVal > 60) {\n dateVal -= 1; // Due to leap year issue of 1900 in MSExcel.\n }\n var startDate = new Date('01/01/1900');\n var startDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), startDate.getHours(), startDate.getMinutes(), startDate.getSeconds(), startDate.getMilliseconds());\n return new Date(new Date(((dateVal - 1) * (1000 * 3600 * 24)) + startDateUTC).toUTCString().replace(' GMT', ''));\n };\n /**\n * Returns the formula info table for the active sheet family (or the standalone engine table).\n *\n * @hidden\n * @returns {Object} - Map of cell token → {@link FormulaInfo}.\n */\n Calculate.prototype.getFormulaInfoTable = function () {\n if (this.isSheetMember()) {\n var family = this.getSheetFamilyItem(this.grid);\n if (family.sheetFormulaInfotable === null) {\n family.sheetFormulaInfotable = new Map();\n }\n return family.sheetFormulaInfotable;\n }\n else {\n if (this.formulaInfoTable === null) {\n this.formulaInfoTable = new Map();\n }\n return this.formulaInfoTable;\n }\n };\n /**\n * Gets the decimal separator used when parsing numeric literals.\n *\n * @hidden\n * @returns {string} - Decimal separator string (default `.`).\n */\n Calculate.prototype.getParseDecimalSeparator = function () {\n var seperator = '.';\n if (!this.isParseDecimalSeparatorChanged && seperator !== this.parseDecimalSeparator) {\n this.parseDecimalSeparator = seperator;\n }\n return this.parseDecimalSeparator;\n };\n /**\n * Sets the decimal separator used when parsing numeric literals.\n *\n * @param {string | number | boolean | Object} value - Decimal separator for the current culture (for example `.` or `,`).\n * @returns {void}\n */\n Calculate.prototype.setParseDecimalSeparator = function (value) {\n this.parseDecimalSeparator = value;\n this.isParseDecimalSeparatorChanged = true;\n };\n /**\n * Extracts the sheet token prefix from a cell reference when present.\n *\n * @param {string} cellRef - Cell or range reference that may begin with a sheet token.\n * @returns {string} - Sheet token substring including delimiters, or an empty string.\n * @hidden\n */\n Calculate.prototype.getSheetToken = function (cellRef) {\n var i = 0;\n var temp = '';\n if (i < cellRef.length && cellRef[i] === this.sheetToken) {\n i++;\n while (i < cellRef.length && cellRef[i] !== this.sheetToken) {\n i++;\n }\n temp = cellRef.substring(0, i + 1);\n }\n if (i < cellRef.length) {\n return temp;\n }\n throw this.formulaErrorStrings[FormulasErrorsStrings.BadIndex];\n };\n /**\n * Resolves the sheet family id for a grid/parent object.\n *\n * @param {Object} grd - Grid or parent object registered with the engine.\n * @returns {string | number} - Sheet id, or `-1` when not registered.\n * @hidden\n */\n Calculate.prototype.getSheetID = function (grd) {\n var family = this.getSheetFamilyItem(grd);\n if (family.sheetNameToParentObject != null && family.sheetNameToParentObject.size > 0) {\n var token = family.parentObjectToToken.get(grd);\n if (token) {\n token = token.split(this.sheetToken).join('');\n var id = this.parseFloat(token);\n if (!this.isNaN(id)) {\n return id;\n }\n }\n }\n return -1;\n };\n /**\n * Parses a numeric string using the configured decimal separator.\n *\n * @hidden\n * @param {string | number | boolean | Object} value - Numeric text or number.\n * @returns {number} - Parsed number, or `NaN` when parsing fails.\n */\n Calculate.prototype.parseFloat = function (value) {\n var convertedNum = Number(value);\n if (isNaN(convertedNum) && typeof value === 'string' && value.includes(',')) {\n convertedNum = Number(value.split(',').join(''));\n }\n return convertedNum;\n };\n /**\n * Returns the 1-based row index from a cell reference string.\n *\n * @hidden\n * @param {string} cell - Cell reference (optional sheet token allowed).\n * @returns {number} - Row number, or `-1` when invalid.\n */\n Calculate.prototype.rowIndex = function (cell) {\n var i = 0;\n var isLetter = false;\n if (i < cell.length && cell[i] === this.sheetToken) {\n i++;\n while (i < cell.length && cell[i] !== this.sheetToken) {\n i++;\n }\n i++;\n }\n while (i < cell.length && this.isChar(cell[i])) {\n isLetter = true;\n i++;\n }\n var result = parseInt(cell.substring(i), 10);\n if (i < cell.length && !this.isNaN(result)) {\n return result;\n }\n if (isLetter) {\n return -1;\n }\n throw this.formulaErrorStrings[FormulasErrorsStrings.BadIndex];\n };\n /**\n * Returns the 1-based column index from a cell reference string.\n *\n * @param {string} cell - Cell reference (optional sheet token allowed).\n * @returns {number} - Column number, or `-1` when invalid.\n * @hidden\n */\n Calculate.prototype.colIndex = function (cell) {\n var j = 0;\n var k = 0;\n cell = cell.toUpperCase();\n if (j < cell.length && cell[j] === this.sheetToken) {\n j++;\n while (j < cell.length && cell[j] !== this.sheetToken) {\n j++;\n }\n j++;\n }\n while (j < cell.length && this.isChar(cell[j])) {\n var charCode = cell[j].charCodeAt(0);\n k = k * 26 + charCode - 64;\n j++;\n }\n if (k === 0) {\n return -1;\n }\n return k;\n };\n /**\n * Returns the Excel-compatible error tokens used by the engine (`#N/A`, `#VALUE!`, …).\n *\n * @returns {string[]} - Error string list indexed by {@link CommonErrors}.\n * @hidden\n */\n Calculate.prototype.getErrorStrings = function () {\n if (this.errorStrings === null) {\n this.errorStrings = ['#N/A', '#VALUE!', '#REF!', '#DIV/0!', '#NUM!', '#NAME?', '#NULL!', '#CALC!'];\n }\n return this.errorStrings;\n };\n /**\n * Returns a substring with Excel-style optional length (defaults to remainder of `text`).\n *\n * @param {string} text - Source string.\n * @param {number} startIndex - Zero-based start index.\n * @param {number} length - Optional length; when omitted, returns through the end of `text`.\n * @returns {string} - Substring.\n * @hidden\n */\n Calculate.prototype.substring = function (text, startIndex, length) {\n return text.substring(startIndex, length + startIndex);\n };\n /**\n * Returns whether `c` is an alphabetic character (A–Z or a–z).\n *\n * @param {number} c - Single character or string whose first character is tested.\n * @returns {string | number} - `true` when alphabetic.\n * @hidden\n */\n Calculate.prototype.isChar = function (c) {\n if ((c.charCodeAt(0) >= 65 && c.charCodeAt(0) <= 90) || (c.charCodeAt(0) >= 97 && c.charCodeAt(0) <= 122)) {\n return true;\n }\n return false;\n };\n /**\n * Returns the {@link CalcSheetFamilyItem} for a model/grid, creating family storage as needed.\n *\n * @param {Object} model - Parent grid or sheet model.\n * @param {string | number | Object} calcId - Optional explicit family id.\n * @returns {string | number} - Sheet family item for the model.\n * @hidden\n */\n Calculate.prototype.getSheetFamilyItem = function (model, calcId) {\n if (this.sheetFamilyID === 0) {\n if (this.defaultFamilyItem == null) {\n this.defaultFamilyItem = new CalcSheetFamilyItem();\n }\n return this.defaultFamilyItem;\n }\n if (this.sheetFamiliesList == null) {\n this.sheetFamiliesList = new Map();\n }\n if (calcId === undefined) {\n calcId = this.modelToSheetID.get(model);\n }\n if (!this.sheetFamiliesList.has(calcId)) {\n this.sheetFamiliesList.set(calcId, new CalcSheetFamilyItem());\n }\n return this.sheetFamiliesList.get(calcId);\n };\n /**\n * Stores a standalone key/value (or formula) for evaluation without a workbook host.\n *\n * When `value` starts with `=`, it is treated as a formula and evaluated by {@link getKeyValue}.\n *\n * @param {string} key - Cell-like key (for example `\"A1\"`).\n * @param {string | number | boolean | Object} value - Literal value or formula text.\n *\n * @example\n * ```ts\n * engine.setKeyValue('A1', '10');\n * engine.setKeyValue('B1', '=A1*2');\n * ```\n * @returns {void}\n */\n Calculate.prototype.setKeyValue = function (key, value) {\n key = key.toUpperCase();\n var str = value.toString().trim();\n if (!this.storedData.get(key) || str.indexOf('{') === 0) {\n this.storedData.set(key, new FormulaInfo());\n this.keyToRowsMap.set(key, this.keyToRowsMap.size + 1);\n this.rowsToKeyMap.set(this.rowsToKeyMap.size + 1, key);\n }\n var fInfo = this.storedData.get(key);\n if (fInfo.getFormulaText() != null && fInfo.getFormulaText().length > 0 && fInfo.getFormulaText() !== str) {\n var s1 = this.cellPrefix + this.keyToRowsMap.get(key).toString();\n var formulaDependent = this.getDependentFormulaCells().get(s1);\n if (formulaDependent != null) {\n this.clearFormulaDependentCells(s1);\n }\n }\n if (str.length > 0 && str[0] === this.getFormulaCharacter()) {\n fInfo.setFormulaText(str);\n }\n else if (fInfo.getFormulaValue() !== str) {\n fInfo.setFormulaText('');\n fInfo.setParsedFormula('');\n fInfo.setFormulaValue(str);\n }\n };\n /**\n * Clears dependency graph entries for a formula cell.\n *\n * @param {string} cell - Formula cell token whose dependencies should be removed.\n * @hidden\n * @returns {void}\n */\n Calculate.prototype.clearFormulaDependentCells = function (cell) {\n var _this = this;\n var dependentFormula = this.getDependentFormulaCells().get(cell);\n if (dependentFormula) {\n dependentFormula.forEach(function (value, key) {\n var s = key;\n var dependent = _this.getDependentCells().get(s);\n _this.arrayRemove(dependent, cell);\n if (dependent.length === 0) {\n _this.getDependentCells().delete(s);\n }\n });\n this.getDependentFormulaCells().delete(cell);\n }\n };\n /**\n * Clears all stored key-value pairs from memory in standalone mode.\n *\n * @returns {void}\n */\n Calculate.prototype.clearKeys = function () {\n this.resetKeys();\n };\n Calculate.prototype.arrayRemove = function (array, value) {\n var index = array.indexOf(value);\n if (index !== -1) {\n array.splice(index, 1);\n }\n return array;\n };\n /**\n * Returns the stored or computed value for a standalone key registered with {@link setKeyValue}.\n *\n * @param {string} key - Cell-like key (case-insensitive).\n * @returns {string} - Computed formula result or stored literal; empty string when missing.\n *\n * @example\n * ```ts\n * engine.setKeyValue('A1', '=1+2');\n * engine.getKeyValue('A1'); // '3'\n * ```\n */\n Calculate.prototype.getKeyValue = function (key) {\n key = key.toUpperCase();\n if (!this.storedData.has(key)) {\n return '';\n }\n var fInfo = this.storedData.get(key);\n var fText = fInfo.getFormulaText();\n if (fText.length > 0 && fText[0] === this.getFormulaCharacter()) {\n if (this.evaluatingKeys.has(key)) {\n return this.getErrorStrings()[CommonErrors.Ref];\n }\n this.evaluatingKeys.add(key);\n this.cell = this.cellPrefix + this.keyToRowsMap.get(key).toString();\n fText = fText.substring(1);\n try {\n try {\n fInfo.setParsedFormula(this.parser.parseFormula(fText, key));\n }\n catch (ex) {\n var args = {\n message: ex.message, exception: ex, isForceCalculable: false,\n computeForceCalculate: false\n };\n this.trigger('onFailure', args);\n fInfo.setFormulaValue(args.message);\n return this.storedData.get(key).getFormulaValue();\n }\n try {\n fInfo.setFormulaValue(this.computeFormula(fInfo.getParsedFormula()));\n }\n catch (ex) {\n var args = {\n message: ex.message, exception: ex, isForceCalculable: false,\n computeForceCalculate: false\n };\n this.trigger('onFailure', args);\n var errorMessage = (typeof args.exception === 'string') ? args.exception : args.message;\n return (isNullOrUndefined(this.getErrorLine(ex)) ? '' : '#' + this.getErrorLine(ex) + ': ') + errorMessage;\n }\n }\n finally {\n this.evaluatingKeys.delete(key);\n }\n }\n return this.storedData.get(key).getFormulaValue();\n };\n /**\n * Returns the named range map (name → range address).\n *\n * @hidden\n * @returns {Object} - Mutable map of named ranges.\n */\n Calculate.prototype.getNamedRanges = function () {\n return this.namedRanges;\n };\n /**\n * Adds or replaces a named range.\n *\n * @param {string} name - Range name (optionally `Sheet!Name` scoped).\n * @param {string} range - Address or formula text associated with the name.\n * @returns {string} - `true` when the name was registered; `false` when sheet scope could not be resolved.\n */\n Calculate.prototype.addNamedRange = function (name, range) {\n var sheetScopeName = name.split(this.sheetToken);\n if (sheetScopeName.length > 1) {\n var sheetId = (this.getSheetId(this.grid)).toString();\n var family = this.getSheetFamilyItem(sheetId);\n if (!family.parentObjectToToken.get(sheetId)) {\n return false;\n }\n name = sheetScopeName[0] + this.sheetToken + sheetScopeName[1].toUpperCase();\n }\n else {\n name = name.toUpperCase();\n }\n this.namedRanges.set(name, range);\n return true;\n };\n /**\n * Rewrites named-range keys after a sheet rename.\n *\n * @param {string} pName - Previous sheet name segment.\n * @param {string} name - New sheet name segment.\n * @hidden\n * @returns {void}\n */\n Calculate.prototype.updateNamedRange = function (pName, name) {\n var updatedRange = new Map();\n this.namedRanges.forEach(function (value, key) {\n var updatedKey = key;\n if (key.includes(pName)) {\n var range = key.split('!');\n range[0] = name;\n updatedKey = range.join('!');\n }\n updatedRange.set(updatedKey, value);\n });\n this.namedRanges = updatedRange;\n };\n /**\n * Removes a named range by name.\n *\n * @param {string} name - Named range to remove (case-insensitive).\n * @returns {string} - `true` when the name existed and was removed.\n */\n Calculate.prototype.removeNamedRange = function (name) {\n name = name.toUpperCase();\n if (this.namedRanges.get(name) != null) {\n this.namedRanges.delete(name);\n return true;\n }\n return false;\n };\n /**\n * Converts a 1-based column number to Excel column letters (`1` → `\"A\"`, `27` → `\"AA\"`).\n *\n * @param {number} col - 1-based column index.\n * @returns {string | number} - Column letters.\n * @hidden\n */\n Calculate.prototype.convertAlpha = function (col) {\n var arrCol = [];\n var n = 0;\n var charText = 'A';\n while (col > 0) {\n col--;\n var aCharValue = charText.charCodeAt(0);\n arrCol[n] = String.fromCharCode(col % 26 + aCharValue);\n col = parseInt((col / 26).toString(), 10);\n n++;\n }\n var arr = [];\n for (var i = 0; i < n; i++) {\n arr[n - i - 1] = arrCol[i];\n }\n return arr.join('');\n };\n /**\n * Expands a cell or range reference into an array of individual cell addresses.\n *\n * @param {string} cellRange - Single cell or `A1:B2`-style range (sheet token allowed).\n * @returns {string} - Cell address array, or the original string when not expandable.\n * @hidden\n */\n Calculate.prototype.getCellCollection = function (cellRange) {\n if (cellRange.indexOf(':') < 0) {\n if (!this.isCellReference(cellRange)) {\n return cellRange.split(this.getParseArgumentSeparator());\n }\n else {\n cellRange = cellRange + ':' + cellRange;\n }\n }\n var token = '';\n var sheetTokenIndex = cellRange.indexOf(this.sheetToken);\n if (sheetTokenIndex > -1) {\n var index = sheetTokenIndex;\n var s = index + 1;\n while (s < cellRange.length) {\n if (cellRange[s] === this.sheetToken) {\n token = cellRange.substr(0, s + 1);\n break;\n }\n s++;\n }\n }\n var i = cellRange.indexOf(':');\n var row1;\n var row2;\n var col1;\n var col2;\n if (i > 0 && this.isChar(cellRange[i - 1])) {\n var k = i - 2;\n while (k >= 0 && this.isDigit(cellRange[k])) {\n k--;\n }\n }\n row1 = this.rowIndex(this.substring(cellRange, 0, i));\n row2 = this.rowIndex(this.substring(cellRange, i + 1, i + cellRange.length - i - 1));\n col1 = this.colIndex(this.substring(cellRange, 0, i));\n col2 = this.colIndex(this.substring(cellRange, i + 1, i + cellRange.length - i - 1));\n if (row1 >= maxRows || row2 >= maxRows || col1 >= maxCols || col2 >= maxCols) {\n return [this.getErrorStrings()[CommonErrors.Ref]];\n }\n if (row1 > row2) {\n i = row2;\n row2 = row1;\n row1 = i;\n }\n if (col1 > col2) {\n i = col2;\n col2 = col1;\n col1 = i;\n }\n var cells = [];\n var j;\n var c = 0;\n for (i = row1; i <= row2; i++) {\n for (j = col1; j <= col2; j++) {\n cells[c] = token + '' + this.convertAlpha(j) + i.toString();\n c++;\n }\n }\n return cells;\n };\n /**\n * Parses (when needed) and evaluates a formula expression.\n *\n * @hidden\n * @param {string} formulaText - Formula text (with or without leading `=`) or a pre-parsed token string.\n * @param {boolean} isFromComputeExpression - Internal flag when invoked from {@link computeExpression}.\n * @returns {string} - Computed value, or an Excel error token string on failure.\n *\n * @example\n * ```ts\n * engine.computeFormula('=SUM(1,2,3)'); // '6'\n * ```\n */\n Calculate.prototype.computeFormula = function (formulaText, isFromComputeExpression) {\n return this.calculateFormula(formulaText, false, isFromComputeExpression);\n };\n Calculate.prototype.calculateFormula = function (formulaText, refresh, isFromComputeExpression) {\n var _this = this;\n var parsedText;\n var lastIndexOfq;\n var formulatResult;\n var nestedFormula = false;\n var fNested;\n // Only short-circuit when a previously parsed formula is already marked as failed.\n // Fresh formula text must re-parse so one failure does not poison later computeFormula calls.\n if (this.parser.isError) {\n return formulaText;\n }\n if (!this.parser.isFormulaParsed) {\n parsedText = this.parser.parseFormula(formulaText);\n }\n else {\n parsedText = formulaText;\n }\n this.parser.isFormulaParsed = false;\n try {\n lastIndexOfq = this.findLastIndexOfq(parsedText);\n if (lastIndexOfq > 0) {\n nestedFormula = true;\n }\n if (parsedText !== '' && lastIndexOfq > -1) {\n var i = lastIndexOfq + 1;\n var _loop_1 = function () {\n if (parsedText[i] !== this_1.rightBracket) {\n i++;\n return \"continue\";\n }\n var sFormula = parsedText.substring(lastIndexOfq, i + 1);\n var libFormula = sFormula.split(this_1.leftBracket)[0].split('q').join('');\n var args = void 0;\n if (this_1.getLibraryFormulas().get(libFormula.toUpperCase()).isCustom) {\n args = sFormula.substring(sFormula.indexOf(this_1.leftBracket) + 1, sFormula.indexOf(this_1.rightBracket))\n .split(this_1.getParseArgumentSeparator());\n var j = 0;\n var customArgs = [];\n var cellCol = void 0;\n for (j = 0; j < args.length; j++) {\n if (args[j].includes(':') && this_1.isCellReference(args[j])) {\n cellCol = this_1.getCellCollection(args[j]);\n if (cellCol.length > 1) {\n customArgs.push(args[j]);\n cellCol.forEach(function (cell) {\n _this.updateDependentCell(cell);\n });\n }\n else {\n customArgs.push(this_1.getValueFromArg(args[j]));\n }\n }\n else {\n customArgs.push(this_1.getValueFromArg(args[j]));\n }\n }\n args = customArgs;\n }\n else {\n var argStr = sFormula.substring(sFormula.indexOf(this_1.leftBracket) + 1, sFormula.indexOf(this_1.rightBracket));\n args = [];\n var separator = this_1.getParseArgumentSeparator();\n var parameter = '';\n var isInString = void 0;\n for (var idx = 0, len = argStr.length - 1; idx <= len; idx++) {\n if (argStr[idx] === '\"') {\n isInString = !isInString;\n }\n if (argStr[idx] === separator && !isInString) {\n args.push(parameter);\n parameter = '';\n if (idx === len) {\n args.push(parameter);\n }\n }\n else {\n parameter += argStr[idx];\n if (idx === len) {\n args.push(parameter);\n }\n }\n }\n if (!args.length) {\n args = [''];\n }\n if (nestedFormula && libFormula) {\n var formulas = ['IF', 'INDEX', 'SORT', 'T', 'EXACT',\n 'PROPER', 'DOLLAR', 'DATE', 'TEXT', 'ISNUMBER'];\n if (formulas.some(function (formula) { return formula === libFormula; })) {\n args.push('nestedFormulaTrue');\n }\n if (libFormula === 'IF') {\n args.push('nestedFormulaTrue');\n }\n if (libFormula === 'VLOOKUP' || libFormula === 'HLOOKUP') {\n var parentQIdx = parsedText.lastIndexOf('q', lastIndexOfq - 1);\n if (parentQIdx !== -1) {\n var formula_1 = parsedText.substring(parentQIdx + 1, parsedText.lastIndexOf(this_1.leftBracket, lastIndexOfq - 1));\n var conditionalFormulas = ['IF', 'IFS', 'AND', 'OR', 'NOT'];\n if (conditionalFormulas.some(function (cFormula) { return cFormula === formula_1; })) {\n args.push('conditionalFormulaTrue');\n }\n }\n }\n }\n if (isFromComputeExpression && libFormula === 'UNIQUE') {\n args.push('isComputeExp');\n }\n }\n formulatResult = isNullOrUndefined(this_1.getFunction(libFormula)) ? this_1.getErrorStrings()[CommonErrors.Name] : this_1.getFunction(libFormula).apply(void 0, args);\n if (nestedFormula) {\n fNested = this_1.processNestedFormula(parsedText, sFormula, formulatResult);\n var q = this_1.findLastIndexOfq(fNested);\n if (q === 0) {\n nestedFormula = false;\n }\n if (q === -1) {\n formulatResult = this_1.computeValue(fNested, refresh);\n }\n lastIndexOfq = i = q;\n parsedText = fNested;\n return \"continue\";\n }\n return \"break\";\n };\n var this_1 = this;\n while (i > -1) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n }\n else if (this.formulaErrorStrings.indexOf(parsedText) > -1) {\n formulatResult = parsedText;\n }\n else if (parsedText !== '' && lastIndexOfq === -1) {\n formulatResult = this.computeValue(parsedText, refresh);\n }\n }\n catch (ex) {\n var args = { message: ex.message, exception: ex, isForceCalculable: false, computeForceCalculate: false };\n this.trigger('onFailure', args);\n var errorMessage = (typeof args.exception === 'string') ? args.exception : args.message;\n formulatResult = (isNullOrUndefined(this.getErrorLine(ex)) ? '' : '#' + this.getErrorLine(ex) + ': ') + errorMessage;\n }\n return formulatResult;\n };\n /**\n * Shared implementation for SUMIF / AVERAGEIF range evaluation.\n *\n * @param {string} range - Argument tokens for the conditional aggregate.\n * @param {boolean} isAvgIf - When `true`, computes AVERAGEIF semantics; otherwise SUMIF.\n * @returns {string} - Partial aggregate values or an error string.\n * @hidden\n */\n Calculate.prototype.computeSumIfAndAvgIf = function (range, isAvgIf) {\n if (isNullOrUndefined(range) || range[0] === '' || range.length === 0) {\n return this.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var argArr = range;\n for (var i = 0; i < argArr.length; i++) {\n if (this.isCellReference(argArr[i]) && isNullOrUndefined(argArr[i].match(/[0-9]/)) &&\n argArr[i].indexOf('!') < 0) {\n var splitArray = argArr[i].split(':');\n argArr[i] = splitArray[0] + '1' + ':' + splitArray[1] + this.spreadSheetUsedRange[0];\n }\n }\n var argCount = argArr.length;\n if (argCount !== 2 && argCount !== 3 && argCount === 0) {\n return this.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (argArr[1] === '') {\n return isAvgIf ? this.getErrorStrings()[CommonErrors.DivZero] : '0';\n }\n var rangevalue = argArr[0];\n var isStringVal = argArr[1].startsWith(this.tic) && argArr[1].endsWith(this.tic);\n var criteria = this.getANDComputedValue(argArr[1]);\n if (criteria.length > 255) {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n var isAsterisk = criteria.includes('*');\n var isQuestionMark = criteria.includes('?');\n var criteriaValue = isAsterisk ? criteria.replace(/\\*/g, '').trim() : criteria;\n var isCellReferenceValue = false;\n if (!isStringVal && this.isCellReference(criteriaValue)) {\n criteriaValue = this.getValueFromArg(criteriaValue);\n isCellReferenceValue = true;\n }\n if (isAsterisk) {\n var asteriskIndex = criteria.indexOf('*');\n if (criteria[0] === '*') {\n criteriaValue = '*' + criteriaValue;\n }\n if (criteria[criteria.length - 1] === '*') {\n criteriaValue += '*';\n }\n if (asteriskIndex > 0 && asteriskIndex < criteria.length - 1) {\n criteriaValue = criteria.substring(0, asteriskIndex) + '*' + criteria.substring(asteriskIndex + 1);\n }\n }\n criteria = criteriaValue;\n var opt = this.parser.tokenEqual;\n if (criteria.startsWith('<=')) {\n opt = this.parser.tokenLessEq;\n criteria = criteria.substring(2);\n }\n else if (criteria.startsWith('>=')) {\n opt = this.parser.tokenGreaterEq;\n criteria = criteria.substring(2);\n }\n else if (criteria.startsWith('<>')) {\n opt = this.parser.tokenNotEqual;\n criteria = criteria.substring(2);\n }\n else if (criteria.startsWith('<')) {\n opt = this.parser.tokenLess;\n criteria = criteria.substring(1);\n }\n else if (criteria.startsWith('>')) {\n opt = this.parser.tokenGreater;\n criteria = criteria.substring(1);\n }\n else if (criteria.startsWith('=')) {\n opt = this.parser.tokenEqual;\n criteria = criteria.substring(1);\n }\n if ((!isStringVal && this.isCellReference(criteria) && !isCellReferenceValue) || criteria.includes(this.arithMarker) ||\n (criteria.includes(this.getParseDecimalSeparator()) && !isAsterisk && !isQuestionMark)) {\n criteria = this.getValueFromArg(criteria);\n }\n var checkCriteria = this.parseFloat(criteria);\n var criteriaRangeArray = argArr[0];\n var sumRange = this.getCellCollection(argCount > 2 ? argArr[2] : rangevalue);\n var criteriaRange = this.getCellCollection(criteriaRangeArray);\n if (sumRange[0] === '#REF!' || criteriaRange[0] === '#REF!') {\n return this.getErrorStrings()[CommonErrors.Name];\n }\n if (criteriaRange.length > sumRange.length) {\n var sumEndCol = this.colIndex(sumRange[sumRange.length - 1]) +\n this.colIndex(criteriaRange[criteriaRange.length - 1]) - this.colIndex(criteriaRange[0]);\n var sumrange = argArr[2].split(':');\n sumrange[1] = (this.convertAlpha(sumEndCol) + this.rowIndex(criteriaRange[criteriaRange.length - 1])).toString();\n sumRange = this.getCellCollection(sumrange.join(':'));\n if (sumRange[0] === '#REF!') {\n return this.getErrorStrings()[CommonErrors.Name];\n }\n }\n var result = this.getComputeSumIfValue(criteriaRange, sumRange, criteria.toLowerCase(), checkCriteria, opt, isAsterisk, isQuestionMark);\n return [result[0], result[1]];\n };\n /**\n * Shared LOOKUP evaluation helper used by library formula handlers.\n *\n * @param {string} range - LOOKUP argument tokens.\n * @returns {string} - Matched value or an error token.\n * @hidden\n */\n Calculate.prototype.computeLookup = function (range) {\n var _a, _b;\n var lookupArray;\n var matchArray;\n var lookupRange = [];\n var matchupRange = [];\n var checkCriteria = [];\n var findMaxVal = [];\n var lookupValue;\n var isArrayVector;\n var result = [];\n var argArr = range;\n var argCount = argArr.length;\n if (argCount === 1 || argCount > 3) {\n return this.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (argArr[1] === '' || argArr[2] === '') {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n lookupValue = this.getValueFromArg(argArr[0]);\n if (argArr[0].indexOf(this.tic) > -1 && argArr[0].toUpperCase().split(this.tic).join('') !== this.trueValue &&\n argArr[0].toUpperCase().split(this.tic).join('') !== this.falseValue && this.isNaN(this.parseFloat(argArr[0].split(this.tic).join('')))) {\n lookupValue = lookupValue.split(this.tic).join('');\n }\n if (this.getErrorStrings().indexOf(lookupValue) > -1) {\n return lookupValue;\n }\n var rangeSplit = argArr[1].split(':');\n if (rangeSplit.length === 2 && this.isCellReference(rangeSplit[0]) && this.isCellReference(rangeSplit[1]) && argCount === 2) {\n var index = argArr[1].indexOf(':');\n var rowIdx = this.rowIndex(this.substring(argArr[1], 0, index));\n var colIdx = this.colIndex(this.substring(argArr[1], 0, index));\n var endRowIdx = this.rowIndex(this.substring(argArr[1], index + 1, index + argArr[1].length - index - 1));\n var endColIdx = this.colIndex(this.substring(argArr[1], index + 1, index + argArr[1].length - index - 1));\n if (rowIdx > endRowIdx) {\n _a = [endRowIdx, rowIdx], rowIdx = _a[0], endRowIdx = _a[1];\n }\n if (colIdx > endColIdx) {\n _b = [endColIdx, colIdx], colIdx = _b[0], endColIdx = _b[1];\n }\n var sheetIdx = '';\n if (argArr[1].indexOf('!') === 0) {\n sheetIdx = argArr[1];\n sheetIdx = sheetIdx.replace('!', '');\n sheetIdx = sheetIdx.indexOf('!');\n sheetIdx = argArr[1].substring(0, sheetIdx + 2);\n }\n var colCount = endColIdx - colIdx + 1;\n var rowCount = endRowIdx - rowIdx + 1;\n if (rowCount > colCount || rowCount === colCount) { // Taller than Wide. vlookup\n lookupArray = sheetIdx + getAlphalabel(colIdx) + rowIdx + ':' + getAlphalabel(colIdx) + endRowIdx;\n matchArray = sheetIdx + getAlphalabel(endColIdx) + rowIdx + ':' + getAlphalabel(endColIdx) + endRowIdx;\n }\n else if (rowCount < colCount) { // Wider than Tall. hlookup\n lookupArray = sheetIdx + getAlphalabel(colIdx) + rowIdx + ':' + getAlphalabel(endColIdx) + rowIdx;\n matchArray = sheetIdx + getAlphalabel(colIdx) + endRowIdx + ':' + getAlphalabel(endColIdx) + endRowIdx;\n }\n if (rowIdx !== endRowIdx || colIdx !== endColIdx) {\n isArrayVector = true;\n }\n }\n if (isArrayVector) {\n lookupRange = this.getCellCollection(lookupArray);\n matchupRange = this.getCellCollection(matchArray);\n if (lookupRange[0] === '#REF!' || matchupRange[0] === '#REF!') {\n return this.getErrorStrings()[CommonErrors.Name];\n }\n }\n else {\n lookupRange = this.getCellCollection(argArr[1]);\n var arrvalue = argCount === 2 ? argArr[1] : argArr[2];\n matchupRange = this.getCellCollection(arrvalue);\n if (lookupRange[0] === '#REF!' || matchupRange[0] === '#REF!') {\n return this.getErrorStrings()[CommonErrors.Name];\n }\n var lookupIndex = getRangeIndexes(argArr[1]);\n var matchIndex = getRangeIndexes(arrvalue);\n var isValidLookup = lookupIndex[1] === lookupIndex[3] ? true : lookupIndex[0] === lookupIndex[2];\n var isValidMatch = matchIndex[1] === matchIndex[3] ? true : matchIndex[0] === matchIndex[2];\n if (!isValidLookup || !isValidMatch) {\n return this.getErrorStrings()[CommonErrors.NA];\n }\n }\n for (var i = 0; i < lookupRange.length; i++) {\n findMaxVal.push(this.getValueFromArg(lookupRange[i]).split(this.tic).join(''));\n }\n var num = findMaxVal.map(function (value) { return value === '' ? NaN : Number(value); }).sort(function (a, b) { return a - b; });\n var maxVal = num[num.length - 1];\n var minVal = num[0];\n var lookupVal = this.parseFloat(lookupValue);\n if (!this.isNaN(lookupVal)) {\n for (var a = 0; a < num.length; a++) {\n checkCriteria[a] = num[a].toString().split(this.tic).join('');\n if (!isNullOrUndefined(matchupRange[a]) && checkCriteria[a] !== '' && lookupVal === this.parseFloat(checkCriteria[a])) {\n result.push(this.getValueFromArg(matchupRange[a]).split(this.tic).join('') || '0');\n }\n }\n }\n else {\n for (var j = 0; j < lookupRange.length; j++) {\n checkCriteria[j] = this.getValueFromArg(lookupRange[j]).split(this.tic).join('');\n if (!isNullOrUndefined(matchupRange[j]) && lookupValue !== '' && checkCriteria[j] !== '') {\n if (lookupValue.toUpperCase() === checkCriteria[j].toUpperCase()) {\n result.push(this.getValueFromArg(matchupRange[j]).split(this.tic).join('') || '0');\n }\n else if (lookupValue.indexOf('*') > -1 || lookupValue.indexOf('?') > -1) {\n var criteriaValue = lookupValue;\n if (lookupValue.indexOf('*') > -1) {\n criteriaValue = criteriaValue.replace(/\\*/g, '').trim();\n if (this.isCellReference(criteriaValue)) {\n criteriaValue = this.getValueFromArg(criteriaValue);\n }\n var asteriskIndex = lookupValue.indexOf('*');\n if (lookupValue[0] === '*') {\n criteriaValue = '*' + criteriaValue;\n }\n if (lookupValue[lookupValue.length - 1] === '*') {\n criteriaValue += '*';\n }\n if (asteriskIndex > 0 && asteriskIndex < lookupValue.length - 1) {\n criteriaValue = lookupValue.substring(0, asteriskIndex) + '*' + lookupValue.substring(asteriskIndex + 1);\n }\n }\n var stack = [];\n var wildcardResult = this.findWildCardValue(criteriaValue.toLowerCase(), checkCriteria[j].toLowerCase());\n stack.push(wildcardResult);\n stack.push(lookupValue);\n if (this.processLogical(stack, 'equal') === this.trueValue) {\n result.push(this.getValueFromArg(matchupRange[j]).split(this.tic).join('') || '0');\n }\n }\n }\n }\n }\n if (result.length > 0) {\n return result[result.length - 1];\n }\n if (lookupVal > maxVal && !isNullOrUndefined(matchupRange[lookupRange.length - 1])) {\n return this.getValueFromArg(matchupRange[lookupRange.length - 1]).split(this.tic).join('') || '0';\n }\n else if (lookupVal < minVal) {\n return this.getErrorStrings()[CommonErrors.NA];\n }\n if (findMaxVal.indexOf(lookupValue.split(this.tic).join('')) < 0 && lookupValue !== this.trueValue && lookupValue !== this.falseValue) {\n if (!this.isNaN(lookupVal) && !this.isNaN(maxVal) && !this.isNaN(minVal)) {\n var temp = [];\n for (var b = 0; b < num.length; b++) {\n if (lookupVal > num[b]) {\n temp.push(num[b]);\n }\n }\n var index = temp.length - 1;\n if (!isNullOrUndefined(matchupRange[index]) && index >= 0) {\n return this.getValueFromArg(matchupRange[index]).split(this.tic).join('') || '0';\n }\n }\n else if (this.isNaN(lookupVal) && lookupValue !== '' && /^[a-zA-Z!@#$%^&*()_+{}[\\]:;<>,.?~\\\\/-]/.test(lookupValue)) {\n var str = findMaxVal.sort();\n var index = this.findClosestMatch(lookupValue.split(this.tic).join(''), str);\n if (!isNullOrUndefined(matchupRange[index]) && index >= 0) {\n return this.getValueFromArg(matchupRange[index]).split(this.tic).join('') || '0';\n }\n }\n }\n return this.getErrorStrings()[CommonErrors.NA];\n };\n /**\n * Shared VLOOKUP / HLOOKUP evaluation helper.\n *\n * @param {string} range - Lookup argument tokens.\n * @param {boolean} isVlookup - When `true` (default), uses VLOOKUP orientation; otherwise HLOOKUP.\n * @returns {string} - Matched value or an error token.\n * @hidden\n */\n Calculate.prototype.computeVHLookup = function (range, isVlookup) {\n var _this = this;\n var _a, _b;\n var argArr = range;\n var isConditionalFormula;\n if (argArr && argArr[argArr.length - 1] === 'conditionalFormulaTrue') {\n isConditionalFormula = true;\n argArr.pop();\n }\n if (isNullOrUndefined(argArr) || argArr.length < 3 || argArr.length > 4) {\n return this.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n if (argArr[1] === '') {\n return this.getErrorStrings()[CommonErrors.NA];\n }\n var lookupValue = this.getValueFromArg(argArr[0]);\n if (lookupValue) {\n if (lookupValue.includes(this.tic)) {\n var lookupVal = lookupValue.split(this.tic).join('');\n if (lookupVal && !this.isNumber(lookupVal)) {\n var lookupValUpper = lookupVal.toUpperCase();\n if (lookupValUpper !== this.trueValue && lookupValUpper !== this.falseValue) {\n lookupValue = lookupVal;\n }\n }\n }\n }\n else {\n lookupValue = '0';\n }\n var errorStrings = this.getErrorStrings();\n if (errorStrings.indexOf(lookupValue) > -1) {\n return lookupValue;\n }\n var colIdxVal = (this.getValueFromArg(argArr[2]) || '0').split(this.tic).join('').toUpperCase();\n var colNumIdx = this.parseFloat(colIdxVal === this.trueValue ? '1' : colIdxVal);\n if (colNumIdx < 1) {\n return errorStrings[CommonErrors.Value];\n }\n var isExactMatchLookup;\n if (argArr[3]) {\n argArr[3] = this.getValueFromArg(argArr[3]).split(this.tic).join('');\n if (errorStrings.indexOf(argArr[3]) > -1) {\n return argArr[3];\n }\n var rangeLookup = argArr[3].toUpperCase();\n if (rangeLookup === this.falseValue || argArr[3] === '0') {\n isExactMatchLookup = true;\n }\n else if (!(rangeLookup === this.trueValue || argArr[3] === '1')) {\n return errorStrings[CommonErrors.Value];\n }\n }\n var rangeArr = argArr[1].split(':');\n var startIdx;\n var endIdx;\n var idx;\n var grid;\n var getLookupRangeValue;\n var getMatchRangeValue;\n if (this.isCellReference(rangeArr[0]) && this.isCellReference(rangeArr[1])) {\n var rowIdx_1 = this.rowIndex(rangeArr[0]);\n var colIdx_1 = this.colIndex(rangeArr[0]);\n var endRowIdx = this.rowIndex(rangeArr[1]);\n var endColIdx = this.colIndex(rangeArr[1]);\n if (rowIdx_1 > endRowIdx) {\n _a = [endRowIdx, rowIdx_1], rowIdx_1 = _a[0], endRowIdx = _a[1];\n }\n if (colIdx_1 > endColIdx) {\n _b = [endColIdx, colIdx_1], colIdx_1 = _b[0], endColIdx = _b[1];\n }\n if (!(rowIdx_1 > 0 && endRowIdx <= maxRows && colIdx_1 > 0 && endColIdx <= maxCols)) {\n return this.getErrorStrings()[CommonErrors.Name];\n }\n grid = this.grid;\n var sheetToken_1 = '';\n var family = this.getSheetFamilyItem(grid);\n if (argArr[1].startsWith('!')) {\n sheetToken_1 = argArr[1].substring(0, argArr[1].replace('!', '').indexOf('!') + 2);\n if (family.tokenToParentObject !== null) {\n this.grid = family.tokenToParentObject.get(sheetToken_1);\n }\n }\n else if (family.parentObjectToToken !== null) {\n sheetToken_1 = family.parentObjectToToken.get(grid);\n }\n var sheetId = this.getSheetId(this.grid);\n var sheetInfo = this.getHostSheetInfo();\n if (getSheetIndexByName('Sheet' + sheetId, sheetInfo) === -1) {\n this.grid = grid;\n return errorStrings[CommonErrors.Ref];\n }\n var getCellValue_1 = this.getCellValueFn(grid, this.cell, sheetId, true);\n if (isVlookup) {\n var matchIndex_1 = colIdx_1 + colNumIdx - 1;\n if (matchIndex_1 > endColIdx) {\n return errorStrings[CommonErrors.Ref];\n }\n startIdx = rowIdx_1;\n endIdx = endRowIdx;\n var lookupColText_1 = sheetToken_1 + getAlphalabel(colIdx_1);\n getLookupRangeValue = function (idx) {\n return getCellValue_1(idx, colIdx_1, lookupColText_1 + idx);\n };\n var matchColText_1 = sheetToken_1 + getAlphalabel(matchIndex_1);\n getMatchRangeValue = function () {\n return getCellValue_1(idx, matchIndex_1, matchColText_1 + idx) || (isConditionalFormula ? '\"\"' : '0');\n };\n }\n else {\n var matchIndex_2 = rowIdx_1 + colNumIdx - 1;\n if (matchIndex_2 > endRowIdx) {\n return errorStrings[CommonErrors.Ref];\n }\n startIdx = colIdx_1;\n endIdx = endColIdx;\n var matchColText_2;\n getLookupRangeValue = function (idx) {\n matchColText_2 = sheetToken_1 + getAlphalabel(idx);\n return getCellValue_1(rowIdx_1, idx, matchColText_2 + rowIdx_1);\n };\n getMatchRangeValue = function () {\n return getCellValue_1(matchIndex_2, idx, matchColText_2 + matchIndex_2) || (isConditionalFormula ? '\"\"' : '0');\n };\n }\n }\n else {\n return errorStrings[CommonErrors.Value];\n }\n var result;\n var lookupRangeVal;\n var matchedResult = [];\n if (isExactMatchLookup) {\n var isMatchFound = void 0;\n if (this.isNumber(lookupValue)) {\n var lookupNumVal_1 = this.parseFloat(lookupValue);\n isMatchFound = function () {\n return lookupNumVal_1 === _this.parseFloat(lookupRangeVal);\n };\n }\n else if (lookupValue.includes('*') || lookupValue.includes('?')) {\n var criteriaValue_1 = lookupValue;\n var asteriskIndex = lookupValue.indexOf('*');\n if (asteriskIndex > -1) {\n criteriaValue_1 = criteriaValue_1.replace(/\\*/g, '').trim();\n if (this.isCellReference(criteriaValue_1)) {\n criteriaValue_1 = this.getValueFromArg(criteriaValue_1);\n }\n if (asteriskIndex === 0) {\n criteriaValue_1 = '*' + criteriaValue_1;\n }\n else if (asteriskIndex === lookupValue.length - 1) {\n criteriaValue_1 += '*';\n }\n else {\n criteriaValue_1 = lookupValue.substring(0, asteriskIndex) + '*' + lookupValue.substring(asteriskIndex + 1);\n }\n }\n criteriaValue_1 = criteriaValue_1.toLowerCase();\n isMatchFound = function () {\n return _this.processLogical([_this.findWildCardValue(criteriaValue_1, lookupRangeVal.toLowerCase()), lookupValue], 'equal') === _this.trueValue;\n };\n }\n else {\n var lookupValUpper_1 = lookupValue.toUpperCase();\n isMatchFound = function () {\n return lookupValUpper_1 === lookupRangeVal.toUpperCase();\n };\n }\n for (idx = startIdx; idx <= endIdx; idx++) {\n lookupRangeVal = getLookupRangeValue(idx);\n if (lookupRangeVal && isMatchFound()) {\n matchedResult.push(getMatchRangeValue());\n }\n }\n result = matchedResult.length ? matchedResult[0] : errorStrings[CommonErrors.NA];\n }\n else if (lookupValue.indexOf('*') > -1 || lookupValue.indexOf('?') > -1) {\n result = errorStrings[CommonErrors.NA];\n }\n else {\n var matchVal_1;\n var checkMatchFn = void 0;\n if (this.isNumber(lookupValue)) {\n var lookupNumVal_2 = this.parseFloat(lookupValue);\n var comparer_1 = createSortComparer('');\n checkMatchFn = function () {\n matchVal_1 = comparer_1(_this.isNumber(lookupRangeVal) ? _this.parseFloat(lookupRangeVal) : lookupRangeVal || null, lookupNumVal_2);\n };\n }\n else {\n var collator_1 = new Intl.Collator(this.parentObject.locale || 'en-US', { sensitivity: 'base' });\n checkMatchFn = function () {\n matchVal_1 = (!lookupRangeVal || _this.isNumber(lookupRangeVal)) ? null : collator_1.compare(lookupRangeVal, lookupValue);\n };\n }\n var skipCheck = void 0;\n for (idx = startIdx; idx <= endIdx; idx++) {\n lookupRangeVal = getLookupRangeValue(idx);\n if (!skipCheck) {\n checkMatchFn();\n if (matchVal_1 === 0) {\n matchedResult.push(getMatchRangeValue());\n }\n else if (matchVal_1 < 0) {\n matchedResult.push(getMatchRangeValue());\n }\n else if (matchVal_1 > 0 && matchedResult.length) {\n skipCheck = true;\n }\n }\n }\n result = matchedResult.length ? matchedResult[matchedResult.length - 1] : errorStrings[CommonErrors.NA];\n }\n this.grid = grid;\n if (isConditionalFormula && typeof result === 'string' &&\n result.indexOf(this.getParseArgumentSeparator()) !== -1) {\n return this.tic + result + this.tic;\n }\n return result;\n };\n Calculate.prototype.findClosestMatch = function (searchValue, sortedArray) {\n var start = 0;\n var end = sortedArray.length - 1;\n while (start <= end) {\n var mid = Math.floor((start + end) / 2);\n var midValue = sortedArray[mid];\n var compareResult = this.compareStrings(searchValue.toLowerCase(), midValue.toLowerCase());\n if (compareResult === 0) {\n return mid;\n }\n else if (compareResult === 1) {\n start = mid + 1;\n }\n else {\n end = mid - 1;\n }\n }\n // If no exact match is found, return the closest match based on the entire string\n for (var i = start - 1; i >= 0; i--) {\n if (this.compareStrings(searchValue.toLowerCase(), sortedArray[i].toLowerCase()) !== -1) {\n return i;\n }\n }\n return -1; // No match found\n };\n Calculate.prototype.compareStrings = function (str1, str2) {\n var minLength = Math.min(str1.length, str2.length);\n for (var i = 0; i < minLength; i++) {\n var charCode1 = str1.charCodeAt(i);\n var charCode2 = str2.charCodeAt(i);\n if (charCode1 < charCode2) {\n return -1;\n }\n else if (charCode1 > charCode2) {\n return 1;\n }\n }\n // If all characters are the same up to the length of the shorter string, compare lengths\n if (str1.length < str2.length) {\n return -1;\n }\n else if (str1.length > str2.length) {\n return 1;\n }\n else {\n return 0;\n }\n };\n /**\n * Applies Excel-style wildcard matching (`*`, `?`, `~`) between criteria and a cell value.\n *\n * @param {string | number | Object} lookVal - Criteria pattern.\n * @param {string} cellValue - Candidate cell text.\n * @returns {string | number} - Match marker or original values used by lookup/criteria helpers.\n * @hidden\n */\n Calculate.prototype.findWildCardValue = function (lookVal, cellValue) {\n var finalText = '';\n if (lookVal.indexOf('?') > -1) {\n var checkRegex = RegExp(lookVal.replace(/\\?/g, '[\\\\s\\\\S]'));\n if (cellValue.length === lookVal.length && this.isNaN(this.parseFloat(cellValue))) {\n if (cellValue.match(checkRegex)) {\n finalText = lookVal;\n }\n else {\n finalText = cellValue;\n }\n }\n else {\n finalText = cellValue;\n }\n }\n else if (lookVal.indexOf('*') > -1) {\n var index = lookVal.indexOf('*');\n var left = '';\n var right = '';\n var compRight = this.falseValue;\n var compLeft = this.falseValue;\n for (var i = index - 1; i >= 0; i--) {\n left = left + lookVal[i];\n compLeft = this.trueValue;\n }\n for (var i = index + 1; i < lookVal.length; i++) {\n right = right + lookVal[i];\n compRight = this.trueValue;\n }\n var leftVal = left === '' ? -1 : cellValue.indexOf(left.split('').reverse().join(''));\n var rightVal = right === '' ? -1 : cellValue.indexOf(right);\n if (leftVal > -1 || rightVal > -1) {\n var isLeft = left.split('').reverse().join('') === cellValue.substr(0, left.length);\n var isRight = right === cellValue.substring(cellValue.length - right.length, cellValue.length);\n if (compLeft === this.trueValue && compRight === this.trueValue &&\n this.isNaN(this.parseFloat(left)) && this.isNaN(this.parseFloat(right))) {\n finalText = isLeft && isRight ? lookVal : cellValue;\n }\n else if (compLeft === this.trueValue && this.isNaN(this.parseFloat(left))) {\n finalText = isLeft ? lookVal : cellValue;\n }\n else if (compRight === this.trueValue && this.isNaN(this.parseFloat(right))) {\n finalText = isRight ? lookVal : cellValue;\n }\n }\n else {\n if (lookVal.startsWith('*') && lookVal.endsWith('*')) {\n var trimmedVal = lookVal.slice(1, -1);\n if (trimmedVal !== '' && cellValue.includes(trimmedVal) && this.isNaN(this.parseFloat(trimmedVal))) {\n cellValue = lookVal;\n }\n }\n finalText = cellValue;\n }\n }\n return finalText;\n };\n /**\n * Evaluates criteria against a criteria range and aggregates matching sum-range values.\n *\n * @param {string} criteriaRange - Criteria cells.\n * @param {string} sumRange - Values to aggregate for matches.\n * @param {string} criteria - Criteria expression.\n * @returns {string | number} - Aggregate result details used by SUMIF-family formulas.\n * @hidden\n */\n Calculate.prototype.getComputeSumIfValue = function (criteriaRange, sumRange, criteria, checkCriteria, op, isAsterisk, isQuestionMark) {\n var sum = 0;\n var count = 0;\n // const isFirst: boolean = isAsterisk && criteria && criteria[0] === '*';\n switch (op) {\n case this.parser.tokenEqual:\n {\n var criteriaValue = isAsterisk ? criteria.replace(/\\*/g, '') : criteria;\n for (var i = 0; i < criteriaRange.length; i++) {\n var sumVal = this.getValueFromRange(sumRange, i);\n var value = this.getValueFromArg(criteriaRange[i].split(this.tic).join('')).toLowerCase();\n var val = this.parseFloat(value);\n if (value === criteria && val === checkCriteria) {\n var value1 = this.getValueFromArg(sumRange[i].split(this.tic).join(''));\n var val1 = this.parseFloat(value1);\n if (!this.isNaN(val1)) {\n sum = sum + val1;\n count = count + 1;\n }\n }\n else if (value === criteria) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n else if (isAsterisk && criteriaValue && value && this.isNaN(this.parseFloat(value))) {\n var asteriskIndex = criteria.indexOf('*');\n if (criteria[0] === '*' && criteriaValue.length <= value.length && criteriaValue === value.slice(value.length - criteriaValue.length, value.length)) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n else if (criteria[criteria.length - 1] === '*' && criteriaValue.length <= value.length && criteriaValue === value.slice(0, criteriaValue.length)) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n else if (asteriskIndex > -1 && value.startsWith(criteria.substr(0, asteriskIndex))\n && value.endsWith(criteria.substr(asteriskIndex + 1))) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n }\n else if (isAsterisk && !criteriaValue && value && this.isNaN(this.parseFloat(value))) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n else if (isQuestionMark && criteriaValue && value && this.isNaN(this.parseFloat(value))) {\n var checkRegex = RegExp(criteriaValue.replace(/\\?/g, '[\\\\s\\\\S]'));\n if (value.length === criteria.length && value.match(checkRegex)) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n }\n }\n }\n break;\n case this.parser.tokenLess:\n {\n for (var i = 0; i < criteriaRange.length; i++) {\n var value = this.getValueFromArg(criteriaRange[i].split(this.tic).join(''));\n var val = this.parseFloat(value);\n if (val < checkCriteria) {\n var value1 = this.getValueFromArg(sumRange[i].split(this.tic).join(''));\n var val1 = this.parseFloat(value1);\n if (!this.isNaN(val1)) {\n sum = sum + val1;\n count = count + 1;\n }\n }\n }\n }\n break;\n case this.parser.tokenGreater:\n {\n for (var i = 0; i < criteriaRange.length; i++) {\n var value = this.getValueFromArg(criteriaRange[i].split(this.tic).join(''));\n var val = this.parseFloat(value);\n if (val > checkCriteria) {\n var value1 = this.getValueFromArg(sumRange[i].split(this.tic).join(''));\n var val1 = this.parseFloat(value1);\n if (!this.isNaN(val1)) {\n sum = sum + val1;\n count = count + 1;\n }\n }\n }\n }\n break;\n case this.parser.tokenLessEq:\n {\n for (var i = 0; i < criteriaRange.length; i++) {\n var value = this.getValueFromArg(criteriaRange[i].split(this.tic).join(''));\n var val = this.parseFloat(value);\n if (val <= checkCriteria) {\n var value1 = this.getValueFromArg(sumRange[i].split(this.tic).join(''));\n var val1 = this.parseFloat(value1);\n if (!this.isNaN(val1)) {\n sum = sum + val1;\n count = count + 1;\n }\n }\n }\n }\n break;\n case this.parser.tokenGreaterEq:\n {\n for (var i = 0; i < criteriaRange.length; i++) {\n var value = this.getValueFromArg(criteriaRange[i].split(this.tic).join(''));\n var val = this.parseFloat(value);\n if (val >= checkCriteria) {\n var value1 = this.getValueFromArg(sumRange[i].split(this.tic).join(''));\n var val1 = this.parseFloat(value1);\n if (!this.isNaN(val1)) {\n sum = sum + val1;\n count = count + 1;\n }\n }\n }\n }\n break;\n case this.parser.tokenNotEqual:\n {\n var criteriaValue = isAsterisk ? criteria.replace(/\\*/g, '') : criteria;\n for (var i = 0; i < criteriaRange.length; i++) {\n var sumVal = this.getValueFromRange(sumRange, i);\n var value = this.getValueFromArg(criteriaRange[i].split(this.tic).join('')).toLowerCase();\n var val = this.parseFloat(value);\n if (value !== criteria && val !== checkCriteria && !isAsterisk && !isQuestionMark) {\n var value1 = this.getValueFromArg(sumRange[i].split(this.tic).join(''));\n var val1 = this.parseFloat(value1);\n if (!this.isNaN(val1)) {\n sum = sum + val1;\n count = count + 1;\n }\n }\n else if (isAsterisk && criteriaValue && value && this.isNaN(this.parseFloat(value))) {\n var asteriskIndex = criteria.indexOf('*');\n if (criteria[0] === '*' && criteriaValue.length <= value.length && criteriaValue !== value.slice(value.length - criteriaValue.length, value.length)) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n else if (criteria[criteria.length - 1] === '*' && criteriaValue.length <= value.length && criteriaValue !== value.slice(0, criteriaValue.length)) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n else if (asteriskIndex > -1 && !value.startsWith(criteria.substr(0, asteriskIndex))\n || !value.endsWith(criteria.substr(asteriskIndex + 1))) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n }\n else if (isAsterisk && !criteriaValue && !this.isNaN(this.parseFloat(value))) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n else if (isQuestionMark && criteriaValue && value && this.isNaN(this.parseFloat(value))) {\n var checkRegex = RegExp(criteriaValue.replace(/\\?/g, '[\\\\s\\\\S]'));\n if (value.length !== criteria.length || !value.match(checkRegex)) {\n if (!this.isNaN(sumVal)) {\n sum = sum + sumVal;\n count = count + 1;\n }\n }\n }\n }\n }\n break;\n }\n return [sum, count];\n };\n Calculate.prototype.getValueFromRange = function (sumRange, index) {\n var sumRangeVal = sumRange[index];\n sumRangeVal = this.getValueFromArg(sumRangeVal);\n return this.parseFloat(sumRangeVal.toString());\n };\n /**\n * Evaluates AND / OR / NOT over argument tokens.\n *\n * @param {string[]} args - Logical argument tokens.\n * @param {string} op - Operation name (`\"and\"`, `\"or\"`, or `\"not\"`).\n * @returns {string} - `\"TRUE\"`, `\"FALSE\"`, or an error token.\n * @hidden\n */\n Calculate.prototype.computeAndOrNot = function (args, op) {\n var _this = this;\n var isAnd = op === 'and';\n var isOr = op === 'or';\n var isNot = op === 'not';\n var result = (isAnd || isNot) ? true : false;\n var value;\n var parseVal;\n var resultant = [];\n var ranges = args;\n for (var i = 0; i < ranges.length; i++) {\n if (ranges[i] === (this.tic)) {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n ranges[i] = ranges[i].startsWith('n') ? ranges[i].slice(1) : ranges[i];\n if (this.isCellReference(ranges[i])) {\n var cells = this.getCellCollection(ranges[i]);\n for (var j = 0; j < cells.length; j++) {\n if (this.getErrorStrings().indexOf(cells[j]) > -1) {\n return cells[j];\n }\n else if (cells[j][0] === this.tic) {\n return this.getErrorStrings()[CommonErrors.Name];\n }\n value = this.getValueFromArg(cells[j]);\n if (this.getErrorStrings().indexOf(value) > -1) {\n return value;\n }\n parseVal = this.parseFloat(value);\n if (value === this.falseValue || (value !== '' && parseVal === 0) || (isNot && value === '')) {\n resultant.push(this.falseValue);\n }\n else if (value === this.trueValue || !isNaN(parseVal) && value !== '') {\n resultant.push(this.trueValue);\n }\n else if (value === '' || isNaN(parseVal)) {\n resultant.push(this.getErrorStrings()[CommonErrors.Value]);\n }\n }\n }\n else {\n value = this.getValueFromArg(ranges[i]).toUpperCase();\n if (this.getErrorStrings().indexOf(value) > -1) {\n return value;\n }\n parseVal = this.parseFloat(value);\n value = value.split(this.tic).join('');\n if (value === this.falseValue || ranges[i] === '' || (value !== '' && parseVal === 0)) {\n resultant.push(this.falseValue);\n }\n else if (value === this.trueValue || !isNaN(parseVal) && value !== '') {\n resultant.push(this.trueValue);\n }\n else if (value === '' || isNaN(parseVal)) {\n resultant.push(this.getErrorStrings()[CommonErrors.Value]);\n }\n }\n }\n var containsOnlyValueError = resultant.every(function (item) { return item === _this.getErrorStrings()[CommonErrors.Value]; });\n if (containsOnlyValueError) {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n for (var j = 0; j < resultant.length; j++) {\n if ((isAnd || isNot) && resultant[j] === this.falseValue) {\n result = false;\n break;\n }\n if (isOr && resultant[j] === this.trueValue) {\n result = true;\n break;\n }\n }\n result = isNot ? !result : result;\n return result ? this.trueValue : this.falseValue;\n };\n /**\n * @hidden\n * @param {string} text - specify the text\n * @returns {string} - to strip out the tic from the formula arguments.\n */\n // To strip out the tic from the formula arguments.\n /**\n * Strips surrounding formula string quotes (`\"...`) when present.\n *\n * @param {string} text - Possibly quoted text.\n * @returns {string} - Unquoted text.\n * @hidden\n */\n Calculate.prototype.removeTics = function (text) {\n if (text.length > 1 && text[0] === this.tic[0] && text[text.length - 1] === this.tic[0]) {\n text = this.substring(text, 1, text.length - 2);\n }\n return text;\n };\n /**\n * Returns the top-left cell address from a range string.\n *\n * @param {string} range - Range such as `A1:B2`.\n * @returns {string | number} - Starting cell address.\n * @hidden\n */\n Calculate.prototype.getCellFrom = function (range) {\n var cellRange = '';\n var cells = range.indexOf(':') > -1 ? range.split(':') : [range];\n //this.getCellsFromArgs(range);\n var last = cells.length - 1;\n var r1 = this.rowIndex(cells[0]);\n var x;\n if (r1 === this.rowIndex(cells[last])) {\n var c1 = this.colIndex(cells[0]);\n var c2 = this.colIndex(cells[last]);\n var c = this.colIndex(this.cell);\n if (c >= c1 && c <= c2) {\n cellRange = getAlphalabel(c).toString() + r1.toString();\n }\n }\n else if (this.colIndex(cells[0]) === this.colIndex(cells[last])) {\n x = this.colIndex(cells[0]);\n var r2 = this.rowIndex(cells[last]);\n var r = this.rowIndex(this.cell);\n if (r >= r1 && r <= r2) {\n cellRange = getAlphalabel(x).toString() + r.toString();\n }\n }\n return cellRange;\n };\n Calculate.prototype.computeValue = function (pFormula, refresh, isIfError) {\n try {\n var stack = [];\n var i = 0;\n var sheet = '';\n stack.length = 0;\n var emptyStack = [];\n var decimalSep = this.getParseDecimalSeparator();\n while (i < pFormula.length) {\n var uFound = pFormula[i] === 'u'; // for 3*-2\n if (uFound) {\n i = i + 1; // for the cell reference cases, like A1*-A2.\n }\n if (pFormula[i] === this.arithMarker) {\n i = i + 1;\n continue;\n }\n else if (this.isDigit(pFormula[i])) {\n var s = '';\n while (i < pFormula.length && (this.isDigit(pFormula[i]) ||\n pFormula[i] === decimalSep)) {\n s += pFormula[i] === decimalSep ? '.' : pFormula[i];\n i = i + 1;\n }\n stack.push(s);\n if (!pFormula[i]) {\n return stack.toString();\n }\n }\n if (pFormula[i] === this.sheetToken) {\n sheet = pFormula[i];\n i = i + 1;\n while (i < pFormula.length && pFormula[i] !== this.sheetToken) {\n sheet = sheet + pFormula[i];\n i = i + 1;\n }\n if (i < pFormula.length) {\n sheet = sheet + pFormula[i];\n i = i + 1;\n }\n }\n else if (this.isUpperChar(pFormula[i])) {\n var s = '';\n var textName = '';\n while (i < pFormula.length && this.isUpperChar(pFormula[i])) {\n var char = pFormula[i];\n s = s + char;\n i = i + 1;\n }\n while (i < pFormula.length && this.isDigit(pFormula[i])) {\n var digit = pFormula[i];\n s = s + digit;\n i = i + 1;\n }\n if (i < pFormula.length && pFormula[i] === ':') {\n s = s + pFormula[i];\n i = i + 1;\n if (i < pFormula.length && pFormula[i] === this.sheetToken) {\n s = s + pFormula[i];\n i = i + 1;\n while (i < pFormula.length && pFormula[i] !== this.sheetToken) {\n s = s + pFormula[i];\n i = i + 1;\n }\n }\n while (i < pFormula.length && this.isUpperChar(pFormula[i])) {\n s = s + pFormula[i];\n i = i + 1;\n }\n while (i < pFormula.length && this.isDigit(pFormula[i])) {\n s = s + pFormula[i];\n i = i + 1;\n }\n s = sheet + this.getCellFrom(s);\n }\n else {\n s = sheet + s;\n }\n var parentCellValue = this.getParentObjectCellValue(s, refresh);\n textName = isNullOrUndefined(parentCellValue) ? '' : parentCellValue.toString();\n sheet = '';\n if (typeof textName === 'string' && this.getErrorStrings().indexOf(textName) > -1) {\n return textName;\n }\n if (uFound) {\n if (!this.isNaN(this.parseFloat(textName))) {\n textName = (-(this.parseFloat(textName))).toString();\n }\n else {\n textName = '-' + textName;\n }\n }\n stack.push(textName);\n if (textName === '') {\n emptyStack[stack.length - 1] = '0';\n }\n }\n else if (pFormula[i] === 'q') {\n var leftIdx = pFormula.substring(i + 1).indexOf(this.leftBracket);\n var j = pFormula.substring(i + leftIdx + 1).indexOf(this.rightBracket);\n pFormula = this.substring(pFormula, i + leftIdx + 2, j - 1);\n }\n else if (pFormula[i] === this.tic[0]) {\n var s = pFormula[i].toString();\n i = i + 1;\n var isNestedFormulaVal = pFormula[i - 2] === 'n' && pFormula[i] === this.tic[0];\n while (i < pFormula.length && pFormula[i] !== this.tic[0]) {\n s = s + pFormula[i];\n i = i + 1;\n }\n var textName = s.split(this.tic).join('');\n if (textName === this.trueValue || textName === this.falseValue ||\n (!this.isNaN(this.parseFloat(textName)) && textName !== '')) {\n stack.push(this.tic + textName + this.tic);\n }\n else {\n stack.push(textName);\n if (textName === '' && isNestedFormulaVal) {\n emptyStack[stack.length - 1] = '0';\n }\n }\n i = i + 1;\n }\n else if (pFormula[i] === '%' && stack.length > 0) {\n var stackValue = stack[0];\n var value = this.parseFloat(stackValue);\n if (!this.isNaN(value)) {\n stack.pop();\n stack.push((value / 100).toString());\n }\n i = i + 1;\n }\n else if ((pFormula.substring(i)).indexOf(this.trueValue) === 0) {\n stack.push(this.trueValue);\n i += this.trueValue.length;\n }\n else if (pFormula.substring(i).indexOf(this.falseValue) === 0) {\n stack.push(this.falseValue);\n i += this.falseValue.length;\n }\n else if (pFormula[i] === this.tic[0] || pFormula[i] === '|') {\n var s = pFormula[i].toString();\n i++;\n while (i < pFormula.length && pFormula[i] !== this.tic[0]) {\n s = s + pFormula[i];\n i = i + 1;\n }\n stack.push(s + this.tic);\n i += 1;\n }\n else {\n if (pFormula[i] === ' ' && i < pFormula.length - 1) {\n i += 1;\n continue;\n }\n switch (pFormula[i]) {\n case '#':\n {\n var errIndex = 0;\n if (this.getErrorStrings().indexOf(pFormula.substring(i)) > -1) {\n if (pFormula.indexOf('!') === -1 || pFormula.substring(i).indexOf('!') === -1) {\n errIndex = pFormula.indexOf('#N/A') > -1 ? (pFormula.indexOf('#N/A') + 4 + i) : pFormula.indexOf('?') + 1 + i;\n }\n else {\n errIndex = pFormula.indexOf('!') + 1 + i;\n }\n stack.push(this.substring(pFormula, i, errIndex - i));\n }\n else {\n errIndex = i + 1;\n stack.push(this.substring(pFormula, i, errIndex - i));\n }\n i = errIndex;\n }\n break;\n case 'n':\n {\n i = i + 1;\n var s = '';\n if (pFormula[i] === 'n') {\n continue;\n }\n if (pFormula.substring(i).indexOf('Infinity') === 0) {\n s = 'Infinity';\n i += s.length;\n }\n else {\n if (pFormula[i] === 'u' || uFound || pFormula[i] === '-') {\n s = '-';\n if (!uFound) {\n i = i + 1;\n }\n else {\n uFound = false;\n }\n }\n while (i < pFormula.length && (this.isDigit(pFormula[i]) ||\n (pFormula[i] === decimalSep || pFormula[i] === '.'))) {\n s += pFormula[i] === decimalSep ? '.' : pFormula[i];\n i = i + 1;\n }\n if (i < pFormula.length && pFormula[i] === '%') {\n i = i + 1;\n if (s === '') {\n if (stack.length > 0) {\n var stackValue = stack[0];\n var value = this.parseFloat(stackValue);\n if (!this.isNaN(value)) {\n stack.pop();\n stack.push((value / 100).toString());\n }\n }\n }\n else {\n s = (this.parseFloat(s) / 100).toString();\n }\n }\n }\n if (s) {\n stack.push(s);\n }\n }\n break;\n case this.parser.tokenAdd:\n {\n this.getValArithmetic(stack, 'add', isIfError);\n i = i + 1;\n }\n break;\n case this.parser.tokenSubtract:\n {\n this.getValArithmetic(stack, 'sub', isIfError);\n i = i + 1;\n }\n break;\n case this.parser.tokenMultiply:\n {\n this.getValArithmetic(stack, 'mul', isIfError);\n i = i + 1;\n }\n break;\n case this.parser.tokenDivide:\n {\n this.getValArithmetic(stack, 'div', isIfError);\n i = i + 1;\n }\n break;\n case this.parser.tokenLess:\n {\n this.processLogical(stack, 'less');\n i = i + 1;\n }\n break;\n case this.parser.tokenGreater:\n {\n this.processLogical(stack, 'greater');\n i = i + 1;\n }\n break;\n case this.parser.tokenGreaterEq:\n {\n this.processLogical(stack, 'greaterEq');\n i = i + 1;\n }\n break;\n case this.parser.tokenLessEq:\n {\n this.processLogical(stack, 'lessEq');\n i = i + 1;\n }\n break;\n case this.parser.tokenNotEqual:\n {\n this.processLogical(stack, 'notEq', emptyStack);\n emptyStack.length = 0;\n i = i + 1;\n }\n break;\n case this.parser.tokenOr:\n {\n this.processLogical(stack, 'or');\n i = i + 1;\n }\n break;\n case this.parser.tokenAnd:\n {\n this.processLogical(stack, 'and');\n i = i + 1;\n }\n break;\n case this.parser.tokenEqual:\n {\n this.processLogical(stack, 'equal', emptyStack);\n emptyStack.length = 0;\n i = i + 1;\n }\n break;\n default: {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n }\n }\n }\n if (stack.length === 0) {\n return '';\n }\n else {\n var s = '';\n var countValue = stack.length;\n while (countValue > 0) {\n var sCheck = stack.pop();\n if (this.getErrorStrings().indexOf(sCheck) > -1) {\n return sCheck;\n }\n else {\n s = sCheck + s;\n if (s === '' && this.isCellReference(pFormula) &&\n this.getTreatEmptyStringAsZero()) {\n return '0';\n }\n countValue--;\n }\n }\n return s;\n }\n }\n catch (ex) {\n if (this.getErrorStrings().indexOf(ex) > -1 || this.formulaErrorStrings.indexOf(ex) > -1) {\n throw ex;\n }\n throw new FormulaError(this.formulaErrorStrings[FormulasErrorsStrings.InvalidExpression]);\n }\n };\n Calculate.prototype.getValArithmetic = function (stack, operator, isIfError) {\n var isErrorString = false;\n var num1 = stack.pop();\n var decimalCount1 = num1.indexOf('.') !== -1 ? num1.split('.')[1].length : 0;\n var factor1 = Math.pow(10, decimalCount1);\n var num2 = stack.pop();\n var decimalCount2 = num2.indexOf('.') !== -1 ? num2.split('.')[1].length : 0;\n var factor2 = Math.pow(10, decimalCount2);\n var bigFactor = factor1 >= factor2 ? factor1 : factor2;\n var factors = factor1 * factor2;\n num1 = num1 === this.trueValue ? '1' : (num1 === this.falseValue ? '0' : num1);\n num1 = num1 === '' ? '0' : (this.getErrorStrings().indexOf(num1.toString()) < 0 ? this.parseFloat(num1 + '').toString() : num1);\n var num = Number(num1);\n if (isNaN(num) && !isIfError) {\n isErrorString = true;\n if (num1 === this.getErrorStrings()[CommonErrors.DivZero]) {\n stack.push(this.getErrorStrings()[CommonErrors.DivZero]);\n }\n else {\n stack.push(this.getErrorStrings()[CommonErrors.Value]);\n }\n }\n num2 = num2 === this.trueValue ? '1' : (num2 === this.falseValue ? '0' : num2);\n num2 = num2 === '' ? '0' : (this.getErrorStrings().indexOf(num2.toString()) < 0 ? this.parseFloat(num2 + '').toString() : num2);\n num = Number(num2);\n if (isNaN(num) && !isIfError) {\n isErrorString = true;\n if (num2 === this.getErrorStrings()[CommonErrors.DivZero]) {\n stack.push(this.getErrorStrings()[CommonErrors.DivZero]);\n }\n else {\n stack.push(this.getErrorStrings()[CommonErrors.Value]);\n }\n }\n if (operator === 'add' && !isErrorString) {\n stack.push(((((Number(num2) * bigFactor) + (Number(num1) * bigFactor)) / bigFactor)).toString());\n }\n if (operator === 'sub' && !isErrorString) {\n stack.push(((((Number(num2) * bigFactor) - (Number(num1) * bigFactor)) / bigFactor)).toString());\n }\n if (operator === 'mul' && !isErrorString) {\n stack.push(((((Number(num2) * factor2) * (Number(num1) * factor1)) / factors)).toString());\n }\n if (operator === 'div' && !isErrorString) {\n if (this.isNaN(this.parseFloat(num1)) || this.isNaN(this.parseFloat(num2))) {\n stack.push(this.getErrorStrings()[CommonErrors.Value]);\n }\n else if (this.parseFloat(num1) === 0) {\n stack.push(this.getErrorStrings()[CommonErrors.DivZero]);\n }\n else {\n stack.push(((Number(num2) * factors) / (Number(num1) * factors)).toString());\n }\n }\n };\n /**\n * Applies a comparison operator to values on the evaluation stack.\n *\n * @param {string | number | Object} stack - Value stack.\n * @param {string | number | Object} operator - Comparison / logical operator token.\n * @param {string | number | Object} emptyStack - Optional alternate stack for empty handling.\n * @returns {string} - `\"TRUE\"`, `\"FALSE\"`, or an error token.\n * @hidden\n */\n Calculate.prototype.processLogical = function (stack, operator, emptyStack) {\n var val1;\n var val2;\n var value1;\n var value2;\n var isOnlyAsterisk;\n var result;\n var isErrorString = false;\n if (operator !== 'and' && operator !== 'equal' && operator !== 'notEq') {\n val1 = stack.pop();\n val2 = stack.pop();\n if (this.getErrorStrings().indexOf(val1) > -1) {\n result = val1;\n isErrorString = true;\n }\n else if (this.getErrorStrings().indexOf(val2) > -1) {\n result = val2;\n isErrorString = true;\n }\n if (this.isNaN(this.parseFloat(val1)) && this.isNaN(this.parseFloat(val2))) {\n val1 = val1.toString().toLowerCase();\n val2 = val2.toString().toLowerCase();\n }\n if (!isNullOrUndefined(val1)) {\n value1 = val1.indexOf(this.tic) > -1 ? val1 : this.parseFloat(val1);\n }\n if (!isNullOrUndefined(val2)) {\n value2 = val2.indexOf(this.tic) > -1 ? val2 : this.parseFloat(val2);\n }\n if (val1 === '*' && this.isNaN(this.parseFloat(val2)) && val2 !== '') {\n isOnlyAsterisk = true;\n }\n }\n if (operator === 'less' && !isErrorString) {\n if (!this.isNaN(value1) && !this.isNaN(value2)) {\n result = (value2 < value1) ? this.trueValue : this.falseValue;\n }\n else {\n result = (val2.toUpperCase().split(this.tic).join('').localeCompare(val1.toUpperCase().split(this.tic).join('')) < 0) ?\n this.trueValue : this.falseValue;\n }\n }\n if (operator === 'greater' && !isErrorString) {\n if (!this.isNaN(value1) && !this.isNaN(value2)) {\n result = (value2 > value1) ? this.trueValue : this.falseValue;\n }\n else {\n result = (val2.toUpperCase().split(this.tic).join('').localeCompare(val1.toUpperCase().split(this.tic).join('')) > 0) ?\n this.trueValue : this.falseValue;\n }\n }\n if (operator === 'lessEq' && !isErrorString) {\n if (!this.isNaN(value1) && !this.isNaN(value2)) {\n result = (value2 <= value1) ? this.trueValue : this.falseValue;\n }\n else {\n result = (val2.toUpperCase().split(this.tic).join('').localeCompare(val1.toUpperCase().split(this.tic).join('')) <= 0) ?\n this.trueValue : this.falseValue;\n }\n }\n if (operator === 'greaterEq' && !isErrorString) {\n if (!this.isNaN(value1) && !this.isNaN(value2)) {\n result = (value2 >= value1) ? this.trueValue : this.falseValue;\n }\n else {\n result = (val2.toUpperCase().split(this.tic).join('').localeCompare(val1.toUpperCase().split(this.tic).join('')) >= 0) ?\n this.trueValue : this.falseValue;\n }\n }\n if (operator === 'and' && !isErrorString) {\n val1 = stack.pop().toString();\n val2 = '';\n if (stack.length > 0) {\n val2 = stack.pop().toString();\n }\n if (this.getErrorStrings().indexOf(val1) > -1) {\n result = val1;\n }\n else if (this.getErrorStrings().indexOf(val2) > -1) {\n result = val2;\n }\n else {\n result = '' + val2 + val1 + '';\n result = result.split(this.tic).join('');\n }\n }\n if ((operator === 'equal' || operator === 'notEq') && !isErrorString) {\n var emptyValue1 = void 0;\n var emptyValue2 = void 0;\n if (emptyStack) {\n emptyValue1 = emptyStack[stack.length - 1];\n val1 = stack.pop();\n emptyValue2 = emptyStack[stack.length - 1];\n val2 = stack.pop();\n }\n else {\n val1 = stack.pop();\n val2 = stack.pop();\n }\n if (this.getErrorStrings().indexOf(val1) > -1) {\n result = val1;\n }\n else if (this.getErrorStrings().indexOf(val2) > -1) {\n result = val2;\n }\n else {\n val1 = (val1 === 'TRUE') ? '1' : (val1 === 'FALSE') ? '0' : val1;\n val2 = (val2 === 'TRUE') ? '1' : (val2 === 'FALSE') ? '0' : val2;\n if (this.isNaN(this.parseFloat(val1)) && this.isNaN(this.parseFloat(val2))) {\n val1 = val1.toString().toLowerCase();\n val2 = val2.toString().toLowerCase();\n }\n if (val1 === '*' && this.isNaN(this.parseFloat(val2)) && val2 !== '') {\n isOnlyAsterisk = true;\n }\n if (operator === 'equal') {\n result = val1 === val2 || (emptyValue1 !== undefined && emptyValue1 === val2) ||\n (emptyValue2 !== undefined && emptyValue2 === val1) || isOnlyAsterisk ? this.trueValue : this.falseValue;\n }\n else {\n if (isOnlyAsterisk) {\n result = this.falseValue;\n }\n else {\n result = val2 !== val1 && (!emptyValue1 || emptyValue1 !== val2) &&\n (!emptyValue2 || emptyValue2 !== val1) ? this.trueValue : this.falseValue;\n }\n }\n }\n }\n if (operator === 'or' && !isErrorString) {\n result = Math.pow(this.parseFloat(value2), this.parseFloat(value1)).toString();\n result = this.isNaN(this.parseFloat(result)) ? this.getErrorStrings()[CommonErrors.Value] : result;\n }\n stack.push(result);\n return result;\n };\n /**\n * Stores and expands cells for multi-criteria IFS formulas.\n *\n * @param {string} sCell - Stored cell info payload.\n * @returns {string | number} - Expanded stored cell list.\n * @hidden\n */\n Calculate.prototype.computeStoreCells = function (sCell) {\n var cellValue = sCell.cellValue;\n var cellRanges = sCell.cellRange;\n var criterias = sCell.criteria;\n var argArr = sCell.argArray;\n var isCriteria = sCell.isCriteria;\n var storeCell = sCell.storedCells;\n var isCountIfs = sCell.isCountIfS === this.trueValue;\n var i = sCell.countVal || 0;\n var rangeLength = isCriteria === this.trueValue ? storeCell : cellValue;\n var tempStoredCell = [];\n var criteria;\n for (var j = 0; j < rangeLength.length; j++) {\n var stack = [];\n var cellVal = this.getValueFromArg(cellValue[j]);\n var arrValue = argArr[isCountIfs ? (1 + (i * 2)) : (2 + i)];\n var isStringVal = arrValue.startsWith(this.tic) && arrValue.endsWith(this.tic);\n criteria = this.getANDComputedValue(arrValue.trim());\n var isAsterisk = criteria.includes('*');\n var isAsteriskOnly = criteria === '*' || criteria === '<>*';\n var criteriaValue = isAsterisk && !isAsteriskOnly ? criteria.replace(/\\*/g, '').trim() : criteria;\n var isCellReferenceValue = false;\n if (!isStringVal && this.isCellReference(criteriaValue)) {\n criteriaValue = this.getValueFromArg(criteriaValue);\n isCellReferenceValue = true;\n }\n if (isAsterisk && !isAsteriskOnly) {\n var asteriskIndex = criteria.indexOf('*');\n if (criteria[0] === '*') {\n criteriaValue = '*' + criteriaValue;\n }\n if (criteria[criteria.length - 1] === '*') {\n criteriaValue += '*';\n }\n if (asteriskIndex > 0 && asteriskIndex < criteria.length - 1) {\n criteriaValue = criteria.substring(0, asteriskIndex) + '*' + criteria.substring(asteriskIndex + 1);\n }\n }\n criteria = criteriaValue;\n var newCell = '';\n isCriteria = isCountIfs ? this.trueValue : isCriteria;\n if (isCriteria === this.trueValue) {\n var cell = '';\n var count = 0;\n var newCount = 0;\n var prevCriteria = void 0;\n var prevCriteriaIdx = void 0;\n var prevStoreCellIdx = void 0;\n var criteriaRangeIndexes = void 0;\n storeCell[j] = isCountIfs && !i ? cellValue[j] : storeCell[j];\n cell = storeCell[j];\n if (i) {\n prevCriteria = cellRanges[i - 1];\n prevCriteriaIdx = prevCriteria.indexOf('!') > -1 ? getRangeIndexes(prevCriteria.substring(prevCriteria.lastIndexOf('!') + 1)) : getRangeIndexes(prevCriteria);\n prevStoreCellIdx = cell.indexOf('!') > -1 ? getCellIndexes(cell.substring(cell.lastIndexOf('!') + 1)) : getCellIndexes(cell);\n criteriaRangeIndexes = cellRanges[i].indexOf('!') > -1 ?\n getRangeIndexes(cellRanges[i].substring(cellRanges[i].lastIndexOf('!') + 1)) :\n getRangeIndexes(cellRanges[i]);\n }\n var isCriteriaFromOtherSheet = cell.indexOf('!') > -1;\n var isSumFromOtherSheet = void 0;\n var sumRangeSheet = '';\n var criteriaRangeSheet = '';\n if (isCriteriaFromOtherSheet) {\n criteriaRangeSheet = cell.substring(0, cell.lastIndexOf('!') + 1);\n cell = cell.substring(cell.lastIndexOf('!') + 1);\n }\n // convert the new cell ranges for find in range with criteria.\n while (!this.isDigit(cell[count])) {\n count = count + 1;\n }\n if (this.isCellReference(cellRanges[i]) && cellRanges[i].indexOf(':') > -1) {\n newCell = isCountIfs && !i ? (rangeLength[j].indexOf('!') > -1 ? rangeLength[j].substring(rangeLength[j].lastIndexOf('!') + 1) : rangeLength[j]) : getCellAddress(criteriaRangeIndexes[0] + (prevStoreCellIdx[0] - prevCriteriaIdx[0]), criteriaRangeIndexes[1] +\n (prevStoreCellIdx[1] - prevCriteriaIdx[1]));\n isSumFromOtherSheet = cellRanges[i].indexOf('!') > -1;\n if (isSumFromOtherSheet) {\n sumRangeSheet = cellRanges[i].substring(0, cellRanges[i].lastIndexOf('!') + 1);\n }\n while (!this.isDigit(newCell[newCount])) {\n newCount = newCount + 1;\n }\n }\n var cellAlpha = this.substring(cell, count);\n var newCellAlpha = this.substring(newCell, newCount);\n var cellNumeric = this.substring(cell, count, cell.length - count);\n var newCellNumeric = this.substring(newCell, newCount, newCell.length - count);\n if (isCriteriaFromOtherSheet) {\n cellAlpha = criteriaRangeSheet + cellAlpha;\n newCellAlpha = criteriaRangeSheet + newCellAlpha;\n }\n if (cellNumeric !== newCellNumeric) {\n storeCell[j] = this.substring(storeCell[j], isCriteriaFromOtherSheet ? (criteriaRangeSheet.length + count) : count) + newCellNumeric;\n }\n newCell = storeCell[j].split(cellAlpha).join(newCellAlpha);\n if (isSumFromOtherSheet) {\n if (newCell.indexOf('!') > -1) {\n newCell = newCell.substring(newCell.lastIndexOf('!') + 1);\n }\n newCell = sumRangeSheet + newCell;\n }\n else {\n newCell = newCell.substring(newCell.lastIndexOf('!') + 1);\n }\n cellVal = this.getValueFromArg(newCell);\n criteria = isCountIfs ? criteria : this.getANDComputedValue(criterias[i - 1]);\n }\n var op = 'equal';\n var updatedCriteria = this.getOperatorAndCriteria(criteria, op);\n op = updatedCriteria.op;\n criteria = updatedCriteria.criteria;\n if ((!isStringVal && this.isCellReference(criteria) && (!isCellReferenceValue || (newCell !== '' && !isCountIfs))) || criteria.includes(this.arithMarker)) {\n criteria = this.getValueFromArg(criteria);\n }\n if (criteria.indexOf('*') > -1 || criteria.indexOf('?') > -1) {\n cellVal = this.findWildCardValue(criteria.toLowerCase(), cellVal.toLowerCase());\n }\n stack.push(cellVal.toLowerCase());\n stack.push(criteria.toLowerCase());\n if (this.processLogical(stack, op) === this.trueValue) {\n if (isCriteria === this.falseValue) {\n tempStoredCell.push(cellValue[j]);\n }\n else {\n tempStoredCell.push(newCell);\n }\n }\n }\n storeCell = tempStoredCell;\n tempStoredCell = [];\n return storeCell;\n };\n /**\n * Shared SUMIFS / AVERAGEIFS evaluation entry point.\n *\n * @param {string} range - Argument tokens for the IFS aggregate.\n * @param {boolean} isCountIfs - COUNTIFS marker when applicable.\n * @param {string} isAvgIfs - AVERAGEIFS marker when applicable.\n * @returns {string} - Aggregate result or error token.\n * @hidden\n */\n Calculate.prototype.computeIfsFormulas = function (range, isCountIfs, isAvgIfs) {\n if (isCountIfs === this.trueValue && (isNullOrUndefined(range) || range[0] === '' || range.length < 2 || range.length > 127 ||\n range.length % 2 !== 0)) {\n return this.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var argArr = range;\n var cellRanges = [];\n var criterias = [];\n var storedCell = [];\n var storedCellLength = 0;\n var sum = 0;\n for (var i = 0; i < argArr.length; i++) {\n if ((i === 0 || i % 2 === 1) && this.isCellReference(argArr[i])) {\n cellRanges.push(argArr[i].indexOf(':') > -1 ?\n argArr[i].trim() : getRangeAddress(getRangeIndexes(argArr[i])));\n }\n else {\n criterias.push(argArr[i].trim());\n }\n }\n var len = [];\n for (var i = 0; i < cellRanges.length; i++) {\n len.push(this.getCellCollection(cellRanges[i]).length);\n }\n for (var j = 0; j < len.length; j++) {\n if (len[j] && len[j + 1] && len[j] !== len[j + 1]) {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n }\n for (var k = 0; k < criterias.length; k++) {\n if (criterias[k] === '' || (this.isCellReference(criterias[k]) &&\n this.getValueFromArg(criterias[k]) === '')) {\n if (isAvgIfs === this.trueValue) {\n return this.getErrorStrings()[CommonErrors.DivZero];\n }\n return 0;\n }\n }\n var cellvalue;\n var isCriteria;\n if (isCountIfs === this.falseValue) {\n isCriteria = this.falseValue;\n cellvalue = this.getCellCollection(cellRanges[1]);\n var sCell = {\n cellValue: cellvalue, cellRange: cellRanges, criteria: criterias,\n argArray: argArr, isCriteria: isCriteria, storedCells: storedCell, isCountIfS: isCountIfs\n };\n storedCell = this.computeStoreCells(sCell);\n storedCellLength = storedCell.length;\n if (storedCellLength === 0) {\n return isAvgIfs === this.trueValue ? this.getErrorStrings()[CommonErrors.DivZero] : 0;\n }\n }\n // Compare criteria and convert the new cell ranges.\n var startRange = isCountIfs === this.trueValue ? 0 : 2;\n for (var i = startRange; i < cellRanges.length; i++) {\n isCriteria = this.trueValue;\n isCriteria = isCountIfs === this.trueValue && i === 0 ? this.falseValue : this.trueValue;\n cellvalue = this.getCellCollection(cellRanges[i]);\n var sCell = {\n cellValue: cellvalue, cellRange: cellRanges, criteria: criterias,\n argArray: argArr, isCriteria: isCriteria, storedCells: storedCell, isCountIfS: isCountIfs, countVal: i\n };\n storedCell = this.computeStoreCells(sCell);\n storedCellLength = storedCell.length;\n if (storedCellLength === 0) {\n return isAvgIfs === this.trueValue ? this.getErrorStrings()[CommonErrors.DivZero] : 0;\n }\n }\n var avgValCount = 0;\n var sumRangeIndexes = cellRanges[0].indexOf('!') > -1 ?\n getRangeIndexes(cellRanges[0].substring(cellRanges[0].lastIndexOf('!') + 1)) : getRangeIndexes(cellRanges[0]);\n var lastCriteria = cellRanges[cellRanges.length - 1];\n var criteriaRangeIndexes = lastCriteria.indexOf('!') > -1 ?\n getRangeIndexes(lastCriteria.substring(lastCriteria.lastIndexOf('!') + 1)) : getRangeIndexes(lastCriteria);\n for (var j = 0; j < storedCell.length; j++) {\n // convert the new cell ranges for find sum in range 0(first range)\n var cell = '';\n var newCell = '';\n var count = 0;\n var newCount = 0;\n cell = storedCell[j];\n var isCriteriaFromOtherSheet = cell.indexOf('!') > -1;\n var isSumFromOtherSheet = void 0;\n var sumRangeSheet = '';\n var criteriaRangeSheet = '';\n if (isCriteriaFromOtherSheet) {\n criteriaRangeSheet = cell.substring(0, cell.lastIndexOf('!') + 1);\n cell = cell.substring(cell.lastIndexOf('!') + 1);\n }\n while (!this.isDigit(cell[count])) {\n count = count + 1;\n }\n if (this.isCellReference(cellRanges[0]) && cellRanges[0].indexOf(':') > -1) {\n newCell = getCellAddress(sumRangeIndexes[0] + (getCellIndexes(cell)[0] - criteriaRangeIndexes[0]), sumRangeIndexes[1] + (getCellIndexes(cell)[1] - criteriaRangeIndexes[1]));\n isSumFromOtherSheet = cellRanges[0].indexOf('!') > -1;\n if (isSumFromOtherSheet) {\n sumRangeSheet = cellRanges[0].substring(0, cellRanges[0].lastIndexOf('!') + 1);\n }\n while (!this.isDigit(newCell[newCount])) {\n newCount = newCount + 1;\n }\n }\n var cellAlpha = this.substring(cell, count);\n var newCellAlpha = this.substring(newCell, newCount);\n var cellNumeric = this.substring(cell, count, cell.length - count);\n var newCellNumeric = this.substring(newCell, newCount, newCell.length - count);\n if (isCriteriaFromOtherSheet) {\n cellAlpha = criteriaRangeSheet + cellAlpha;\n newCellAlpha = criteriaRangeSheet + newCellAlpha;\n }\n if (cellNumeric !== newCellNumeric) {\n storedCell[j] = this.substring(storedCell[j], isCriteriaFromOtherSheet ? (criteriaRangeSheet.length + count) : count) + newCellNumeric;\n }\n cellvalue = storedCell[j].split(cellAlpha).join(newCellAlpha);\n if (isSumFromOtherSheet) {\n if (cellvalue.indexOf('!') > -1) {\n cellvalue = cellvalue.substring(cellvalue.lastIndexOf('!') + 1);\n }\n cellvalue = sumRangeSheet + cellvalue;\n }\n else {\n cellvalue = cellvalue.substring(cellvalue.lastIndexOf('!') + 1);\n }\n if (isCountIfs === this.trueValue) {\n sum = sum + 1;\n }\n else {\n var argValue = this.getValueFromArg(cellvalue);\n var newArgValue = parseFloat(argValue === '' && isAvgIfs !== this.trueValue ? '0' : argValue);\n if (this.isNumber(newArgValue)) {\n avgValCount++;\n sum = sum + newArgValue;\n }\n }\n }\n if (isAvgIfs === this.trueValue) {\n sum = sum / avgValCount;\n }\n return sum;\n };\n /**\n * Shared COUNTIFS evaluation entry point.\n *\n * @param {string} range - COUNTIFS argument tokens.\n * @returns {string} - Count result or error token.\n * @hidden\n */\n Calculate.prototype.computeCountIfsFormulas = function (range) {\n var prevGrid = this.grid;\n if (isNullOrUndefined(range) || range[0] === '' || range.length < 2 || range.length > 127 ||\n range.length % 2 !== 0) {\n return this.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n var argArr = range;\n var cellRanges = [];\n var criterias = [];\n for (var i = 0; i < argArr.length; i++) {\n if (i % 2 === 0 && this.isCellReference(argArr[i])) {\n cellRanges.push(argArr[i].indexOf(':') > -1 ?\n argArr[i].trim() : getRangeAddress(getRangeIndexes(argArr[i])));\n }\n else {\n criterias.push(argArr[i].trim());\n }\n }\n if (cellRanges.length !== criterias.length) {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n var rangeIndexesArr = [];\n var grid = this.grid;\n for (var i = 0; i < cellRanges.length; i++) {\n var _a = getRangeIndexes(cellRanges[i]), startRow = _a[0], startCol = _a[1], endRow = _a[2], endCol = _a[3];\n var sheetToken = '';\n var family = this.getSheetFamilyItem(grid);\n if (cellRanges[i].startsWith('!')) {\n sheetToken = cellRanges[i].substring(0, cellRanges[i].replace('!', '').indexOf('!') + 2);\n if (family.tokenToParentObject !== null) {\n grid = family.tokenToParentObject.get(sheetToken);\n }\n }\n else if (family.parentObjectToToken !== null) {\n sheetToken = family.parentObjectToToken.get(grid);\n }\n this.grid = grid;\n var sheetId = this.getSheetId(grid);\n var sheetInfo = this.getHostSheetInfo();\n if (getSheetIndexByName('Sheet' + sheetId, sheetInfo) === -1) {\n this.grid = prevGrid;\n return this.getErrorStrings()[CommonErrors.Ref];\n }\n var getCellValue = this.getCellValueFn(grid, this.cell, sheetId, true);\n if (rangeIndexesArr.length > 0) {\n var baseRange = rangeIndexesArr[rangeIndexesArr.length - 1];\n var baseRowCount = baseRange.endRow - baseRange.startRow + 1;\n var baseColCount = baseRange.endCol - baseRange.startCol + 1;\n if ((endRow - startRow + 1) !== baseRowCount || (endCol - startCol + 1) !== baseColCount) {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n }\n rangeIndexesArr.push({ startRow: startRow, startCol: startCol, endRow: endRow, endCol: endCol, getCellValue: getCellValue, grid: grid });\n }\n for (var k = 0; k < criterias.length; k++) {\n if (criterias[k] === '') {\n this.grid = prevGrid;\n return 0;\n }\n }\n var filteredCells = [];\n for (var i = 0; i < rangeIndexesArr.length; i++) {\n this.grid = prevGrid;\n var criteria = criterias[i];\n var isStringVal = criteria.startsWith(this.tic) && criteria.endsWith(this.tic);\n criteria = this.getANDComputedValue(criteria.trim());\n var isAsterisk = criteria.includes('*');\n var isAsteriskOnly = criteria === '*' || criteria === '<>*';\n var criteriaValue = isAsterisk && !isAsteriskOnly ? criteria.replace(/\\*/g, '').trim() : criteria;\n var isCellReferenceValue = false;\n if (!isStringVal && this.isCellReference(criteriaValue)) {\n criteriaValue = this.getValueFromArg(criteriaValue);\n isCellReferenceValue = true;\n }\n if (isAsterisk && !isAsteriskOnly) {\n var asteriskIndex = criteria.indexOf('*');\n if (criteria[0] === '*') {\n criteriaValue = '*' + criteriaValue;\n }\n if (criteria[criteria.length - 1] === '*') {\n criteriaValue += '*';\n }\n if (asteriskIndex > 0 && asteriskIndex < criteria.length - 1) {\n criteriaValue = criteria.substring(0, asteriskIndex) + '*' + criteria.substring(asteriskIndex + 1);\n }\n }\n criteria = criteriaValue;\n var op = 'equal';\n var updatedCriteria = this.getOperatorAndCriteria(criteria, op);\n op = updatedCriteria.op;\n criteria = updatedCriteria.criteria;\n if ((!isStringVal && this.isCellReference(criteria) && !isCellReferenceValue) || criteria.includes(this.arithMarker)) {\n criteria = this.getValueFromArg(criteria);\n }\n var hasWildCards = criteria.indexOf('*') > -1 || criteria.indexOf('?') > -1;\n var _b = rangeIndexesArr[i], startRow = _b.startRow, startCol = _b.startCol, endRow = _b.endRow, endCol = _b.endCol, getCellValue = _b.getCellValue;\n var rangeGrid = rangeIndexesArr[i].grid;\n this.grid = rangeGrid;\n var cellVal = void 0;\n if (i === 0) {\n for (var r = startRow; r <= endRow; r++) {\n for (var c = startCol; c <= endCol; c++) {\n cellVal = getCellValue(r + 1, c + 1, getCellAddress(r, c));\n if (hasWildCards) {\n cellVal = this.findWildCardValue(criteria.toLowerCase(), cellVal.toLowerCase());\n }\n if (this.processLogical([cellVal.toLowerCase(), criteria.toLowerCase()], op) === this.trueValue) {\n filteredCells.push({ rowIdx: r, colIdx: c });\n }\n }\n }\n }\n else {\n var storedCells = filteredCells;\n var previousRangeIdx = rangeIndexesArr[i - 1];\n filteredCells = [];\n for (var j = 0; j < storedCells.length; j++) {\n var updatedCell = storedCells[j];\n updatedCell.rowIdx = startRow + (updatedCell.rowIdx - previousRangeIdx.startRow);\n updatedCell.colIdx = startCol + (updatedCell.colIdx - previousRangeIdx.startCol);\n cellVal = getCellValue(updatedCell.rowIdx + 1, updatedCell.colIdx + 1, getCellAddress(updatedCell.rowIdx, updatedCell.colIdx));\n if (hasWildCards) {\n cellVal = this.findWildCardValue(criteria.toLowerCase(), cellVal.toLowerCase());\n }\n if (this.processLogical([cellVal.toLowerCase(), criteria.toLowerCase()], op) === this.trueValue) {\n filteredCells.push({ rowIdx: updatedCell.rowIdx, colIdx: updatedCell.colIdx });\n }\n }\n }\n if (filteredCells.length === 0) {\n this.grid = prevGrid;\n return 0;\n }\n }\n this.grid = prevGrid;\n return filteredCells.length;\n };\n Calculate.prototype.getOperatorAndCriteria = function (rawCriteria, op) {\n var criteria = rawCriteria;\n if (criteria.startsWith('<=')) {\n op = 'lessEq';\n criteria = criteria.substring(2);\n }\n else if (criteria.startsWith('>=')) {\n op = 'greaterEq';\n criteria = criteria.substring(2);\n }\n else if (criteria.startsWith('<>')) {\n op = 'notEq';\n criteria = criteria.substring(2);\n }\n else if (criteria.startsWith('<')) {\n op = 'less';\n criteria = criteria.substring(1);\n }\n else if (criteria.startsWith('>')) {\n op = 'greater';\n criteria = criteria.substring(1);\n }\n else if (criteria.startsWith('=')) {\n op = 'equal';\n criteria = criteria.substring(1);\n }\n return { op: op, criteria: criteria };\n };\n Calculate.prototype.processNestedFormula = function (pText, sFormula, fResult) {\n if (fResult && !fResult.toString().includes('\"')) {\n var formulaEndIdx = pText.indexOf(sFormula) + sFormula.length;\n if (pText[formulaEndIdx] === '\"' && this.getErrorStrings().indexOf(fResult.toString()) < 0 &&\n !this.isNumber(fResult) && fResult !== this.trueValue && fResult !== this.falseValue) {\n return pText.split(sFormula).join('\"' + fResult + '\"');\n }\n }\n return pText.split(sFormula).join('n' + fResult);\n };\n /**\n * Returns whether `value` is `NaN` after numeric coercion.\n *\n * @hidden\n * @param {string | number | boolean | Object} value - Value to test.\n * @returns {number} - `true` when not a number.\n */\n Calculate.prototype.isNaN = function (value) {\n if (value.toString() === 'NaN' || typeof value === 'string') {\n return true;\n }\n return false;\n };\n /**\n * Returns whether `val` is numeric (including numeric strings).\n *\n * @hidden\n * @param {string | number} val - Value to test.\n * @returns {number} - `true` when numeric.\n */\n Calculate.prototype.isNumber = function (val) {\n return val - parseFloat(val) >= 0;\n };\n /**\n * Converts an OLE Automation (Excel) serial date to a JavaScript `Date`.\n *\n * @hidden\n * @param {string | number | Object} doubleNumber - Excel serial date/time.\n * @returns {Date | Object} - JavaScript `Date`.\n */\n Calculate.prototype.fromOADate = function (doubleNumber) {\n doubleNumber = (doubleNumber > 0 && doubleNumber < 1) ? (1 + doubleNumber) : (doubleNumber === 0) ? 1 : doubleNumber;\n if (doubleNumber > 60) {\n doubleNumber -= 1; // Due to leap year issue of 1900 in MSExcel.\n }\n var result = new Date('01/01/1900');\n var resultDateUTC = Date.UTC(result.getFullYear(), result.getMonth(), result.getDate(), result.getHours(), result.getMinutes(), result.getSeconds(), result.getMilliseconds());\n return new Date(new Date(((doubleNumber - 1) * (this.millisecondsOfaDay)) + resultDateUTC).toUTCString().replace(' GMT', ''));\n };\n /**\n * Builds an Excel serial date from year, month, and day components.\n *\n * @hidden\n * @param {number} year - Full year.\n * @param {number} month - Month number (1–12; Excel-style overflow allowed).\n * @param {number} day - Day of month (Excel-style overflow allowed).\n * @returns {number} - Excel serial date number.\n */\n Calculate.prototype.getSerialDateFromDate = function (year, month, day) {\n var days = 0;\n if (year < 1900) {\n year += 1900;\n }\n var isValidMonth = false;\n while (!isValidMonth) {\n while (month > 12) {\n year++;\n month -= 12;\n }\n while (month < 1) {\n month += 12;\n year--;\n }\n isValidMonth = true;\n var tempDay = new Date(year, month, 1, -1).getDate();\n while (day > tempDay) {\n tempDay = new Date(year, month, 1, -1).getDate();\n month++;\n day -= tempDay;\n isValidMonth = false;\n }\n if (day < 1) {\n month--;\n if (month < 1) {\n month = 12;\n year--;\n }\n tempDay = new Date(year, month, 1, -1).getDate();\n day = tempDay + day;\n isValidMonth = false;\n }\n }\n var dateTime = Date.parse(year + \"/\" + month + \"/\" + day);\n if (!this.isNaN(dateTime)) {\n days = this.toOADate(new Date(dateTime));\n }\n return days;\n };\n /**\n * Converts a serial time fraction (or time string) to a `Date`.\n *\n * @param {string | number | boolean | Object} value - Time serial or text.\n * @returns {Date | Object} - `Date` representing the time of day.\n * @hidden\n */\n Calculate.prototype.intToTime = function (value) {\n var val = value.toString().split('.');\n if (!isNullOrUndefined(val[1])) {\n value = parseFloat(val[0] + 1 + '.' + val[1]) || value;\n }\n return this.intToDate(value.toString());\n };\n /**\n * Converts a JavaScript `Date` to an Excel OLE Automation serial number.\n *\n * @hidden\n * @param {string | number | Object} dateTime - Date/time to convert.\n * @param {boolean} isTime - When `true`, includes the time fraction.\n * @param {boolean} isTimeOnly - When `true`, treats the value as time without a date component.\n * @returns {number} - Excel serial number.\n */\n Calculate.prototype.toOADate = function (dateTime, isTime, isTimeOnly) {\n var startDate = new Date('01/01/1900');\n var date = isDateTime(dateTime) ? dateTime : new Date(dateTime);\n var startDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), startDate.getHours(), startDate.getMinutes(), startDate.getSeconds(), startDate.getMilliseconds());\n var dateUTC = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n var diffDays = ((dateUTC - startDateUTC) / (1000 * 3600 * 24));\n return (isTime ? diffDays : parseInt(diffDays.toString(), 10)) + (isTimeOnly ? 0 : (diffDays > 60 ? 2 : 1));\n };\n /**\n * Normalizes a date string for calculation.\n *\n * @param {number | string} date - Date text.\n * @returns {string} - Normalized date string.\n * @hidden\n */\n Calculate.prototype.calculateDate = function (date) {\n return (this.parseFloat(date) < 10) ? '0' + date : date;\n };\n /**\n * Returns whether `s` is `null`, `undefined`, or an empty string.\n *\n * @hidden\n * @param {number | string} s - Text to test.\n * @returns {string | number} - `true` when empty.\n */\n Calculate.prototype.isTextEmpty = function (s) {\n return s === null || s === '';\n };\n /**\n * Returns whether `text` consists only of digit characters `0`–`9`.\n *\n * @hidden\n * @param {string} text - Text to test.\n * @returns {string | number} - `true` when all characters are digits.\n */\n Calculate.prototype.isDigit = function (text) {\n var charCode = text.charCodeAt(0);\n return charCode > 47 && charCode < 58;\n };\n /**\n * Evaluates a single AND condition token to `\"TRUE\"` / `\"FALSE\"`.\n *\n * @param {boolean | string | number} condition - Condition expression or cell token.\n * @returns {string} - Logical result string.\n * @hidden\n */\n Calculate.prototype.getANDComputedValue = function (condition) {\n if (condition.startsWith(this.arithMarker) && condition.includes('c')) {\n condition = this.getValueFromArg(condition);\n }\n return condition.split(this.tic).join('');\n };\n Calculate.prototype.findLastIndexOfq = function (fString) {\n var lastIndexOfq = fString.lastIndexOf('q');\n var lastIndexOflLeftBracket = fString.lastIndexOf(this.leftBracket);\n while (lastIndexOflLeftBracket < lastIndexOfq) {\n lastIndexOfq = fString.substring(0, lastIndexOfq).lastIndexOf('q');\n }\n return lastIndexOfq;\n };\n /**\n * Resolves a formula argument token to its computed display/value string.\n *\n * Handles cell references, nested formulas, literals, and named ranges.\n *\n * @hidden\n * @param {string | number} val - Argument token from the parser.\n * @param {boolean} isUnique - UNIQUE formula context.\n * @param {boolean} isIfError - IFERROR/IFNA context.\n * @param {boolean} isSubtotal - SUBTOTAL context.\n * @param {boolean} isIFFormula - IF formula context.\n * @returns {string} - Resolved value string.\n */\n Calculate.prototype.getValueFromArg = function (val, isUnique, isIfError, isSubtotal, isIFFormula) {\n val = val.trim();\n if (!val || this.getErrorStrings().indexOf(val) > -1) {\n return val;\n }\n var firstChar = val[0];\n if (firstChar === this.tic || firstChar === this.singleTic) {\n var parsedVal = val.split(this.tic).join('');\n if (this.isNaN(this.parseFloat(parsedVal)) && !(isIFFormula && firstChar === this.tic && val.endsWith(this.tic))) {\n var dateTime = this.isDate(parsedVal);\n if (dateTime && !this.isNaN(dateTime.getDate())) {\n return this.toOADate(dateTime, true).toString();\n }\n }\n if (val.endsWith(this.tic)) {\n var decimalSep = this.getParseDecimalSeparator();\n if (decimalSep !== '.' && parsedVal.includes(decimalSep)) {\n parsedVal = parsedVal.replace(decimalSep, '.');\n if (this.isNumber(parsedVal)) {\n val = parsedVal;\n }\n }\n }\n return val;\n }\n else if (firstChar === 'u' && val.includes(this.arithMarker)) {\n // To parse - sign with brackets, cell references and nested formulas in the formula arguments. Ex: -(I13+I14+I12)/(-D2+D1) as arguments in formulas.\n val = this.parser.parseSimpleOperators(val.split('u').join('0-'), [this.parser.tokenSubtract], ['-']);\n }\n else {\n var isFirstCharUpper = this.isUpperChar(firstChar);\n if (!isFirstCharUpper) {\n var decimalSep = this.getParseDecimalSeparator();\n if (this.isDigit(firstChar) || firstChar === decimalSep || firstChar === '-' || firstChar === 'n') {\n if (firstChar === 'n') {\n val = val.substring(1);\n if (val.indexOf('\"n') > -1) {\n val = val.replace('\"n', '\"');\n }\n }\n if (decimalSep !== '.' && val.includes(decimalSep)) {\n var parsedVal = val.replace(decimalSep, '.');\n if (this.isNumber(parsedVal)) {\n val = parsedVal;\n }\n }\n return val;\n }\n }\n }\n var tokenAvail = firstChar === this.sheetToken;\n if (tokenAvail || (this.isUpperChar(firstChar) && !['+', '-', '/', '*', ')', ')', '{'].some(function (opr) { return val.includes(opr); }))) {\n var isCellRef = this.isCellReference(val);\n if (isCellRef && !tokenAvail) {\n var family = this.getSheetFamilyItem(this.grid);\n if (family.sheetNameToParentObject !== null && family.parentObjectToToken.has(this.grid)) {\n val = family.parentObjectToToken.get(this.grid) + val;\n }\n }\n if (val === this.cell) {\n var dependent = this.getDependentCells().get(val);\n if (dependent != null && dependent.indexOf(val) > -1) {\n this.arrayRemove(dependent, val);\n }\n if (!this.getDependentFormulaCells().has(this.cell)) {\n this.clearFormulaDependentCells(this.cell);\n }\n if (!isUnique) {\n throw new FormulaError(this.formulaErrorStrings[FormulasErrorsStrings.CircularReference]);\n }\n }\n var cellValue = this.getParentObjectCellValue(val, false, isUnique, isSubtotal);\n var result = isNullOrUndefined(cellValue) ? '' : cellValue.toString();\n if (isCellRef) {\n this.updateDependentCell(val);\n }\n return result;\n }\n else {\n return this.computeValue(val, false, isIfError);\n }\n };\n /**\n * Attempts to interpret `date` as a JavaScript `Date`.\n *\n * @hidden\n * @param {number | string} date - Date instance, serial, or valid text.\n * @returns {Date | Object} - `Date` when recognized; otherwise a false result used by callers.\n */\n Calculate.prototype.isDate = function (date) {\n if (typeof date === 'object' || Date.parse(date) !== null) {\n var dateVal = void 0;\n if (typeof date === 'string') {\n dateVal = this.checkDateFormat(date, false, true);\n }\n else {\n dateVal = new Date(Date.parse(date));\n }\n if (dateVal >= this.dateTime1900) {\n return dateVal;\n }\n else {\n return null;\n }\n }\n else {\n return null;\n }\n };\n /**\n * Parses a date-like value into a `Date` or intermediate representation.\n *\n * @param {number | string} date - Value to parse.\n * @returns {string | number} - Parsed date information.\n * @hidden\n */\n Calculate.prototype.parseDate = function (date) {\n if (!this.isNaN(date)) {\n if (date instanceof Date) {\n return new Date(date);\n }\n var d = parseInt(date, 10);\n if (d < 0) {\n return this.getErrorStrings()[CommonErrors.Num];\n }\n if (d <= 60) {\n return new Date(this.dateTime1900.getTime() + (d - 1) * 86400000);\n }\n return new Date(this.dateTime1900.getTime() + (d - 2) * 86400000);\n }\n if (typeof date === 'string') {\n date = this.checkDateFormat(date, true);\n if (!this.isNaN(date)) {\n return date;\n }\n }\n return this.getErrorStrings()[CommonErrors.Value];\n };\n /**\n * Validates and parses a date string using engine/host date rules.\n *\n * @param {number | string} date - Date text.\n * @param {string | number | Object} pvtParse - Private parse mode.\n * @param {string | number | Object} fromIsDate - When called from {@link isDate}.\n * @returns {Date | Object} - Parsed `Date` when valid.\n * @hidden\n */\n Calculate.prototype.checkDateFormat = function (date, pvtParse, fromIsDate) {\n var host = this.parentObject;\n if (host && typeof host.getModuleName === 'function' && host.getModuleName() === 'spreadsheet') {\n var dateEventArgs = this.hostParseDate(date);\n if (dateEventArgs.isDate) {\n return dateEventArgs.dateObj;\n }\n else if (fromIsDate && !dateEventArgs.isTime) {\n return new Date(NaN);\n }\n }\n if (this.getErrorStrings().indexOf(date) > -1) {\n return new Date(NaN);\n }\n if (!pvtParse) {\n return new Date(Date.parse(date));\n }\n return new Date(date);\n };\n /**\n * Returns whether `args` looks like a valid cell or range reference.\n *\n * @hidden\n * @param {string[]} args - Text to test.\n * @returns {string} - `true` when the text is a cell/range reference.\n */\n Calculate.prototype.isCellReference = function (args) {\n args = args.trim();\n if (args === '') {\n return false;\n }\n args = this.setTokensForSheets(args);\n var sheetToken1 = this.getSheetToken(args);\n var containsBoth = false;\n if (sheetToken1 !== '') {\n args = args.split(sheetToken1).join('');\n }\n var isAlpha = false;\n var isNum = false;\n if (args.indexOf(':') !== args.lastIndexOf(':')) {\n return false;\n }\n var charArray = (args.split('').join(this.getParseArgumentSeparator())).split(this.getParseArgumentSeparator());\n for (var c = 0; c < charArray.length; c++) {\n if (this.isChar(charArray[c])) {\n isAlpha = true;\n }\n else if (this.isDigit(charArray[c])) {\n isNum = true;\n }\n else if (charArray[c] === ':') {\n if (isAlpha && isNum) {\n containsBoth = true;\n }\n isAlpha = false;\n isNum = false;\n }\n else {\n return false;\n }\n }\n if (args.indexOf(':') > -1 && args.indexOf(this.tic) === -1) {\n if (((containsBoth && isAlpha && isNum) || (((isAlpha && !isNum) || (!isAlpha && isNum)) && !containsBoth))) {\n return true;\n }\n else {\n return false;\n }\n }\n if (isAlpha && isNum && args.indexOf(this.tic) === -1 && this.isValidCell(args)) {\n return true;\n }\n return false;\n };\n /**\n * Rewrites sheet names in formula text to internal sheet tokens.\n *\n * @param {string} text - Formula text containing sheet names.\n * @returns {string} - Text with sheet tokens substituted.\n * @hidden\n */\n Calculate.prototype.setTokensForSheets = function (text) {\n var family = this.getSheetFamilyItem(this.grid);\n var sortedSheetNamesCollection = this.getSortedSheetNames();\n if (sortedSheetNamesCollection != null) {\n for (var n = 0; n < sortedSheetNamesCollection.length; n++) {\n var token = family.sheetNameToToken.get(sortedSheetNamesCollection[n]);\n token = token.split(this.sheetToken).join(this.tempSheetPlaceHolder);\n var s = this.singleTic + 'SHEET' + sortedSheetNamesCollection[n] + this.singleTic + this.sheetToken;\n if (text.indexOf(s) === -1) {\n s = 'SHEET' + sortedSheetNamesCollection[n] + this.sheetToken;\n }\n text = text.split(s).join(token);\n s = sortedSheetNamesCollection[n] + this.sheetToken;\n text = text.split(s).join(token);\n }\n }\n text = text.split(this.tempSheetPlaceHolder).join(this.sheetToken);\n if (text.indexOf('!!') > -1) {\n text = text.replace('!!', '!');\n var textSplit = text.split('!');\n textSplit[1] = (parseInt(textSplit[1], 10) + 1).toString();\n text = textSplit.join('!');\n }\n return text;\n };\n Calculate.prototype.getParentObjectCellValue = function (val, refresh, isUnique, isSubtotal) {\n if (val === this.trueValue || val === this.falseValue) {\n return val;\n }\n var tokenIdx = val.lastIndexOf(this.sheetToken);\n var grid = this.grid;\n var cellRef;\n if (tokenIdx > -1) {\n var family = this.getSheetFamilyItem(grid);\n if (family.tokenToParentObject !== null) {\n this.grid = family.tokenToParentObject.get(val.substring(0, tokenIdx + 1));\n cellRef = val.substring(tokenIdx + 1);\n }\n else {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n }\n else {\n var j = 0;\n while (j < val.length && this.isChar(val[j])) {\n j++;\n }\n if (j === val.length) {\n return val === '' ? this.getErrorStrings()[CommonErrors.Value] : this.getErrorStrings()[CommonErrors.Name];\n }\n else {\n cellRef = val;\n var family = this.getSheetFamilyItem(grid);\n if (family.isSheetMember && family.parentObjectToToken != null) {\n val = family.parentObjectToToken.get(this.grid) + val;\n }\n }\n }\n if (this.isDigit(cellRef[0])) {\n var alphabetStartIdx = cellRef.search(/[a-zA-Z]/);\n if (alphabetStartIdx > 0) {\n cellRef = cellRef.substring(alphabetStartIdx, cellRef.length) + cellRef.substring(0, alphabetStartIdx);\n }\n }\n var row = this.rowIndex(cellRef);\n var col = this.colIndex(cellRef);\n var result;\n if (!(row > 0 && row <= maxRows && col > 0 && col <= maxCols)) {\n result = this.getErrorStrings()[CommonErrors.Name];\n }\n else {\n var sheetId = this.getSheetId(this.grid);\n var sheetInfo = this.getHostSheetInfo();\n if (sheetInfo.length && getSheetIndexByName('Sheet' + sheetId, sheetInfo) === -1) {\n this.grid = grid;\n return this.getErrorStrings()[CommonErrors.Ref];\n }\n result = this.getCellValueFn(grid, this.cell, sheetId, false, refresh, isUnique, isSubtotal)(row, col, val);\n }\n this.grid = grid;\n return isNullOrUndefined(result) ? '' : result;\n };\n /**\n * Returns a function that reads a cell value for the active grid context.\n *\n * @param {Object} grid - Grid / parent object providing cell values.\n * @param {string} actCell - Active cell reference for dependency tracking.\n * @param {string | number | Object} sheetId - Sheet id for the grid.\n * @param {string} updateDependentCell - When `true`, records dependents while reading.\n * @param {string | number | Object} refresh - Whether to refresh computed values while reading.\n * @param {boolean} isUnique - UNIQUE formula context.\n * @param {boolean} isSubtotal - SUBTOTAL formula context.\n * @returns {string} - Cell value getter `(row, col, curCell) => string`.\n * @hidden\n */\n Calculate.prototype.getCellValueFn = function (grid, actCell, sheetId, updateDependentCell, refresh, isUnique, isSubtotal) {\n var _this = this;\n var fromCell = actCell;\n if (fromCell) {\n fromCell = grid === this.grid ? '' :\n fromCell + ',' + (typeof grid === 'string' && Number(grid) > -1 ? grid : this.getSheetID(grid));\n }\n var getValueRowCol = this.parentObject.getValueRowCol.bind(this.parentObject) ||\n this.getValueRowCol.bind(this);\n return function (row, col, curCell) {\n if (actCell === curCell && !isUnique) {\n throw _this.formulaErrorStrings[FormulasErrorsStrings.CircularReference];\n }\n _this.cell = curCell;\n var val = getValueRowCol(sheetId, row, col, fromCell, refresh, isUnique, isSubtotal);\n if (isNullOrUndefined(val)) {\n val = '';\n }\n else {\n val = val.toString();\n var decimalSep = _this.getParseDecimalSeparator();\n if (decimalSep !== '.' && val.includes(decimalSep)) {\n var parsedVal = val.replace(decimalSep, '.');\n if (_this.isNumber(parsedVal)) {\n val = parsedVal;\n }\n }\n }\n _this.cell = actCell;\n if (updateDependentCell) {\n _this.updateDependentCell(curCell);\n }\n return val;\n };\n };\n Calculate.prototype.isValidCell = function (args) {\n var digitStartIdx = args.search(/\\d/);\n if (digitStartIdx === 0) {\n var alphabetStartIdx = args.search(/[a-zA-Z]/);\n args = args.substring(alphabetStartIdx, args.length) + args.substring(0, alphabetStartIdx);\n }\n var row = this.rowIndex(args);\n var col = this.colIndex(args);\n return row > 0 && row <= maxRows && col > 0 && col <= maxCols;\n };\n /**\n * Returns the numeric sheet id for a registered grid object.\n *\n * @param {Object} grd - Grid / parent object.\n * @returns {string | number} - Sheet id.\n * @hidden\n */\n Calculate.prototype.getSheetId = function (grd) {\n return grd && typeof grd === 'string' && Number(grd) > -1 ? Number(grd) : this.getSheetID(grd) + 1;\n };\n /**\n * Getting the formula result.\n *\n * @param {Object} grid - Specifies the parent object.\n * @param {number} row - Row index of the parent object or key.\n * @param {number} col - Column index of the parent object.\n * @returns {string} - Getting the formula result.\n */\n /**\n * Reads a cell value from a grid at 1-based row/column indexes.\n *\n * @param {Object} grid - Grid / parent object.\n * @param {number} row - 1-based row index.\n * @param {number} col - 1-based column index.\n * @returns {string} - Cell value as a string.\n */\n Calculate.prototype.getValueRowCol = function (grid, row, col) {\n var address = (this.convertAlpha(col) + row.toString()).toUpperCase();\n if (this.storedData.has(address)) {\n var addressValue = this.getKeyValue(address);\n return isNullOrUndefined(addressValue) ? '' : addressValue.toString();\n }\n var mappedKey = this.rowsToKeyMap.get(row);\n if (isNullOrUndefined(mappedKey)) {\n return '';\n }\n var key = mappedKey.toString();\n var keyUpper = key.toUpperCase();\n // Row map is insertion-order based; ignore when it points at a different A1 cell.\n if (this.isCellReference(keyUpper) && keyUpper !== address) {\n return '';\n }\n // Avoid re-entering a formula key already on the getKeyValue evaluation stack.\n if (this.evaluatingKeys.has(keyUpper)) {\n return '';\n }\n var result = this.getKeyValue(key);\n if (isNullOrUndefined(result)) {\n return '';\n }\n result = result.toString();\n if (result !== '' && result[result.length - 1] === '%' && result.length > 1) {\n var d = this.parseFloat(result.substring(0, result.length - 1));\n if (this.isNaN(d)) {\n result = (Number(d) / 100).toString();\n }\n }\n return result;\n };\n /**\n * Registers a custom formula in the library.\n *\n * @param {string} formulaName - Excel-facing function name to register.\n * @param {string} functionName - Handler function, or a global function name string.\n * @param {string | number | Object} formulaDescription - Description shown in Insert Function UI.\n * @param {string} category - Category label for Insert Function UI.\n *\n * @example\n * ```ts\n * engine.defineFunction('DOUBLE', (x) => Number(x) * 2, 'Doubles a number', 'Custom');\n * ```\n * @returns {void}\n */\n Calculate.prototype.defineFunction = function (formulaName, functionName, formulaDescription, category) {\n if (typeof functionName === 'string') {\n functionName = getValue(functionName, window);\n }\n formulaName = formulaName.toUpperCase();\n this.libraryFormulas.set(formulaName, {\n handler: functionName, isCustom: true,\n description: formulaDescription, category: category\n });\n };\n /**\n * Notifies the engine that a cell value or formula changed and optionally recalculates dependents.\n *\n * @hidden\n * @param {Object} grid - Parent object / sheet reference name.\n * @param {string[]} changeArgs - Changed cell coordinates and formula/value.\n * @param {boolean} isCalculate - When `true`, recalculates the changed formula.\n * @param {string | number | Object} usedRangeCol - Used-range bounds for the sheet.\n * @param {string | number | Object} refresh - Whether to refresh computed values.\n * @param {string} sheetName - Visible sheet name for `actCell` tracking.\n * @param {boolean} isRandomFormula - Whether the change involves volatile random formulas.\n * @param {string} randomFormulaRefreshing - Whether random formulas are being refreshed.\n * @param {boolean} isDelete - Whether the change originates from a delete operation.\n * @param {string} deletedRange - Deleted range indexes when `isDelete` is `true`.\n * @param {string | number | Object} refreshDependentCells - Forces dependent refresh regardless of calculation mode.\n * @param {string | number | Object} action - Optional calculation action label (for example `\"calculate\"`).\n */\n Calculate.prototype.valueChanged = function (grid, changeArgs, isCalculate, usedRangeCol, refresh, sheetName, isRandomFormula, randomFormulaRefreshing, isDelete, deletedRange, refreshDependentCells, action) {\n var pgrid = grid;\n this.spreadSheetUsedRange = usedRangeCol;\n this.grid = grid;\n var isComputedValueChanged = true;\n var isCompute = true;\n var calcFamily = this.getSheetFamilyItem(pgrid);\n var cellTxt = getAlphalabel(changeArgs.getColIndex()) + changeArgs.getRowIndex().toString();\n this.actCell = sheetName + '!' + cellTxt;\n if (calcFamily.sheetNameToParentObject !== null && calcFamily.sheetNameToParentObject.size > 0) {\n var token = calcFamily.parentObjectToToken.get(pgrid);\n cellTxt = token + cellTxt;\n }\n var argVal = changeArgs.getFormulaValue().toUpperCase();\n if (argVal.indexOf('=RAND()') > -1 || argVal.indexOf('=NOW()') > -1 || argVal.indexOf('NOW()') > -1 || argVal.indexOf('RAND()') > -1 || argVal.indexOf('=RANDBETWEEN(') > -1 ||\n argVal.indexOf('RANDBETWEEN(') > -1 || this.randomValues.has(cellTxt)) {\n var randStrVal = this.randCollection.toString();\n if (!this.randomValues.has(cellTxt)) {\n this.randomValues.set(cellTxt, changeArgs.getFormulaValue());\n this.randCollection.push(cellTxt);\n this.isRandomVal = true;\n }\n else if (this.randomValues.has(cellTxt)) {\n if (argVal.indexOf('=RAND()') > -1 || argVal.indexOf('=NOW()') > -1 || argVal.indexOf('NOW()') > -1 || argVal.indexOf('RAND()') > -1 || argVal.indexOf('=RANDBETWEEN(') > -1 ||\n argVal.indexOf('RANDBETWEEN(') > -1) {\n this.randomValues.set(cellTxt, changeArgs.getFormulaValue());\n }\n else if (changeArgs.getFormulaValue().toUpperCase() !== this.randomValues.get(cellTxt.toUpperCase())) {\n this.randomValues.delete(cellTxt);\n randStrVal = randStrVal.split(cellTxt + this.parseArgumentSeparator).join('').split(this.parseArgumentSeparator + cellTxt).join('').split(cellTxt).join('');\n this.randCollection = randStrVal.split(this.parseArgumentSeparator);\n }\n if (this.randomValues.size === 0 && this.randCollection.length) {\n this.isRandomVal = false;\n this.randomValues.clear();\n this.randCollection = [];\n }\n }\n }\n if (changeArgs.getFormulaValue() && changeArgs.getFormulaValue()[0] === this.getFormulaCharacter()) {\n this.cell = cellTxt;\n var formula = void 0;\n if (!isNullOrUndefined(isCompute)) {\n isCompute = isCalculate;\n }\n if (this.getFormulaInfoTable().has(cellTxt)) {\n formula = this.getFormulaInfoTable().get(cellTxt);\n if (changeArgs.getFormulaValue() !== formula.getFormulaText() || formula.getParsedFormula() == null) {\n formula.setFormulaText(changeArgs.getFormulaValue());\n if (this.getDependentFormulaCells().has(this.cell)) {\n this.clearFormulaDependentCells(this.cell);\n }\n try {\n formula.setParsedFormula(this.parser.parseFormula(changeArgs.getFormulaValue()));\n }\n catch (ex) {\n formula.setFormulaValue(ex);\n isCompute = false;\n }\n }\n else {\n this.parser.isError = false;\n }\n if (isCompute) {\n this.parser.isFormulaParsed = true;\n var cValue = this.calculateFormula(formula.getParsedFormula(), refresh);\n isComputedValueChanged = cValue !== formula.getFormulaValue() && (!this.parentObject.isEdit ||\n cValue !== this.formulaErrorStrings[FormulasErrorsStrings.CircularReference]);\n formula.setFormulaValue(cValue);\n }\n }\n else {\n formula = new FormulaInfo();\n formula.setFormulaText(changeArgs.getFormulaValue());\n if (!this.getDependentFormulaCells().has(cellTxt)) {\n this.getDependentFormulaCells().set(cellTxt, new Map());\n }\n this.getFormulaInfoTable().set(cellTxt, formula);\n try {\n formula.setParsedFormula(this.parser.parseFormula(changeArgs.getFormulaValue()));\n }\n catch (ex) {\n formula.setFormulaValue(ex);\n isCompute = false;\n }\n if (isCompute) {\n var cValue = this.calculateFormula(formula.getParsedFormula(), refresh);\n isComputedValueChanged = cValue !== this.formulaErrorStrings[FormulasErrorsStrings.CircularReference];\n formula.setFormulaValue(cValue);\n }\n }\n if (isCompute) {\n /* eslint-disable */\n if (this.parentObject.setValueRowCol === undefined) {\n this.setValueRowCol(this.getSheetID(pgrid) + 1, formula.getFormulaValue(), changeArgs.getRowIndex(), changeArgs.getColIndex());\n }\n else {\n this.parentObject.setValueRowCol(this.getSheetId(pgrid), formula.getFormulaValue(), changeArgs.getRowIndex(), changeArgs.getColIndex(), formula.getFormulaText(), isRandomFormula);\n }\n /* eslint-enable */\n }\n }\n else if (this.getFormulaInfoTable().has(cellTxt)) {\n this.getFormulaInfoTable().delete(cellTxt);\n if (this.getDependentFormulaCells().has(cellTxt)) {\n this.clearFormulaDependentCells(cellTxt);\n }\n }\n if (isCompute && isComputedValueChanged && this.getDependentCells().has(cellTxt) &&\n (this.parentObject.calculationMode === 'Automatic' ||\n !this.parentObject.isEdit ||\n refreshDependentCells) && this.getDependentCells().get(cellTxt).toString() !== cellTxt) {\n this.refreshDependentCells(cellTxt, undefined, undefined, randomFormulaRefreshing, isDelete, deletedRange, refreshDependentCells, action);\n }\n };\n /**\n * @hidden\n * @param {number} value - specify the value\n * @param {string | number} formulaValue - specify the formula value.\n * @param {number} row - specify the row\n * @param {number} col - specify the col.\n * @returns {void} - to set value row and column.\n */\n /**\n * Writes a computed value into standalone storage for the given sheet/row/column.\n *\n * @param {string | number | boolean | Object} value - Sheet id used to build the storage key.\n * @param {string | number | Object} formulaValue - Value to store.\n * @param {number} row - 1-based row index.\n * @param {number} col - 1-based column index.\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Calculate.prototype.setValueRowCol = function (value, formulaValue, row, col) {\n /* No Implementation */\n };\n Calculate.prototype.getSortedSheetNames = function () {\n var family = this.getSheetFamilyItem(this.grid);\n if (family != null && family.sheetNameToToken != null) {\n if (this.sortedSheetNames != null) {\n return this.sortedSheetNames;\n }\n var arr_1 = [];\n family.sheetNameToToken.forEach(function (_value, key) {\n arr_1.push(key);\n });\n arr_1.sort(function (a, b) { return b.length - a.length; });\n this.sortedSheetNames = arr_1;\n }\n return this.sortedSheetNames;\n };\n /**\n * Extracts an error line/label from an exception message when present.\n *\n * @param {string} error - Error object or message.\n * @returns {string} - Error line text, or an empty string.\n * @hidden\n */\n Calculate.prototype.getErrorLine = function (error) {\n /* eslint-disable-next-line */\n var errorStack = error.stack ? error.stack.split('\\n')[1].split(':') : null;\n return errorStack ? errorStack[errorStack.length - 2] : null; // Getting row number of the error file.\n };\n /**\n * Allocates a new sheet family id for registering grids as sheets.\n *\n * @returns {string | number} - New family id.\n * @hidden\n */\n Calculate.prototype.createSheetFamilyID = function () {\n if (this.sheetFamilyID === Number.MAX_SAFE_INTEGER) {\n this.sheetFamilyID = Number.MIN_SAFE_INTEGER;\n }\n return this.sheetFamilyID++;\n };\n /**\n * Shared MIN / MAX evaluation over argument tokens.\n *\n * @param {string[]} args - Numeric argument tokens.\n * @param {string | number | Object} operation - `\"min\"` or `\"max\"`.\n * @returns {string} - Aggregate result string or error token.\n * @hidden\n */\n Calculate.prototype.computeMinMax = function (args, operation) {\n var result;\n var argVal;\n var isSubtotalFormula = false;\n if (args.length) {\n var lastArgument = args[args.length - 1];\n if (lastArgument === 'isSubtotal') {\n isSubtotalFormula = true;\n args.pop();\n }\n }\n if (isNullOrUndefined(args) || args.length === 0) {\n return this.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];\n }\n result = (operation === 'max') ? this.minValue : this.maxValue;\n for (var k = 0, len = args.length; k < len; k++) {\n if (args[k].split(this.tic).join('').trim() === '') {\n result = 0;\n }\n }\n var argArr = args;\n if (argArr.length > 255) {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n for (var i = 0; i < argArr.length; i++) {\n if (argArr[i].indexOf(':') > -1 && this.isCellReference(argArr[i])) {\n var cellValue = this.getCellCollection(argArr[i]);\n for (var j = 0; j < cellValue.length; j++) {\n argVal = !isSubtotalFormula ? this.getValueFromArg(cellValue[j]) :\n this.getValueFromArg(cellValue[j], null, null, true);\n if (isSubtotalFormula && argVal.includes('SUBTOTAL(')) {\n continue;\n }\n var cellVal = this.parseFloat(argVal);\n if (argVal === '' || this.isNaN(this.parseFloat(cellVal)) || this.getErrorStrings().indexOf(argVal) > -1) {\n continue;\n }\n else {\n result = (operation === 'max') ? Math.max(result, cellVal) : Math.min(result, cellVal);\n }\n }\n }\n else {\n var val = !isSubtotalFormula ? this.getValueFromArg(argArr[i]) :\n this.getValueFromArg(argArr[i], null, null, true);\n if (isSubtotalFormula && val.includes('SUBTOTAL(')) {\n continue;\n }\n var cellVal = 0;\n var isCellRef = this.isCellReference(argArr[i]);\n var isEmptyCell = val === '' && isCellRef;\n var isStringCell = this.isNaN(this.parseFloat(val)) && isCellRef;\n var isBooleanCell = val === (this.trueValue || this.falseValue) && isCellRef;\n argArr[i] = argArr[i].startsWith('n') ? argArr[i].slice(1) : argArr[i];\n if (this.getErrorStrings().indexOf(val) > -1) {\n return val;\n }\n if (val === this.trueValue && argArr[i] === this.trueValue) {\n val = '1';\n }\n else if (val === this.falseValue && argArr[i] === this.falseValue) {\n val = '0';\n }\n else if (isEmptyCell || isStringCell || isBooleanCell) {\n continue;\n }\n if (val.indexOf('\"') > -1) {\n val = val.split(this.tic).join('');\n }\n if (this.isNaN(this.parseFloat(val))) {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n cellVal = this.parseFloat(val);\n result = operation === 'max' ? Math.max(result, cellVal) : Math.min(result, cellVal);\n }\n }\n if (result === this.minValue || result === this.maxValue) {\n result = 0;\n }\n return result.toString();\n };\n /**\n * Shared AVERAGE evaluation over argument tokens.\n *\n * @param {string[]} args - Numeric argument tokens.\n * @param {boolean} isSubtotalFormula - When `true`, applies SUBTOTAL visibility rules.\n * @returns {string} - Average as a string, or an error token.\n * @hidden\n */\n Calculate.prototype.calculateAvg = function (args, isSubtotalFormula) {\n var argArr = args;\n var cellColl = [];\n var cellVal;\n var value;\n var avgVal = 0;\n var countNum = 0;\n for (var k = 0; k < argArr.length; k++) {\n if (this.isCellReference(argArr[k])) {\n if (argArr[k].indexOf(':') > -1) {\n cellColl = this.getCellCollection(argArr[k]);\n for (var i = 0; i < cellColl.length; i++) {\n cellVal = !isSubtotalFormula ? this.getValueFromArg(cellColl[i]) :\n this.getValueFromArg(cellColl[i], null, null, true);\n if (isSubtotalFormula && cellVal.includes('SUBTOTAL(')) {\n continue;\n }\n if (this.getErrorStrings().indexOf(cellVal) > -1) {\n return cellVal;\n }\n else if (isNullOrUndefined(cellVal) || isNaN(this.parseFloat(cellVal)) || cellVal === '') {\n continue;\n }\n avgVal = avgVal + this.parseFloat(cellVal);\n countNum = countNum + 1;\n }\n }\n else {\n cellVal = !isSubtotalFormula ? this.getValueFromArg(argArr[k]) :\n this.getValueFromArg(argArr[k], null, null, true);\n if (isSubtotalFormula && cellVal.includes('SUBTOTAL(')) {\n continue;\n }\n if (this.getErrorStrings().indexOf(cellVal) > -1) {\n return cellVal;\n }\n else if (isNullOrUndefined(cellVal) || isNaN(this.parseFloat(cellVal)) || cellVal === '') {\n continue;\n }\n avgVal = avgVal + this.parseFloat(cellVal);\n countNum = countNum + 1;\n }\n }\n else {\n if (argArr[k].indexOf(this.tic) > -1) {\n if (isNaN(this.parseFloat(argArr[k].split(this.tic).join(''))) ||\n argArr[k].split(this.tic).join('').trim() === '') {\n return this.getErrorStrings()[CommonErrors.Value];\n }\n }\n if (argArr[k].length === 0 || args[k] === this.falseValue) {\n argArr[k] = '0';\n }\n if (args[k] === this.trueValue) {\n argArr[k] = '1';\n }\n value = this.getValueFromArg(argArr[k].split(this.tic).join(''));\n if (this.getErrorStrings().indexOf(value) > -1) {\n return value;\n }\n avgVal = avgVal + this.parseFloat(value);\n countNum = countNum + 1;\n }\n }\n if (countNum === 0) {\n return this.getErrorStrings()[CommonErrors.DivZero];\n }\n return (avgVal / countNum).toString();\n };\n /**\n * Registers a grid/model as a named sheet within a sheet family.\n *\n * @param {string} refName - Sheet reference name.\n * @param {Object} model - Grid / model object (or id string).\n * @param {string | number | Object} sheetFamilyID - Family id from {@link createSheetFamilyID}.\n * @returns {string} - Sheet token assigned to the model.\n */\n Calculate.prototype.registerGridAsSheet = function (refName, model, sheetFamilyID) {\n if (isNullOrUndefined(this.modelToSheetID)) {\n this.modelToSheetID = new Map();\n }\n if (isNullOrUndefined(this.modelToSheetID.get(model))) {\n this.modelToSheetID.set(model, sheetFamilyID);\n }\n var family = this.getSheetFamilyItem(model);\n family.isSheetMember = true;\n var tempRef = refName.toUpperCase();\n if (family.parentObjectToToken.size === 0) {\n family.parentObjectToToken = new Map();\n }\n if (family.sheetNameToParentObject.size === 0) {\n family.sheetNameToParentObject = new Map();\n }\n if (family.sheetNameToToken.size === 0) {\n family.sheetNameToToken = new Map();\n }\n if (family.tokenToParentObject.size === 0) {\n family.tokenToParentObject = new Map();\n }\n if (!isUndefined(family.sheetNameToParentObject.get(tempRef))) {\n var token = family.sheetNameToToken.get(tempRef);\n family.tokenToParentObject.set(token, model);\n family.parentObjectToToken.set(model, token);\n }\n else {\n var token = this.sheetToken + this.tokenCount.toString() + this.sheetToken;\n this.tokenCount++;\n family.tokenToParentObject.set(token, model);\n family.parentObjectToToken.set(model, token);\n family.sheetNameToToken.set(tempRef, token);\n family.sheetNameToParentObject.set(tempRef, model);\n }\n this.sortedSheetNames = null;\n return refName;\n };\n /**\n * Unregisters a sheet name (or all sheets) from a sheet family.\n *\n * @param {string} refName - Sheet reference name to remove.\n * @param {Object} model - Grid / model object associated with the sheet.\n * @param {Object} unRegisterAll - When `true`, removes all registered sheets for the model.\n * @returns {void}\n */\n Calculate.prototype.unregisterGridAsSheet = function (refName, model, unRegisterAll) {\n var _this = this;\n var modelArr = [model];\n if (unRegisterAll) {\n modelArr = [];\n if (!isNullOrUndefined(this.modelToSheetID)) {\n this.modelToSheetID.forEach(function (value, key) {\n modelArr.push(key);\n });\n }\n }\n modelArr.forEach(function (value) {\n var family = _this.getSheetFamilyItem(value);\n var refName1 = (unRegisterAll ? value : refName).toUpperCase();\n if (family.sheetNameToParentObject != null && family.sheetNameToParentObject.has(refName1)) {\n family.sheetNameToParentObject.delete(refName1);\n var token = family.sheetNameToToken.get(refName1);\n family.sheetNameToToken.delete(refName1);\n family.tokenToParentObject.delete(token);\n family.parentObjectToToken.delete(value);\n }\n if (_this.modelToSheetID && _this.modelToSheetID.has(value)) {\n _this.modelToSheetID.delete(value);\n }\n });\n this.sortedSheetNames = null;\n };\n /**\n * Parses and evaluates a formula expression in one call (always re-parses).\n *\n * @param {string} formula - Formula text to evaluate.\n * @param {boolean} isFromComputeExpression - Internal flag passed through to {@link computeFormula}.\n * @returns {string} - Computed value or error token.\n *\n * @example\n * ```ts\n * engine.computeExpression('=AVERAGE(1,2,3)'); // '2'\n * ```\n */\n Calculate.prototype.computeExpression = function (formula, isFromComputeExpression) {\n var parsedFormula = this.parser.parseFormula(formula);\n var calcValue = this.computeFormula(parsedFormula, isFromComputeExpression);\n return calcValue;\n };\n Calculate.prototype.isSheetMember = function () {\n var family = this.getSheetFamilyItem(this.grid);\n return isNullOrUndefined(family) ? false : family.isSheetMember;\n };\n /**\n * Releases engine state (stored values, named ranges, dependency graphs, sheet\n * families, volatile tracking, and library formulas).\n *\n * Call when the engine instance is no longer needed.\n *\n * @returns {void}\n */\n Calculate.prototype.destroy = function () {\n this.resetKeys();\n if (this.dependentCells) {\n this.dependentCells.clear();\n this.dependentCells = null;\n }\n if (this.dependentFormulaCells) {\n this.dependentFormulaCells.clear();\n this.dependentFormulaCells = null;\n }\n if (this.formulaInfoTable) {\n this.formulaInfoTable.clear();\n this.formulaInfoTable = null;\n }\n this.namedRanges.clear();\n this.randomValues.clear();\n this.randCollection = [];\n this.dependencyCollection = [];\n this.uniqueRange = [];\n this.sortRange = [];\n this.sortedSheetNames = null;\n this.evaluatingKeys.clear();\n if (this.sheetFamiliesList) {\n this.sheetFamiliesList.forEach(function (family) {\n if (family.sheetDependentFormulaCells) {\n family.sheetDependentFormulaCells.clear();\n }\n if (family.sheetFormulaInfotable) {\n family.sheetFormulaInfotable.clear();\n }\n if (family.tokenToParentObject) {\n family.tokenToParentObject.clear();\n }\n if (family.parentObjectToToken) {\n family.parentObjectToToken.clear();\n }\n if (family.sheetNameToParentObject) {\n family.sheetNameToParentObject.clear();\n }\n if (family.sheetNameToToken) {\n family.sheetNameToToken.clear();\n }\n });\n this.sheetFamiliesList.clear();\n this.sheetFamiliesList = null;\n }\n if (this.modelToSheetID) {\n this.modelToSheetID.clear();\n this.modelToSheetID = null;\n }\n this.defaultFamilyItem = null;\n this.lFormulas.clear();\n if (this.parser) {\n this.parser.destroy();\n }\n this.parentObject = null;\n this.grid = null;\n if (typeof this.destroy === 'function') {\n try {\n this.destroy();\n }\n catch (_e) {\n /* Base.destroy may require DOM; ignore in headless destroy */\n }\n }\n };\n /**\n * Recomputes volatile random formula cells tracked by the engine.\n *\n * @param {string} cellRef - Cell reference that triggered the refresh (removed from the random set when present).\n * @hidden\n * @returns {void}\n */\n Calculate.prototype.refreshRandValues = function (cellRef) {\n var rowIdx;\n var colIdx;\n var value;\n var tokenRef = '';\n var family;\n if (this.randomValues.has(cellRef)) {\n this.randomValues.delete(cellRef);\n var randIdx = this.randCollection.indexOf(cellRef);\n if (randIdx > -1) {\n this.randCollection.splice(randIdx, 1);\n }\n if (this.randomValues.size === 0 && !this.randCollection.length) {\n this.randomValues.clear();\n this.randCollection = [];\n }\n }\n for (var i = 0; i < this.randomValues.size; i++) {\n rowIdx = this.rowIndex(this.randCollection[i]);\n colIdx = this.colIndex(this.randCollection[i]);\n tokenRef = (parseFloat(this.getSheetToken(this.randCollection[i]).split(this.sheetToken).join('')) + 1).toString();\n family = this.getSheetFamilyItem(tokenRef);\n this.grid = family.sheetNameToParentObject.get(tokenRef);\n value = this.randomValues.get(this.randCollection[i]);\n value = this.computeFormula(value);\n if (this.parentObject.setValueRowCol === undefined) {\n this.setValueRowCol(this.getSheetID(this.grid) + 1, value, rowIdx, colIdx);\n }\n else {\n this.parentObject.setValueRowCol(this.getSheetId(this.grid), value, rowIdx, colIdx);\n }\n }\n };\n /**\n * Recalculates cells that depend on `cellRef` according to calculation mode and options.\n *\n * @hidden\n * @param {string} cellRef - Changed cell reference.\n * @param {string} uniqueCell - Optional UNIQUE spill context cell to skip.\n * @param {string} dependentCell - Accumulator of already-refreshed dependents (used for recursion).\n * @param {boolean} isRandomFormula - Whether refresh is for volatile random formulas.\n * @param {boolean} isDelete - Whether refresh follows a delete.\n * @param {string} deletedRange - Deleted range indexes.\n * @param {string | number | Object} refreshDependentCells - Forces dependent updates.\n * @param {string | number | Object} action - Optional action label (for example `\"calculate\"`).\n */\n Calculate.prototype.refreshDependentCells = function (cellRef, uniqueCell, dependentCell, isRandomFormula, isDelete, deletedRange, refreshDependentCells, action) {\n var _this = this;\n var refreshCells;\n if (!dependentCell) {\n refreshCells = true;\n dependentCell = [];\n }\n var family = this.getSheetFamilyItem(this.grid);\n try {\n var dependentCells = this.getDependentCells().get(cellRef);\n if (dependentCells && dependentCells.length !== 0 &&\n (this.parentObject.calculationMode === 'Automatic' ||\n refreshDependentCells || action === 'calculate')) {\n var i = void 0;\n for (i = 0; i < dependentCells.length; i++) {\n var dCell = dependentCells[i];\n if ((uniqueCell && dCell.indexOf(uniqueCell) > -1) || dCell === cellRef || dependentCell.indexOf(dCell) > -1) {\n continue;\n }\n var token = this.getSheetToken(dCell);\n var sheets = this.parentObject.sheets;\n var sheetIdx = this.parentObject.activeSheetIndex;\n if (token.length) {\n this.grid = family.tokenToParentObject.get(token);\n var sheetId = Number(this.grid);\n var sheetName = '';\n if (!this.isNaN(sheetId) && sheets) {\n for (var i_1 = 0; i_1 < sheets.length; i_1++) {\n if (sheets[i_1].id === sheetId) {\n sheetName = sheets[i_1].name;\n sheetIdx = i_1;\n }\n }\n }\n this.actCell = sheetName + '!' + dCell.split(token)[1];\n }\n else {\n this.actCell = dCell.split(token)[1];\n }\n try {\n var calculateFormula = function (cell, formulaInfo) {\n if (formulaInfo) {\n _this.cell = cell;\n _this.parser.isFormulaParsed = true;\n formulaInfo.setFormulaValue(_this.calculateFormula(formulaInfo.getParsedFormula(), true));\n }\n };\n var rowIdx = this.rowIndex(dCell);\n var colIdx = this.colIndex(dCell);\n var formulaInfo = this.getFormulaInfoTable().get(dCell);\n if (this.parentObject.setValueRowCol === undefined) {\n calculateFormula(dCell, formulaInfo);\n this.setValueRowCol(this.getSheetID(this.grid) + 1, formulaInfo.getFormulaValue(), rowIdx, colIdx);\n }\n else {\n var cell = sheets && sheets[sheetIdx].rows &&\n sheets[sheetIdx].rows[rowIdx - 1] && sheets[sheetIdx].rows[rowIdx - 1].cells &&\n sheets[sheetIdx].rows[rowIdx - 1].cells[colIdx - 1];\n var val = void 0;\n if (cell && cell.formula && cell.formula.toLowerCase().includes('unique')) {\n if (!this.uniqueCells || this.uniqueCells.indexOf(dCell) === -1) {\n if (!this.uniqueCells) {\n this.uniqueCells = [];\n }\n this.uniqueCells.push(dCell);\n calculateFormula(dCell, formulaInfo);\n val = formulaInfo.getFormulaValue();\n this.uniqueCells.splice(this.uniqueCells.indexOf(dCell), 1);\n if (!this.uniqueCells.length) {\n this.uniqueCells = null;\n }\n }\n else {\n continue;\n }\n }\n else if (cell && cell.formula && cell.formula.toLowerCase().includes('sort')) {\n if (!this.sortCells || this.sortCells.indexOf(dCell) === -1) {\n if (!this.sortCells) {\n this.sortCells = [];\n }\n this.sortCells.push(dCell);\n calculateFormula(dCell, formulaInfo);\n val = formulaInfo.getFormulaValue();\n this.sortCells.splice(this.sortCells.indexOf(dCell), 1);\n if (!this.sortCells.length) {\n this.sortCells = null;\n }\n }\n else {\n continue;\n }\n }\n else {\n if (dependentCell.indexOf(dCell) === -1) {\n dependentCell.push(dCell);\n }\n val = null;\n }\n this.parentObject.setValueRowCol(this.getSheetId(this.grid), val, rowIdx, colIdx, formulaInfo.getFormulaText());\n }\n this.refreshDependentCells(dCell, null, dependentCell, null, isDelete);\n }\n catch (ex) {\n continue;\n }\n }\n }\n if (refreshCells) {\n if (!isDelete && deletedRange && deletedRange.length === 4) {\n var token = this.getSheetToken(cellRef);\n var deletedCell = [];\n for (var sRIdx = deletedRange[0], eRIdx = deletedRange[2]; sRIdx <= eRIdx; sRIdx++) {\n for (var sCIdx = deletedRange[1], eCIdx = deletedRange[3]; sCIdx <= eCIdx; sCIdx++) {\n if (sRIdx === eRIdx && sCIdx === eCIdx) {\n break;\n }\n var cell = token + getCellAddress(sRIdx, sCIdx);\n this.refreshDependentCells(cell, null, dependentCell, null, isDelete);\n deletedCell.push(cell);\n }\n }\n var ranges_1 = new Set(deletedCell);\n if (dependentCell) {\n dependentCell = dependentCell.filter(function (item) { return !ranges_1.has(item); });\n }\n }\n var sheets_1 = this.parentObject.sheets;\n if (!sheets_1) {\n dependentCell = [];\n }\n dependentCell.forEach(function (cell) {\n var sheetIdx;\n var sheetId = _this.getSheetId(family.tokenToParentObject.get(_this.getSheetToken(cell)));\n for (var idx = 0; idx < sheets_1.length; idx++) {\n if (sheets_1[idx].id === sheetId) {\n sheetIdx = idx;\n break;\n }\n }\n var rowIdx = _this.rowIndex(cell) - 1;\n var colIdx = _this.colIndex(cell) - 1;\n var cellObj = sheets_1[sheetIdx].rows[rowIdx] &&\n sheets_1[sheetIdx].rows[rowIdx].cells[colIdx];\n if (cellObj) {\n _this.parentObject.notify('calculateFormula', { cell: cellObj, rowIdx: rowIdx, colIdx: colIdx, sheetIndex: sheetIdx, isDependentRefresh: true, isRandomFormula: isRandomFormula, action: action });\n }\n });\n }\n }\n finally {\n if (this.getDependentCells().has(cellRef)) {\n this.grid = family.tokenToParentObject.get(this.getSheetToken(cellRef));\n }\n }\n };\n __decorate([\n Event()\n ], Calculate.prototype, \"onFailure\", void 0);\n Calculate = __decorate([\n NotifyPropertyChanges\n ], Calculate);\n return Calculate;\n}(Base));\nexport { Calculate };\n/**\n * Formula parse/evaluation error raised by the Calculate engine.\n *\n * @hidden\n */\nvar FormulaError = /** @class */ (function () {\n /**\n * @param {string | number | Object} errorMessage - Error description.\n * @param {string} formulaAutoCorrection - Whether formula auto-correction is available.\n */\n function FormulaError(errorMessage, formulaAutoCorrection) {\n /** When `true`, the parser suggests an auto-corrected formula. */\n this.formulaCorrection = false;\n this.message = errorMessage;\n this.formulaCorrection = formulaAutoCorrection;\n }\n return FormulaError;\n}());\nexport { FormulaError };\n/**\n * Cached formula text, parsed form, and computed value for a cell.\n *\n * @hidden\n */\nvar FormulaInfo = /** @class */ (function () {\n function FormulaInfo() {\n /** Calculation generation id for cache invalidation. */\n this.calcID = Number.MIN_VALUE + 1;\n this.calcID1 = Number.MIN_VALUE + 1;\n }\n /**\n * Returns the stored formula text for this cell.\n *\n * @returns {string} - Formula text, or `undefined` when unset.\n */\n FormulaInfo.prototype.getFormulaText = function () {\n return this.formulaText;\n };\n /**\n * Sets the formula text for this cell.\n *\n * @param {string | number | boolean | Object} value - Formula text (typically including leading `=`).\n * @returns {void}\n */\n FormulaInfo.prototype.setFormulaText = function (value) {\n this.formulaText = value;\n };\n /**\n * Returns the last computed value for this cell.\n *\n * @returns {string} - Computed value or error token.\n */\n FormulaInfo.prototype.getFormulaValue = function () {\n return this.formulaValue;\n };\n /**\n * Sets the computed value for this cell.\n *\n * @param {string | number | boolean | Object} value - Computed result.\n * @returns {void}\n */\n FormulaInfo.prototype.setFormulaValue = function (value) {\n this.formulaValue = value;\n };\n /**\n * Returns the parser token string for this cell's formula.\n *\n * @returns {string | number} - Parsed formula tokens.\n */\n FormulaInfo.prototype.getParsedFormula = function () {\n return this.parsedFormula;\n };\n /**\n * Sets the parser token string for this cell's formula.\n *\n * @param {string | number | boolean | Object} value - Parsed formula tokens from {@link Parser.parseFormula}.\n * @returns {void}\n */\n FormulaInfo.prototype.setParsedFormula = function (value) {\n this.parsedFormula = value;\n };\n return FormulaInfo;\n}());\nexport { FormulaInfo };\n/**\n * Per-family sheet registration and dependency tables used when multiple grids share an engine.\n *\n * @hidden\n */\nvar CalcSheetFamilyItem = /** @class */ (function () {\n function CalcSheetFamilyItem() {\n /** Whether this family participates in multi-sheet evaluation. */\n this.isSheetMember = false;\n /** Maps parent grid objects to their sheet tokens. */\n this.parentObjectToToken = new Map();\n /** Formula dependency map scoped to this sheet family. */\n this.sheetDependentFormulaCells = new Map();\n /** Maps sheet names to parent grid objects. */\n this.sheetNameToParentObject = new Map();\n /** Maps sheet names to sheet tokens. */\n this.sheetNameToToken = new Map();\n /** Maps sheet tokens to parent grid objects. */\n this.tokenToParentObject = new Map();\n /** Formula info table scoped to this sheet family. */\n this.sheetFormulaInfotable = new Map();\n }\n return CalcSheetFamilyItem;\n}());\nexport { CalcSheetFamilyItem };\n/**\n * Converts a 1-based column index to Excel column letters.\n *\n * @param {number} col - 1-based column index.\n * @returns {string | number} - Column letters (for example `1` → `\"A\"`).\n * @hidden\n */\nexport function getAlphalabel(col) {\n var cols = [];\n var n = 0;\n var charText = 'A';\n while (col > 0 && n < 9) {\n col--;\n var aCharNo = charText.charCodeAt(0);\n cols[n] = String.fromCharCode(col % 26 + aCharNo);\n col = parseInt((col / 26).toString(), 10);\n n++;\n }\n var chs = [];\n for (var i = 0; i < n; i++) {\n chs[n - i - 1] = cols[i];\n }\n return chs.join('');\n}\n/**\n * Arguments describing a cell value/formula change for {@link Calculate.valueChanged}.\n *\n * @hidden\n */\nvar ValueChangedArgs = /** @class */ (function () {\n /**\n * @param {number} row - 1-based row index.\n * @param {number} col - 1-based column index.\n * @param {string | number | boolean | Object} value - Formula text or literal value.\n */\n function ValueChangedArgs(row, col, value) {\n this.row = row;\n this.col = col;\n this.value = value;\n this.getRowIndex = function () {\n return row;\n };\n this.setRowIndex = function (value) {\n row = value;\n };\n this.getColIndex = function () {\n return col;\n };\n this.setColIndex = function (value) {\n col = value;\n };\n this.getFormulaValue = function () {\n return value;\n };\n return this;\n }\n return ValueChangedArgs;\n}());\nexport { ValueChangedArgs };\n"],"names":["CommonErrors","FormulasErrorsStrings","ExcelFileFormats","CalculateCommon","prototype","getModuleName","parent","this","getSkeletonVal","value","isExternalFileLink","formula","format","isExternalFile","indexOf","calculateDefaultLocale","OperatorsCannotStartWithExpression","CannotParse","BadLibrary","InvalidCharInFrontOf","NumberContains2DecimalPoints","ExpressionCannotEndWithAnOperator","InvalidCharactersFollowingWithOperator","InvalidCharInNumber","MismatchedParentheses","UnknownFormulaName","RequiresASingleArgument","Requires3Args","InvalidMathArgument","Requires2Args","TooComplex","MissingFormula","ImproperFormula","InvalidExpression","CellEmpty","BadFormula","EmptyExpression","MismatchedTics","WrongNumberArguments","InvalidArguments","IterationsDoNotConverge","AlreadyRegistered","CalculationOverflow","MissingSheet","CannotParseUnderscore","ExpressionCannotEndWithAnOperatorUnderscore","CategoryAll","isDateTime","date","Object","toString","call","isNaN","valueOf","isNumber","val","parseFloat","dateToInt","isTime","isTimeOnly","startDate","Date","startDateUTC","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","diffDays","parseInt","FormulaModuleBase","parseDouble","NaN","getSheetReference","range","sheetToken","lastIndexOf","substring","calculateIFS","ranges","isAvgIfs","result_1","sumVal_1","separator_1","_this","isNullOrUndefined","length","formulaErrorStrings","includes","tic","getParseArgumentSeparator","split","forEach","criteria","trim","join","computeIfsFormulas","falseValue","resolveTextArg","arg","getValueFromArg","getErrorStrings","isCellReference","removeTics","resolveNumberArg","errCollection","upper","toUpperCase","trueValue","pct","replace","num","Value","owner","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","MathAggregateFormulas","_super","ComputeSUM","args","_i","arguments","isSubtotalFormula","pop","sum","maxDecimalLength","argArr","setMaxDecimalLength","Math","max","i","argValue","cellCollection","getCellCollection","j","orgValue","toFixed","ComputeSUMIF","result","computeSumIfAndAvgIf","ComputeSUMIFS","ComputeSUMPRODUCT","_b","count","mulValues","len","cells","Name","push","k","index","startsWith","s1","startRow","rowIndex","substr","endRow","_a","col1","colIndex","col2","row","col","cellRef","convertAlpha","ComputePRODUCT","parseVal","product","argsHit","rangevalue","formulas","formulaName","category","description","isChar","charCodeAt","isValidCellReference","text","endNum","textLength","cellText","cellTextLength","cellColIndex","cell","rowText","isNumeric","charCode","cellNumber","rangeSplit","MathRoundingFormulas","ComputeROUND","round","numStr","digStr","isInvalidNumStr","Number","isInvalidDigStr","x","digits","preciseRound","mult","pow","numValue","decimalValue","factor","absValue","abs","sign","floor","ceil","ComputeROUNDUP","decimalCount","str","arg1","arg2","decimalArr","ComputeROUNDDOWN","decimalIndex","ComputeFLOOR","argVal","match","fnum","significance","Num","DivZero","ComputeCEILING","cnum","ComputeINT","argsValue","ComputeTRUNC","orgNumValue","orgDigitValue","processArgs","actualValue","values","hours","ComputeODD","isOne","ComputeEVEN","value1","MathMiscFormulas","ComputeABS","absVal","cellvalue","ComputeRAND","random","ComputeRANDBETWEEN","NA","min","ComputeRADIANS","PI","ComputeDEGREES","ComputePI","ComputeMOD","Div","value2","ComputeFACT","fact","getValue","ComputeDECIMAL","val1","radix","isInteger","ComputeLN","log","ComputeLOG","orgBaseValue","LN10","ComputePOWER","powValue","power","Infinity","ComputeSQRT","arrValue","sqrtValue","parsedValue","dateTimeCheck","hostParseDate","isDate","sqrt","ComputeEXP","logNumValue","exp","MathTrigFormulas","unaryMath","fn","domainCheck","ComputeSIN","sin","ComputeCOS","cos","ComputeTAN","tan","ComputeASIN","asin","n","ComputeACOS","acos","ComputeATAN","atan","ComputeSINH","sinh","ComputeCOSH","cosh","ComputeTANH","tanh","ComputeLOG10","log10","ComputeSQRTPI","ComputeATAN2","y","atan2","ComputeSIGN","ComputeQUOTIENT","numerator","denominator","trunc","MathTrigHyperbolicFormulas","isFinite","ComputeACOSH","acosh","ComputeASINH","asinh","ComputeATANH","atanh","erf","ax","t","erfc","normCDF","mean","stdDev","SQRT2","normInv","a","c","q","r","parseComplexText","realOnly","trimmed","direct","re","im","imagOnly","formatComplex","suffix","factorial","binomialCoeff","logGamma","coef","g","gamma","lg","lowerRegularizedGamma","term","chiSquareCDF","df","chiSquareInv","lo","hi","mid","fCDF","d1","d2","betaRegularized","lnBeta","front","f","m","m2","aa","delta","fInv","besselI","nn","besselJ","besselK","besselY0","j0","innerSum","partial","besselY","y0","y1","j1","yn","logNormCDF","logNormInv","tCDF","ib","tInv","betaDist","alpha","betaParam","betaInv","MathCombinatoricsFormulas","ComputeFACTDOUBLE","ComputeMULTINOMIAL","reduce","denom","ComputePERMUT","nArg","kArg","ComputeSERIESSUM","coeffs","ComputeROMAN","numArg","form","formArg","toRoman","MathNumberFormulas","collectNumbers","nums","list","isArray","gcd2","ComputeGCD","ComputeLCM","ComputeMROUND","number","multiple","ComputeCOMBIN","ComputeSUMSQ","getColumnHeaderText","String","fromCharCode","getCellIndexes","address","colIdx","reverse","getCellAddress","sRow","sCol","getRangeAddress","getRangeIndexes","sheetBounds","cellindexes","refArr","rowCount","indexes","RegExp","test","colHeader","colCount","MatrixFormulaBase","readMatrix","ref","stripped","rows","cols","matrix","flattenMatrix","transpose","sep","parts","determinant","det","minor","inverse","aug","slice","maxRow","tmp","pivot","inv","multiply","inner","apply","MatrixFormulas","ComputeMDETERM","ComputeMINVERSE","ComputeMMULT","ComputeTRANSPOSE","EngineeringBaseFormulas","parseBaseNumber","base","cleaned","pattern","resolveBaseArg","formatToBase","places","limit","2","maxPlaces","8","10","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","16","undefined","ComputeBIN2DEC","binary","charAt","ComputeBIN2HEX","binTo","ComputeBIN2OCT","targetBase","dec","ComputeDEC2BIN","decTo","ComputeDEC2HEX","ComputeDEC2OCT","ComputeHEX2DEC","ComputeHEX2BIN","hexOctTo","bind","ComputeHEX2OCT","ComputeOCT2DEC","ComputeOCT2BIN","ComputeOCT2HEX","toDec","EngineeringMiscFormulas","ComputeDELTA","bArg","ComputeGESTEP","step","stepArg","ComputeERF","lower","ComputeERFC","EngineeringConvertFormulas","ComputeCONVERT","fromUnit","toLowerCase","toUnit","UNITS","entry","from","to","viaBase","find","e","viaBaseTo","toBase","EngineeringBesselFormulas","besselArgs","ComputeBESSELI","parsed","ComputeBESSELJ","ComputeBESSELK","ComputeBESSELY","FinancialAnnuityFormulas","resolveOptional","defaultValue","ComputeFV","rate","nper","pmt","type","pv","ComputePV","fv","ComputePMT","ComputeNPER","when","den","ComputeIPMT","per","pmtResult","balance","ComputePPMT","ipmt","ComputeNPV","npv","cf","ComputeRATE","guess","next","FinancialDepreciationFormulas","ComputeSLN","cost","salvage","life","ComputeSYD","ComputeDB","period","month","totalDep","frac","prev","ComputeDDB","book","dep","FinancialRatesFormulas","ComputeEFFECT","nominal","npery","ComputeNOMINAL","effect","ComputeFVSCHEDULE","principal","FinancialCashflowFormulas","collectCashflows","flows","npvAtRate","npvDerivative","ComputeIRR","guessArg","flowArgs","hasPos","hasNeg","iter","dnpv","ComputeMIRR","financeRate","reinvestRate","posPv","negFv","FinancialSecuritiesFormulas","ComputeDOLLARDE","price","fraction","whole","ComputeDOLLARFR","ComputeDISC","pr","days","basis","settlement","maturity","ComputeDURATION","coupon","yld","ComputeINTRATE","investment","redemption","ComputeRECEIVED","ComputeCUMIPMT","cumIpmtPrinc","ComputeCUMPRINC","interest","start","end","computePmt","total","ComputeVDB","ComputeXIRR","dates","lastArg","valueArg","dateArg","valCells","dateCells","vList","dList","v","t0","npvAt","StatisticalFormulas","ComputeAVERAGE","calculateAvg","ComputeAVERAGEIF","argList","resultVal","ComputeAVERAGEA","cellValue","parseValue","argArrs","cellCol","processLogicalCellValue","ComputeAVERAGEIFS","ComputeCOUNT","cellColl","ComputeCOUNTA","ComputeCOUNTIF","stack","op","isStringVal","endsWith","condition","getANDComputedValue","isAsterisk","isAsteriskOnly","criteriaValue","isCellReferenceValue","isWildCardCondition","asteriskIndex","arithMarker","getParseDecimalSeparator","findWildCardValue","processLogical","ComputeCOUNTIFS","computeCountIfsFormulas","ComputeCOUNTBLANK","cellRange","ComputeMIN","computeMinMax","ComputeMAX","StatisticalAdvancedFormulas","ComputeMEDIAN","cellVal","cValue","sort","n1","n2","splice","ComputeSMALL","valueCollection","numArr","originalValue","smallIndex","finalIndex","ComputeLARGE","largeIndex","ComputeSLOPE","actuaValue","yPoints","xPoints","dataCollection","getDataCollection","sumXY","sumX2","sumX","sumY","ComputeINTERCEPT","xValues","yValues","diff","calculation","isSum","ComputeGEOMEAN","dev","s","isBoolean","cellStr","cellStr_1","ComputeRSQ","validCount","yValuesRange","xValuesRange","xValue","yValue","meanX","meanArray","getMeanArray","meanY","correlation","getCorrelation","diffY","diffX","denominatorX","denominatorY","cellsData","StatisticalDispersionFormulas","collectSample","includeTextAsZero","variance","population","sumSq","ComputeSTDEV","stdevVar","ComputeSTDEVP","ComputeVAR","ComputeVARP","asVar","ComputeMODE","counts","Map","best","bestCount","get","set","ComputeRANK","order","o","idx","ComputeMAXA","minMaxA","ComputeMINA","isMax","StatisticalSampleBase","collectPair","xCells","yCells","xList","yList","xv","yv","StatisticalMomentsFormulas","ComputeAVEDEV","avg","ComputeDEVSQ","ComputeHARMEAN","sumInv","ComputeSKEW","m3","ComputeKURT","m4","ComputeSTANDARDIZE","std","StatisticalCorrelationFormulas","regressionStats","pair","sxx","syy","sxy","dx","dy","ComputeCORREL","stats","ComputePEARSON","ComputeCOVAR","ComputeFORECAST","xVal","slope","ComputeSTEYX","ssRes","StatisticalPercentileFormulas","sortedSample","percentile","sorted","pos","ComputePERCENTILE","ComputePERCENTRANK","sig","rank","ComputeQUARTILE","quart","0","1","3","4","StatisticalDistributionFormulas","ComputeNORMDIST","cumulative","cumArg","z","ComputeNORMSDIST","ComputeNORMINV","ComputeNORMSINV","ComputePOISSON","ComputeBINOMDIST","successes","trials","prob","pmf","ComputeEXPONDIST","lambda","ComputeCONFIDENCE","size","StatisticalIfsFormulas","ComputeMAXIFS","aggregateIfs","ComputeMINIFS","valueRange","valueCells","criteriaPairs","criteriaCellsList","matched","ok","matchesCriteria","valStr","criteriaArg","StatisticalExtendedFormulas","stdevVarA","ComputeSTDEVA","ComputeSTDEVPA","ComputeVARA","ComputeVARPA","ComputeTRIMMEAN","ComputeFISHER","ComputeFISHERINV","e2y","ComputeGAMMALN","sumSquaresPair","mode","ComputeSUMX2MY2","ComputeSUMX2PY2","ComputeSUMXMY2","StatisticalDistributionExtendedFormulas","parseCumulative","cum","ComputeCRITBINOM","ComputeNEGBINOMDIST","failures","ComputeHYPGEOMDIST","sampleS","numSample","popS","numPop","M","N","ComputeWEIBULL","beta","ComputeLOGNORMDIST","ComputeLOGINV","ComputeGAMMADIST","scaled","ComputeGAMMAINV","ComputeCHIDIST","ComputeCHIINV","ComputeCHITEST","chiSquareTest","actual","expected","chi2","ComputeFDIST","ComputeFINV","ComputeZTEST","sigma","ComputePROB","low","high","inRange","ComplexNumbersFormulas","resolveComplex","ComputeCOMPLEX","ComputeIMABS","ComputeIMAGINARY","ComputeIMREAL","ComputeIMCONJUGATE","ComputeIMSUM","complexReduce","ComputeIMSUB","ComputeIMPRODUCT","ComputeIMDIV","initial","acc","ComputeIMEXP","expRe","ComputeIMLN","ComputeIMLOG10","log10e","ln","ComputeIMLOG2","log2e","LN2","ComputeIMSQRT","theta","sqrtR","ComputeIMPOWER","rn","angle","ComputeIMARGUMENT","ComputeIMSIN","ComputeIMCOS","DateTimeFormulas","ComputeDATE","nestedFormula","year","day","getSerialDateFromDate","fromOADate","Internationalization","parentObject","locale","formatDate","skeleton","ComputeDAY","dateVal","parseDate","intToDate","ComputeTODAY","dt","now","parser","storedStringText","setDateFormat","getSheetId","grid","calculateDate","ComputeDAYS","endDate","dateCheck","getTime","ComputeWEEKDAY","ComputeTIME","h","timeCheck","minutes","seconds","ComputeEDATE","dValue","checkDate","mValue","checkDateFormat","setMonth","setDate","ComputeEOMONTH","monthValue","dateValue","ComputeDATEVALUE","computedDvalue","toOADate","ComputeHOUR","intToTime","dateObj","parse","toLocaleDateString","ComputeMINUTE","ComputeSECOND","ComputeNOW","ComputeMONTH","argsVal","DateTimeExtraFormulas","toSerial","ComputeYEAR","serial","ComputeWEEKNUM","returnType","rt","yearStart","dayOffset","startDow","getDay","dayOfYear","week","ComputeTIMEVALUE","ampm","asDate","ComputeDAYS360","method","m1","day1","y2","day2","flag","ComputeYEARFRAC","isWeekend","dow","holidaySet","Set","add","ComputeNETWORKDAYS","holidays","has","ComputeWORKDAY","daysArg","current","remaining","LogicalFormulas","ComputeIF","skipTick","cellValues","condUpper","parsedVal","indexOfTic","ComputeAND","computeAndOrNot","ComputeOR","ComputeNOT","ComputeIFS","ComputeIFERROR","LogicalExtraFormulas","ComputeTRUE","ComputeFALSE","isTruthy","ComputeXOR","trueCount","ComputeIFNA","ComputeSWITCH","expression","pairs","valueIdx","resultIdx","matchVal","LookupFormulas","ComputeCHOOSE","getIndexValue","ComputeINDEX","area","rangeArr","Ref","startCol","endCol","ComputeMATCH","matchType","isStringValue","isWildCardVal","isStringCollection","curGrid","cellIdxs","endRow_1","endCol_1","cellValue_1","family","getSheetFamilyItem","sheetId","tokenToParentObject","parentObjectToToken","getCellValue","getCellValueFn","j_1","performAction","indexVal","isIndexFound","matchValue","matchCollectionValue","ComputeLOOKUP","computeLookup","ComputeVLOOKUP","computeVHLookup","ComputeHLOOKUP","ComputeADDRESS","absIndex","refStyle","getAlphalabel","ComputeSUBTOTAL","_l","concat","_c","_d","_e","_f","_g","_h","ComputeCONCAT","_j","_k","ComputeTEXT","secondArg","s2","dTime","checkString","intl","formatChar","isH","isMFound","lastCharIndex","getSkeleton","getDisplayText","getDateFormat","LookupRefFormulas","ComputeROW","act","actCell","first","ComputeCOLUMN","ComputeROWS","ComputeCOLUMNS","ComputeHYPERLINK","link","friendly","ComputeOFFSET","height","width","w","sheet","baseRow","baseCol","LookupRefExtraFormulas","ComputeINDIRECT","refText","a1Style","style","ComputeAREAS","ComputeFORMULATEXT","key","fullKey","infoTable","lookupKey","sheetPrefix","getSheetID","getFormulaInfoTable","getFormulaText","ComputeISREF","LookupArrayFormulas","flattenValues","single","valuesEqual","na","nb","ComputeXLOOKUP","lookupRaw","lookupValue","lookupArr","returnArr","ifNotFound","matchMode","mm","foundIdx","candidate","ComputeXMATCH","ComputeTEXTSPLIT","colDelim","ComputeTOCOL","flattenJoin","ComputeTOROW","asCol","ignore","ig","filtered","Calc","ComputeCHOOSECOLS","chooseAxis","ComputeCHOOSEROWS","byRow","last","r1","c1","r2","c2","absIdx","absCol","createSortComparer","descending","localeCompare","sortCollection","collection","comparer","ArrayFormulas","ComputeUNIQUE","isComputeExp","byColumn","exactlyOne","splitArray","spreadSheetUsedRange","dependencyCollection","clearDependency","uniqueActCell","swap","rowIdx","endRowIdx","endColIdx","sheetIndex","colDiff","temp","rowDiff","computeExpResult_1","uniqueCollection","duplicateCollection","tmp2","exactOne","item","actRowIdx","actColIdx","dependencyLevel","isSpill","j_2","diff2","splitValue","uniqueRange","checkSpill","j_3","Spill","calcFamily","token","cellTxt","sheetNameToParentObject","j_4","setValueRefresh","refreshDependentCells","i_1","setValueRowCol","formulaString","spill","formulaAddress","formulaText","actCellSheetName","actCellAddr","j_5","ComputeSORT","eRowIdx","eColIdx","sheetIdx","colSort_1","numColl_1","strColl_1","booleanColl_1","emptyCellColl_1","totalColumn","sortRangeValuesHandler","sortedNumColl","sortedStrColl","sortedBooleanColl","sortedVal","id","JSON","stringify","sortActCell","activeCell","resultRows","resultCols","rowOffset","endCell","colOffset","sortRange","rowInc","colInc","actRowIdx_1","actColIdx_1","activeCell_1","actColIdx_2","actRowIdx_2","activeCell_2","TextFormulas","ComputeFIND","findText","withinText","startNum","ComputeCONCATENATE","argsList","tempStr","isConcat","ComputeT","ComputeEXACT","isCellRef","ComputeLEN","errorStrings","ComputeCHAR","char","ComputeCODE","ComputeDOLLAR","isEmpty","val2","divisor","decimalIdx","roundedNumber","formatNumber","ComputePROPER","TextExtraFormulas","ComputeLEFT","substringSide","ComputeRIGHT","fromLeft","ComputeMID","startIdx","numChars","ComputeUPPER","caseTransform","ComputeLOWER","ComputeTRIM","ComputeREPLACE","newText","ComputeSUBSTITUTE","oldText","instance","nth","found","ComputeREPT","times","ComputeSEARCH","ComputeVALUE","ComputeCLEAN","ComputeFIXED","decimals","noCommas","rounded","toLocaleString","fixed","intPart","grouped","fromEnd","ComputeTEXTJOIN","delimiter","ignoreEmptyFlag","ignoreEmpty","ComputeLEFTB","ComputeRIGHTB","ComputeMIDB","ComputeREPLACEB","ComputeSEARCHB","TextAdvancedFormulas","ComputeASC","code","ComputeTEXTBEFORE","inst","ComputeVALUETOTEXT","concise","fmt","ComputeARRAYTOTEXT","InformationFormulas","ComputeISNUMBER","isNestedFormula","isLogVal","InformationExtraFormulas","requireOne","ComputeISBLANK","bad","ComputeISTEXT","ComputeISNONTEXT","ComputeISLOGICAL","ComputeISERROR","ComputeISERR","ComputeISNA","ComputeISEVEN","parity","ComputeISODD","wantEven","even","ComputeN","ComputeNA","ComputeTYPE","InformationAdvancedFormulas","ComputeINFO","typeText","infoType","calculationMode","ComputeCELL","DateTimeIntlFormulas","weekendMask","weekendArg","mask","5","6","7","11","12","13","14","15","17","isWeekendMask","ComputeDATEDIF","unit","months","md","ym","anchor","yd","isLeapYear","MathCeilingEcmaFormulas","InformationEcmaFormulas","map","#NULL!","#DIV/0!","#VALUE!","#REF!","#NAME?","#NUM!","#N/A","#GETTING_DATA","TextEcmaFormulas","ComputeUSDOLLAR","ComputeFINDB","ComputeLENB","FinancialBondHelpers","yearDays","toDate","coupPCD","frequency","mat","monthsPer","addMonths","coupNCD","pcd","coupDays","ncd","daysBetween","coupDayBS","coupDaysNC","coupNum","_basis","FinancialCouponsFormulas","parseBondArgs","minLen","maxLen","red","coupArgs","ComputeCOUPDAYBS","bond","ComputeCOUPDAYS","ComputeCOUPDAYSNC","ComputeCOUPNCD","ComputeCOUPNUM","ComputeCOUPPCD","ComputeACCRINT","freq","issue","periodDays","ComputeACCRINTM","par","ComputeISPMT","ComputeMDURATION","ComputePRICE","dsc","ComputePRICEDISC","discount","ComputePRICEMAT","ds","ComputeTBILLPRICE","ComputeTBILLYIELD","ComputeTBILLEQ","yieldResult","ComputeXNPV","ComputeYIELD","priceResult","ComputeYIELDDISC","ComputeYIELDMAT","dm","FinancialAmortizationEcmaFormulas","ComputeAMORLINC","firstPeriod","purchased","ComputeAMORDEGRC","oddBondPrice","oddFirst","firstCoupon","ComputeODDFPRICE","ComputeODDLPRICE","oddBondYield","computePrice","priceArg","target","trialArgs","ComputeODDFYIELD","ComputeODDLYIELD","StatisticalEcmaFormulas","ComputeBETADIST","av","bv","ComputeBETAINV","ComputeTDIST","tails","cdf","ComputeTINV","ComputeTTEST","meanA","meanB","varA","varB","se","tt","ComputeFTEST","sampleVar","ComputeFREQUENCY","data","bins","sortedBins","fill","placed","DatabaseFormulas","readRange","rangeArg","rowStart","rowEnd","colStart","colEnd","addr","fieldIndex","fieldArg","headers","fieldVal","matchCriteria","criteriaRows","cr","crit","rowMatch","criterion","matchesCriterion","ops","rhs","lv","rv","collectMatching","databaseArg","numbersOnly","db","fieldIdx","critGrid","critHeaders","critRows","this_1","_loop_1","aligned","critAligned","requireThree","ComputeDAVERAGE","ComputeDCOUNT","ComputeDCOUNTA","ComputeDGET","ComputeDMAX","ComputeDMIN","ComputeDPRODUCT","ComputeDSUM","ComputeDSTDEV","ComputeDSTDEVP","ComputeDVAR","ComputeDVARP","RegressionEcmaFormulas","linearRegression","yArg","xArg","intercept","expRegression","lnY","meanLnY","ComputeLINEST","reg","ComputeLOGEST","ComputeTREND","xNew","xData","ComputeGROWTH","E","BasicFormulas","init","addFormulaCollection","functionName","formulaCategory","libraryFormulas","fName","handler","modules","mod","methodName","getSheetIndexByName","name","info","Parser","fkey","isTextEmpty","getFormulaCharacter","namedRanges","storedData","checkForNamedRangeAndKeyValue","findNamedRange","scopedRange","storeStrings","operators","firstOp","FormulaError","indexOfAny","tokens","setTokensForSheets","getSheetToken","emptyStr","checkScopedRange","processIndexArg","markLibraryFormulas","formulaAutoCorrection","ex","message","exception","isForceCalculable","formulaCorrection","computeForceCalculate","isFailureTriggered","trigger","ignoreBracet","parseSimple","CircularReference","exceptionArgs","errorMessage","getErrorLine","setStrings","isSubString","secondprevOp","secondDigit","arithemeticArr","logicalSym","secondnextOp","countDigit","specialSym","isDigit","firstDigit","rightBracket","leftBracket","isUpperChar","isOtherLangChar","sheetNameToToken","s_1","getActiveSheet","getNamedRanges","tempString","storedString","stringsColl","spaceString","expTokenArray","mulTokenArray","addTokenArray","mulCharArray","addCharArray","compareTokenArray","compareCharArray","expCharArray","andTokenArray","andCharArray","orCharArray","orTokenArray","stringLessEq","charLessEq","stringGreaterEq","charGreaterEq","stringNoEqual","charNoEqual","stringAnd","charAnd","stringOr","charOr","fixedReference","tokenEp","tokenEm","tokenMultiply","tokenDivide","tokenAdd","tokenSubtract","charMultiply","charDivide","charAdd","charSubtract","tokenLess","tokenGreater","tokenEqual","tokenLessEq","tokenGreaterEq","tokenNotEqual","charLess","charGreater","charEqual","charEp","charEm","tokenAnd","tokenOr","parseSimpleOperators","markers","tokenOrOp","currChar","decimalSep","left","right","leftIndex","rightIndex","isLeftBool","arithOp","isNotOperator","charNOTop","findLeftMarker","bracketCount","l","getCellFrom","uFound","updateDependentCell","findRightMarker","jTemp","inbracket","noCellReference","isPrevArithOp","arithMarker2","isCharacter","checkLetter","oneTokenFound","textLen","ret","bracketLevel","parseFormula","fKey","isError","isFormulaParsed","bracCount","rightParens","markNamedRanges","state_1","parenCount","leftParens","libFormula","getFunction","isValidDotFormulaName","argsSep","leftBraceIdx","criteriaStr","swapInnerParens","addParensToArgs","isIfErrorArg_1","beforeFormula","fSubstr","rightSides","lastIndexOfAny","oneTimeOnly","getTableRange","namerangeValue","findNextEndIndex","loc","braces","some","destroy","clear","__extends","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","maxRows","maxCols","Calculate","Base","lFormulas","formulaColl","enumerable","configurable","setLocale","host","l10n","refreshLocalizedStrings","getConstant","categoryCollection","getHostSheetInfo","getSheetInfo","isArgumentSeparatorChanged","parseArgumentSeparator","setParseArgumentSeparator","getParseDateTimeSeparator","parseDateTimeSeparator","setTreatEmptyStringAsZero","treatEmptyStringAsZero","getTreatEmptyStringAsZero","setParseDateTimeSeparator","onPropertyChanged","newProp","oldProp","resetKeys","keyToRowsMap","rowsToKeyMap","dependentCells","formulaDependentCellMap_1","cellRefObj_1","checkCircularReference_1","formulaCell","dependentCellMap","getDependentCells","getDependentFormulaCells","refCell","formalaRefCells","isSheetMember","sheetDependentFormulaCells","dependentFormulaCells","getLibraryFormulas","toUTCString","sheetFormulaInfotable","formulaInfoTable","isParseDecimalSeparatorChanged","parseDecimalSeparator","setParseDecimalSeparator","BadIndex","grd","convertedNum","isLetter","startIndex","model","calcId","sheetFamilyID","defaultFamilyItem","CalcSheetFamilyItem","sheetFamiliesList","modelToSheetID","setKeyValue","fInfo","FormulaInfo","cellPrefix","clearFormulaDependentCells","setFormulaText","getFormulaValue","setParsedFormula","setFormulaValue","dependentFormula","dependent","arrayRemove","delete","clearKeys","array","getKeyValue","fText","evaluatingKeys","computeFormula","getParsedFormula","addNamedRange","sheetScopeName","updateNamedRange","pName","updatedRange","updatedKey","removeNamedRange","arrCol","aCharValue","arr","row2","sheetTokenIndex","row1","isFromComputeExpression","calculateFormula","refresh","parsedText","lastIndexOfq","fNested","findLastIndexOfq","sFormula","isCustom","customArgs","parentQIdx","formula_1","argStr","separator","parameter","isInString","cFormula","formulatResult","processNestedFormula","computeValue","isAvgIf","argCount","isQuestionMark","opt","checkCriteria","criteriaRangeArray","sumRange","criteriaRange","sumEndCol","sumrange","getComputeSumIfValue","lookupArray","matchArray","lookupRange","matchupRange","findMaxVal","isArrayVector","arrvalue","lookupIndex","matchIndex","isValidLookup","isValidMatch","maxVal","minVal","lookupVal","wildcardResult","findClosestMatch","isVlookup","isConditionalFormula","lookupValUpper","isExactMatchLookup","colIdxVal","colNumIdx","rangeLookup","rowIdx_1","colIdx_1","sheetToken_1","lookupRangeVal","getCellValue_1","matchIndex_1","endIdx","lookupColText_1","getLookupRangeValue","matchColText_1","getMatchRangeValue","matchColText_2","matchIndex_2","matchedResult","lookupNumVal_1","criteriaValue_1","lookupValUpper_1","isMatchFound","matchVal_1","lookupNumVal_2","comparer_1","collator_1","checkMatchFn","skipCheck","Intl","Collator","sensitivity","compare","searchValue","sortedArray","midValue","compareResult","compareStrings","str1","str2","minLength","charCode1","charCode2","lookVal","finalText","checkRegex","compRight","compLeft","leftVal","rightVal","isLeft","isRight","trimmedVal","sumVal","getValueFromRange","sumRangeVal","isAnd","isOr","isNot","resultant","every","pFormula","isIfError","emptyStack","textName","parentCellValue","getParentObjectCellValue","leftIdx","isNestedFormulaVal","stackValue","errIndex","getValArithmetic","countValue","sCheck","operator","isErrorString","num1","decimalCount1","factor1","num2","decimalCount2","factor2","bigFactor","factors","isOnlyAsterisk","emptyValue1","emptyValue2","computeStoreCells","sCell","cellRanges","criterias","argArray","isCriteria","storeCell","storedCells","isCountIfs","isCountIfS","countVal","rangeLength","tempStoredCell","newCell","newCount","prevCriteria","prevCriteriaIdx","prevStoreCellIdx","criteriaRangeIndexes","isCriteriaFromOtherSheet","isSumFromOtherSheet","sumRangeSheet","criteriaRangeSheet","cellAlpha","newCellAlpha","cellNumeric","newCellNumeric","updatedCriteria","getOperatorAndCriteria","storedCell","avgValCount","sumRangeIndexes","lastCriteria","newArgValue","prevGrid","rangeIndexesArr","baseRange","baseRowCount","baseColCount","filteredCells","hasWildCards","rangeGrid","previousRangeIdx","updatedCell","rawCriteria","pText","fResult","formulaEndIdx","doubleNumber","resultDateUTC","isValidMonth","tempDay","dateTime","fString","lastIndexOflLeftBracket","isUnique","isSubtotal","isIFFormula","firstChar","singleTic","tokenAvail","opr","dateTime1900","pvtParse","fromIsDate","dateEventArgs","sheetToken1","containsBoth","isAlpha","isNum","charArray","isValidCell","textSplit","sortedSheetNamesCollection","getSortedSheetNames","tempSheetPlaceHolder","tokenIdx","alphabetStartIdx","search","sheetInfo","fromCell","getValueRowCol","curCell","addressValue","mappedKey","keyUpper","defineFunction","formulaDescription","window","valueChanged","changeArgs","isCalculate","usedRangeCol","sheetName","isRandomFormula","randomFormulaRefreshing","isDelete","deletedRange","action","pgrid","isComputedValueChanged","isCompute","getColIndex","getRowIndex","randomValues","randStrVal","randCollection","isRandomVal","isEdit","formulaValue","sortedSheetNames","arr_1","_value","error","errorStack","createSheetFamilyID","operation","minValue","maxValue","isEmptyCell","isStringCell","isBooleanCell","avgVal","countNum","registerGridAsSheet","refName","tempRef","isUndefined","tokenCount","unregisterGridAsSheet","unRegisterAll","modelArr","refName1","computeExpression","parsedFormula","refreshRandValues","tokenRef","randIdx","uniqueCell","dependentCell","refreshCells","dCell","sheets","activeSheetIndex","formulaInfo","uniqueCells","sortCells","deletedCell","sRIdx","eRIdx","sCIdx","eCIdx","ranges_1","filter","sheets_1","cellObj","notify","isDependentRefresh","Event","NotifyPropertyChanges","millisecondsOfaDay","L10n","calcID","MIN_VALUE","calcID1","aCharNo","chs","ValueChangedArgs","setRowIndex","setColIndex"],"mappings":"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"}
|