@speed-sheet/extension-formula 0.1.1 → 0.1.2

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context.ts","../src/errors.ts","../src/internal-ref-scan.ts","../src/refs.ts","../src/formula-bindings.ts","../src/registry/formulajs-catalog.json","../src/registry/meta.ts","../src/registry/buildRegistry.ts","../src/registry/categories.ts","../src/registry/index.ts","../src/fnMap.ts","../src/edit.ts","../src/evaluate.ts","../src/result.ts","../src/refSpans.ts","../src/engine.ts","../src/extension.ts"],"names":["ID","AXIS_ID_PATTERN","a","formulajs","text","tokens","SheetState","depKey"],"mappings":"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","file":"index.js","sourcesContent":["import * as Y from 'yjs'\nimport type { Sheet } from '@speed-sheet/core'\nimport { SheetState, buildIdIndexes } from '@speed-sheet/core'\nimport { depKey } from '@speed-sheet/shared'\n\nexport interface FormulaContext {\n readonly activeSheetId: string\n resolveSheetId(nameOrId: string | undefined): string | null\n getSheetName(sheetId: string): string\n resolveCellIds(sheetId: string, r: number, c: number): { rowId: string; colId: string } | null\n idsToDisplay(sheetId: string, rowId: string, colId: string): { r: number; c: number } | null\n expandIdRange(\n sheetId: string,\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n ): Array<{ rowId: string; colId: string }>\n /** Scalar by stable ids (canonical for evaluation). */\n getScalarById(\n sheetId: string,\n rowId: string,\n colId: string,\n visiting: Set<string>,\n ): number | string | boolean | null\n /** Display-coordinate scalar (A1 boundary only). */\n getScalar(sheetId: string, r: number, c: number, visiting: Set<string>): number | string | boolean | null\n}\n\nfunction getSheetState(sheetsMap: Y.Map<unknown>, sheetId: string): SheetState | null {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) return null\n return new SheetState(ySheet)\n}\n\nexport function createFormulaContext(sheet: Sheet): FormulaContext {\n const ydoc = sheet.ydoc\n const sheetsMap = ydoc.getMap('sheets')\n\n return {\n activeSheetId: sheet.getActiveSheetId(),\n\n getSheetName(sheetId: string): string {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n return (ySheet?.get('name') as string) ?? sheetId\n },\n\n resolveSheetId(nameOrId: string | undefined): string | null {\n if (!nameOrId) return sheet.getActiveSheetId()\n if (sheetsMap.has(nameOrId)) return nameOrId\n for (const id of sheet.getSheetIds()) {\n const ySheet = sheetsMap.get(id) as Y.Map<unknown> | undefined\n const name = ySheet?.get('name') as string | undefined\n if (name === nameOrId) return id\n }\n return null\n },\n\n resolveCellIds(sheetId: string, r: number, c: number): { rowId: string; colId: string } | null {\n const state = getSheetState(sheetsMap, sheetId)\n return state?.resolveCellIds(r, c) ?? null\n },\n\n idsToDisplay(sheetId: string, rowId: string, colId: string): { r: number; c: number } | null {\n const state = getSheetState(sheetsMap, sheetId)\n if (!state) return null\n const { rowIndex, colIndex } = buildIdIndexes(state.rowOrder, state.colOrder)\n const r = rowIndex.get(rowId)\n const c = colIndex.get(colId)\n if (r === undefined || c === undefined) return null\n return { r, c }\n },\n\n expandIdRange(\n sheetId: string,\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n ): Array<{ rowId: string; colId: string }> {\n const state = getSheetState(sheetsMap, sheetId)\n if (!state) return []\n const { rowIndex, colIndex } = buildIdIndexes(state.rowOrder, state.colOrder)\n const r0 = rowIndex.get(rowId0)\n const c0 = colIndex.get(colId0)\n const r1 = rowIndex.get(rowId1)\n const c1 = colIndex.get(colId1)\n if (r0 === undefined || c0 === undefined || r1 === undefined || c1 === undefined) return []\n\n const out: Array<{ rowId: string; colId: string }> = []\n const ra = Math.min(r0, r1)\n const rb = Math.max(r0, r1)\n const ca = Math.min(c0, c1)\n const cb = Math.max(c0, c1)\n for (let r = ra; r <= rb; r++) {\n for (let c = ca; c <= cb; c++) {\n const rowId = state.rowOrder.get(r)\n const colId = state.colOrder.get(c)\n if (rowId && colId) out.push({ rowId, colId })\n }\n }\n return out\n },\n\n getScalarById(\n sheetId: string,\n rowId: string,\n colId: string,\n visiting: Set<string>,\n ): number | string | boolean | null {\n const visitKey = depKey(sheetId, rowId, colId)\n if (visiting.has(visitKey)) return null\n\n const state = getSheetState(sheetsMap, sheetId)\n if (!state) return null\n\n const { rowIndex, colIndex } = buildIdIndexes(state.rowOrder, state.colOrder)\n const r = rowIndex.get(rowId)\n const c = colIndex.get(colId)\n if (r === undefined || c === undefined) return null\n\n const data = state.getCellData(r, c)\n if (!data) return null\n const v = data.v\n if (v === null || v === undefined) return null\n return v\n },\n\n getScalar(\n sheetId: string,\n r: number,\n c: number,\n visiting: Set<string>,\n ): number | string | boolean | null {\n const ids = this.resolveCellIds(sheetId, r, c)\n if (!ids) return null\n return this.getScalarById(sheetId, ids.rowId, ids.colId, visiting)\n },\n }\n}\n\nexport function scalarToDisplay(v: number | string | boolean | null): string {\n if (v === null) return ''\n if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE'\n return String(v)\n}\n\nexport function coerceNumber(v: number | string | boolean | null): number {\n if (v === null || v === '') return 0\n if (typeof v === 'boolean') return v ? 1 : 0\n const n = Number(v)\n return Number.isFinite(n) ? n : 0\n}\n\nexport function collectRangeScalars(\n ctx: FormulaContext,\n sheetId: string,\n row: [number, number],\n column: [number, number],\n visiting: Set<string>,\n): number[] {\n const out: number[] = []\n for (let r = row[0]; r <= row[1]; r++) {\n for (let c = column[0]; c <= column[1]; c++) {\n out.push(coerceNumber(ctx.getScalar(sheetId, r, c, visiting)))\n }\n }\n return out\n}\n\nexport function collectIdRangeScalars(\n ctx: FormulaContext,\n sheetId: string,\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n visiting: Set<string>,\n): number[] {\n const cells = ctx.expandIdRange(sheetId, rowId0, colId0, rowId1, colId1)\n return cells.map(({ rowId, colId }) =>\n coerceNumber(ctx.getScalarById(sheetId, rowId, colId, visiting)),\n )\n}\n","/** Excel 风格公式错误(显示值 + 提示文案) */\n\nexport type FormulaErrorCode =\n | 'ERROR'\n | 'VALUE'\n | 'NAME'\n | 'REF'\n | 'DIV0'\n | 'NA'\n | 'NUM'\n | 'NULL'\n\nexport interface FormulaErrorDef {\n code: FormulaErrorCode\n /** 单元格显示,如 #VALUE! */\n display: string\n /** 悬停提示(中文) */\n message: string\n}\n\nexport const FORMULA_ERRORS: Record<FormulaErrorCode, FormulaErrorDef> = {\n ERROR: {\n code: 'ERROR',\n display: '#ERROR!',\n message: '公式解析错误',\n },\n VALUE: {\n code: 'VALUE',\n display: '#VALUE!',\n message: '值类型错误:运算或函数参数类型不匹配(例如数字与文本相加)',\n },\n NAME: {\n code: 'NAME',\n display: '#NAME?',\n message: '无法识别名称:函数名拼写错误、文本未加双引号,或工作表名引用不正确',\n },\n REF: {\n code: 'REF',\n display: '#REF!',\n message: '无效引用:引用的单元格、区域或工作表不存在',\n },\n DIV0: {\n code: 'DIV0',\n display: '#DIV/0!',\n message: '除数为零:公式中除以 0 或空单元格',\n },\n NA: {\n code: 'NA',\n display: '#N/A',\n message: '找不到匹配值:查找或匹配函数未找到对应数据',\n },\n NUM: {\n code: 'NUM',\n display: '#NUM!',\n message: '数值错误:结果超出可计算范围或数值不合法',\n },\n NULL: {\n code: 'NULL',\n display: '#NULL!',\n message: '空交集错误:区域引用之间使用了空格而非逗号或冒号',\n },\n}\n\nconst ERROR_DISPLAY_SET = new Set(\n Object.values(FORMULA_ERRORS).map((e) => e.display),\n)\n\nexport function formulaErrorResult(code: FormulaErrorCode): {\n value: null\n m: string\n error: FormulaErrorCode\n errorMessage: string\n} {\n const def = FORMULA_ERRORS[code]\n return {\n value: null,\n m: def.display,\n error: def.code,\n errorMessage: def.message,\n }\n}\n\nexport function isFormulaErrorDisplay(text: string): boolean {\n return ERROR_DISPLAY_SET.has(text.trim())\n}\n\nexport function getFormulaErrorMessage(\n code: string | undefined,\n fallback?: string,\n): string {\n if (code && code in FORMULA_ERRORS) {\n return FORMULA_ERRORS[code as FormulaErrorCode].message\n }\n return fallback ?? FORMULA_ERRORS.ERROR.message\n}\n","import { AXIS_ID_PATTERN } from '@speed-sheet/shared'\n\nconst ID = AXIS_ID_PATTERN\nconst INTERNAL_REF_FULL_RE = new RegExp(\n `#(?:@[^|#]+\\\\|)?${ID}:${ID}(?:~${ID}:${ID})?#`,\n 'g',\n)\n\n/** Ranges of `#r_…:c_…#` tokens — A1 scanners must not match inside these. */\nexport function getInternalRefRanges(formula: string): Array<{ start: number; end: number }> {\n const ranges: Array<{ start: number; end: number }> = []\n INTERNAL_REF_FULL_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = INTERNAL_REF_FULL_RE.exec(formula)) !== null) {\n ranges.push({ start: m.index, end: m.index + m[0].length })\n }\n return ranges\n}\n\nexport function overlapsInternalRef(formula: string, start: number, end: number): boolean {\n for (const r of getInternalRefRanges(formula)) {\n if (start < r.end && end > r.start) return true\n }\n return false\n}\n\nexport function hasInternalRefs(formula: string): boolean {\n INTERNAL_REF_FULL_RE.lastIndex = 0\n return INTERNAL_REF_FULL_RE.test(formula)\n}\n\nexport function extractInternalRefTokens(formula: string): string[] {\n const tokens: string[] = []\n INTERNAL_REF_FULL_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = INTERNAL_REF_FULL_RE.exec(formula)) !== null) {\n tokens.push(m[0])\n }\n return tokens\n}\n","/** A1 风格引用解析(与 Excel / Luckysheet 子集对齐) */\n\nexport interface CellAddress {\n r: number\n c: number\n}\n\nexport interface RangeAddress {\n row: [number, number]\n column: [number, number]\n}\n\nexport interface SheetRef {\n /** 工作表名(展示名)或 id */\n sheet?: string\n cell?: CellAddress\n range?: RangeAddress\n}\n\n/** 列字母 → 0-based 列号 */\nexport function letterToCol(letters: string): number {\n let n = 0\n const s = letters.toUpperCase()\n for (let i = 0; i < s.length; i++) {\n n = n * 26 + (s.charCodeAt(i) - 64)\n }\n return n - 1\n}\n\nexport function colToLetter(c: number): string {\n let s = ''\n let n = c\n do {\n s = String.fromCharCode(65 + (n % 26)) + s\n n = Math.floor(n / 26) - 1\n } while (n >= 0)\n return s\n}\n\nexport function formatA1(r: number, c: number): string {\n return `${colToLetter(c)}${r + 1}`\n}\n\n/** 解析 A1 或 A1:B10 */\nexport function parseRefToken(token: string): SheetRef | null {\n const trimmed = token.trim()\n if (!trimmed) return null\n\n let sheet: string | undefined\n let local = trimmed\n\n const bang = trimmed.indexOf('!')\n if (bang >= 0) {\n let sheetPart = trimmed.slice(0, bang)\n if (sheetPart.startsWith(\"'\") && sheetPart.endsWith(\"'\")) {\n sheetPart = sheetPart.slice(1, -1)\n }\n sheet = sheetPart\n local = trimmed.slice(bang + 1)\n }\n\n const rangeMatch = /^([A-Za-z]+)(\\d+):([A-Za-z]+)(\\d+)$/.exec(local)\n if (rangeMatch) {\n const r0 = Number(rangeMatch[2]) - 1\n const c0 = letterToCol(rangeMatch[1])\n const r1 = Number(rangeMatch[4]) - 1\n const c1 = letterToCol(rangeMatch[3])\n return {\n sheet,\n range: {\n row: [Math.min(r0, r1), Math.max(r0, r1)],\n column: [Math.min(c0, c1), Math.max(c0, c1)],\n },\n }\n }\n\n const cellMatch = /^([A-Za-z]+)(\\d+)$/.exec(local)\n if (cellMatch) {\n return {\n sheet,\n cell: {\n r: Number(cellMatch[2]) - 1,\n c: letterToCol(cellMatch[1]),\n },\n }\n }\n\n return null\n}\n\nimport { overlapsInternalRef } from './internal-ref-scan'\n\n/** 从公式文本中提取全部 A1 引用 token(跳过 `#r_…:c_…#` 内部区域) */\nexport function extractRefTokens(formula: string): string[] {\n const tokens: string[] = []\n const re =\n /(?:'[^']+'|[\\w\\u4e00-\\u9fff\\u3400-\\u9fff]+!)?[A-Za-z]{1,4}\\d+(?::[A-Za-z]{1,4}\\d+)?/g\n let m: RegExpExecArray | null\n while ((m = re.exec(formula)) !== null) {\n const start = m.index\n const end = start + m[0].length\n if (overlapsInternalRef(formula, start, end)) continue\n tokens.push(m[0])\n }\n return tokens\n}\n","/**\n * Formula semantic bindings: stable rowId/colId in storage, A1 for display only.\n *\n * Internal cell ref: #r_<nanoid>:c_<nanoid>#\n * Internal range: #r_<nanoid>:c_<nanoid>~r_<nanoid>:c_<nanoid>#\n * Cross-sheet cell: #@sheetId|r_<nanoid>:c_<nanoid>#\n */\nimport { AXIS_ID_PATTERN } from '@speed-sheet/shared'\nimport type { FormulaContext } from './context'\nimport {\n extractInternalRefTokens,\n hasInternalRefs,\n} from './internal-ref-scan'\nimport { extractRefTokens, formatA1, parseRefToken } from './refs'\n\nexport { extractInternalRefTokens, hasInternalRefs } from './internal-ref-scan'\n\nconst ID = AXIS_ID_PATTERN\n\nexport function formatInternalCellRef(rowId: string, colId: string, sheetId?: string): string {\n if (sheetId) return `#@${sheetId}|${rowId}:${colId}#`\n return `#${rowId}:${colId}#`\n}\n\nexport function formatInternalRangeRef(\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n sheetId?: string,\n): string {\n if (sheetId) return `#@${sheetId}|${rowId0}:${colId0}~${rowId1}:${colId1}#`\n return `#${rowId0}:${colId0}~${rowId1}:${colId1}#`\n}\n\nexport interface InternalRef {\n sheetId?: string\n rowId: string\n colId: string\n endRowId?: string\n endColId?: string\n}\n\nexport function parseInternalRefToken(token: string): InternalRef | null {\n const range = new RegExp(`^#(?:@([^|#]+)\\\\|)?(${ID}):(${ID})~(${ID}):(${ID})#$`).exec(token)\n if (range) {\n return {\n sheetId: range[1],\n rowId: range[2]!,\n colId: range[3]!,\n endRowId: range[4]!,\n endColId: range[5]!,\n }\n }\n const cell = new RegExp(`^#(?:@([^|#]+)\\\\|)?(${ID}):(${ID})#$`).exec(token)\n if (cell) {\n return { sheetId: cell[1], rowId: cell[2]!, colId: cell[3]! }\n }\n return null\n}\n\nfunction resolveIdsForA1(\n ctx: FormulaContext,\n sheetId: string,\n r: number,\n c: number,\n): { rowId: string; colId: string } | null {\n return ctx.resolveCellIds(sheetId, r, c)\n}\n\nfunction a1RefToInternal(\n ctx: FormulaContext,\n defaultSheetId: string,\n token: string,\n): string | null {\n const ref = parseRefToken(token)\n if (!ref) return null\n\n const sheetResolved = ref.sheet ? ctx.resolveSheetId(ref.sheet) : defaultSheetId\n if (!sheetResolved) return null\n\n if (ref.range) {\n const a = resolveIdsForA1(ctx, sheetResolved, ref.range.row[0], ref.range.column[0])\n const b = resolveIdsForA1(ctx, sheetResolved, ref.range.row[1], ref.range.column[1])\n if (!a || !b) return null\n const cross = sheetResolved !== defaultSheetId ? sheetResolved : undefined\n return formatInternalRangeRef(a.rowId, a.colId, b.rowId, b.colId, cross)\n }\n\n if (ref.cell) {\n const ids = resolveIdsForA1(ctx, sheetResolved, ref.cell.r, ref.cell.c)\n if (!ids) return null\n const cross = sheetResolved !== defaultSheetId ? sheetResolved : undefined\n return formatInternalCellRef(ids.rowId, ids.colId, cross)\n }\n\n return null\n}\n\n/** User-facing A1 formula → canonical internal formula (stored in `f`). */\nexport function displayFormulaToInternal(\n displayFormula: string,\n ctx: FormulaContext,\n defaultSheetId: string,\n): string {\n const text = displayFormula.trim()\n if (!text.startsWith('=')) return text\n\n let out = text\n const tokens = [...extractRefTokens(text)].sort((a, b) => b.length - a.length)\n for (const token of tokens) {\n const internal = a1RefToInternal(ctx, defaultSheetId, token)\n if (internal) out = out.split(token).join(internal)\n }\n return out\n}\n\nfunction internalRefToA1(ctx: FormulaContext, ref: InternalRef, defaultSheetId: string): string | null {\n const sheetId = ref.sheetId ?? defaultSheetId\n\n const toA1 = (rowId: string, colId: string): string | null => {\n const pos = ctx.idsToDisplay(sheetId, rowId, colId)\n if (!pos) return null\n return formatA1(pos.r, pos.c)\n }\n\n if (ref.endRowId != null && ref.endColId != null) {\n const a = toA1(ref.rowId, ref.colId)\n const b = toA1(ref.endRowId, ref.endColId)\n if (!a || !b) return null\n const local = a === b ? a : `${a}:${b}`\n if (ref.sheetId && ref.sheetId !== defaultSheetId) {\n const name = ctx.getSheetName(ref.sheetId)\n return `'${name.replace(/'/g, \"''\")}'!${local}`\n }\n return local\n }\n\n const a = toA1(ref.rowId, ref.colId)\n if (!a) return null\n if (ref.sheetId && ref.sheetId !== defaultSheetId) {\n const name = ctx.getSheetName(ref.sheetId)\n return `'${name.replace(/'/g, \"''\")}'!${a}`\n }\n return a\n}\n\n/** Stored internal formula → formula-bar A1 display. */\nexport function internalFormulaToDisplay(\n internalFormula: string,\n ctx: FormulaContext,\n defaultSheetId: string,\n): string {\n const text = internalFormula.trim()\n if (!text.startsWith('=')) return text\n if (!hasInternalRefs(text)) return text\n\n let out = text\n const tokens = [...extractInternalRefTokens(text)].sort((a, b) => b.length - a.length)\n for (const token of tokens) {\n const ref = parseInternalRefToken(token)\n if (!ref) continue\n const a1 = internalRefToA1(ctx, ref, defaultSheetId)\n if (a1) out = out.split(token).join(a1)\n }\n return out\n}\n","{\"ABS\":{\"category\":\"math\",\"formulajs\":true},\"ACCRINT\":{\"category\":\"financial\",\"formulajs\":true},\"ACCRINTM\":{\"category\":\"financial\",\"formulajs\":false},\"ACOS\":{\"category\":\"math\",\"formulajs\":true},\"ACOSH\":{\"category\":\"math\",\"formulajs\":true},\"ACOT\":{\"category\":\"math\",\"formulajs\":true},\"ACOTH\":{\"category\":\"math\",\"formulajs\":true},\"AGGREGATE\":{\"category\":\"math\",\"formulajs\":true},\"ADDRESS\":{\"category\":\"lookup\",\"formulajs\":false},\"AMORDEGRC\":{\"category\":\"financial\",\"formulajs\":false},\"AMORLINC\":{\"category\":\"financial\",\"formulajs\":false},\"AND\":{\"category\":\"logical\",\"formulajs\":true},\"ARABIC\":{\"category\":\"math\",\"formulajs\":true},\"AREAS\":{\"category\":\"lookup\",\"formulajs\":false},\"ARRAYTOTEXT\":{\"category\":\"text\",\"formulajs\":false},\"ASC\":{\"category\":\"text\",\"formulajs\":false},\"ASIN\":{\"category\":\"math\",\"formulajs\":true},\"ASINH\":{\"category\":\"math\",\"formulajs\":true},\"ATAN\":{\"category\":\"math\",\"formulajs\":true},\"ATAN2\":{\"category\":\"math\",\"formulajs\":true},\"ATANH\":{\"category\":\"math\",\"formulajs\":true},\"AVEDEV\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGE\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGEA\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGEIF\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGEIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"BAHTTEXT\":{\"category\":\"text\",\"formulajs\":false},\"BASE\":{\"category\":\"math\",\"formulajs\":true},\"BESSELI\":{\"category\":\"engineering\",\"formulajs\":true},\"BESSELJ\":{\"category\":\"engineering\",\"formulajs\":true},\"BESSELK\":{\"category\":\"engineering\",\"formulajs\":true},\"BESSELY\":{\"category\":\"engineering\",\"formulajs\":true},\"BETADIST\":{\"category\":\"statistical\",\"formulajs\":true},\"BETAINV\":{\"category\":\"statistical\",\"formulajs\":true},\"BIN2DEC\":{\"category\":\"engineering\",\"formulajs\":true},\"BIN2HEX\":{\"category\":\"engineering\",\"formulajs\":true},\"BIN2OCT\":{\"category\":\"engineering\",\"formulajs\":true},\"BINOMDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"BINOMDISTRANGE\":{\"category\":\"statistical\",\"formulajs\":true},\"BINOMINV\":{\"category\":\"statistical\",\"formulajs\":true},\"BITAND\":{\"category\":\"engineering\",\"formulajs\":true},\"BITLSHIFT\":{\"category\":\"engineering\",\"formulajs\":true},\"BITOR\":{\"category\":\"engineering\",\"formulajs\":true},\"BITRSHIFT\":{\"category\":\"engineering\",\"formulajs\":true},\"BITXOR\":{\"category\":\"engineering\",\"formulajs\":true},\"BYCOL\":{\"category\":\"logical\",\"formulajs\":false},\"BYROW\":{\"category\":\"logical\",\"formulajs\":false},\"CEILING\":{\"category\":\"compatibility\",\"formulajs\":true},\"CEILINGMATH\":{\"category\":\"math\",\"formulajs\":true},\"CEILINGPRECISE\":{\"category\":\"math\",\"formulajs\":true},\"CELL\":{\"category\":\"information\",\"formulajs\":false},\"CHAR\":{\"category\":\"text\",\"formulajs\":true},\"CHIDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"CHIINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"CHITEST\":{\"category\":\"compatibility\",\"formulajs\":true},\"CHISQDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQDISTRT\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQINV\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQINVRT\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQTEST\":{\"category\":\"statistical\",\"formulajs\":true},\"CHOOSE\":{\"category\":\"lookup\",\"formulajs\":true},\"CHOOSECOLS\":{\"category\":\"lookup\",\"formulajs\":false},\"CHOOSEROWS\":{\"category\":\"lookup\",\"formulajs\":false},\"CLEAN\":{\"category\":\"text\",\"formulajs\":true},\"CODE\":{\"category\":\"text\",\"formulajs\":true},\"COLUMN\":{\"category\":\"lookup\",\"formulajs\":true},\"COLUMNS\":{\"category\":\"lookup\",\"formulajs\":true},\"COMBIN\":{\"category\":\"math\",\"formulajs\":true},\"COMBINA\":{\"category\":\"math\",\"formulajs\":true},\"COMPLEX\":{\"category\":\"engineering\",\"formulajs\":true},\"CONCAT\":{\"category\":\"text\",\"formulajs\":true},\"CONCATENATE\":{\"category\":\"text\",\"formulajs\":true},\"CONFIDENCE\":{\"category\":\"compatibility\",\"formulajs\":false},\"CONFIDENCENORM\":{\"category\":\"statistical\",\"formulajs\":true},\"CONFIDENCET\":{\"category\":\"statistical\",\"formulajs\":true},\"CONVERT\":{\"category\":\"engineering\",\"formulajs\":true},\"CORREL\":{\"category\":\"statistical\",\"formulajs\":true},\"COS\":{\"category\":\"math\",\"formulajs\":true},\"COSH\":{\"category\":\"math\",\"formulajs\":true},\"COT\":{\"category\":\"math\",\"formulajs\":true},\"COTH\":{\"category\":\"math\",\"formulajs\":true},\"COUNT\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTA\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTBLANK\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTIF\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"COUPDAYBS\":{\"category\":\"financial\",\"formulajs\":false},\"COUPDAYS\":{\"category\":\"financial\",\"formulajs\":true},\"COUPDAYSNC\":{\"category\":\"financial\",\"formulajs\":false},\"COUPNCD\":{\"category\":\"financial\",\"formulajs\":false},\"COUPNUM\":{\"category\":\"financial\",\"formulajs\":false},\"COUPPCD\":{\"category\":\"financial\",\"formulajs\":false},\"COVAR\":{\"category\":\"compatibility\",\"formulajs\":true},\"COVARIANCEP\":{\"category\":\"statistical\",\"formulajs\":true},\"COVARIANCES\":{\"category\":\"statistical\",\"formulajs\":true},\"CRITBINOM\":{\"category\":\"compatibility\",\"formulajs\":true},\"CSC\":{\"category\":\"math\",\"formulajs\":true},\"CSCH\":{\"category\":\"math\",\"formulajs\":true},\"CUMIPMT\":{\"category\":\"financial\",\"formulajs\":true},\"CUMPRINC\":{\"category\":\"financial\",\"formulajs\":true},\"DATE\":{\"category\":\"date\",\"formulajs\":true},\"DATEDIF\":{\"category\":\"date\",\"formulajs\":true},\"DATEVALUE\":{\"category\":\"date\",\"formulajs\":true},\"DAVERAGE\":{\"category\":\"database\",\"formulajs\":true},\"DAY\":{\"category\":\"date\",\"formulajs\":true},\"DAYS\":{\"category\":\"date\",\"formulajs\":true},\"DAYS360\":{\"category\":\"date\",\"formulajs\":true},\"DB\":{\"category\":\"financial\",\"formulajs\":true},\"DBCS\":{\"category\":\"text\",\"formulajs\":false},\"DCOUNT\":{\"category\":\"database\",\"formulajs\":true},\"DCOUNTA\":{\"category\":\"database\",\"formulajs\":true},\"DDB\":{\"category\":\"financial\",\"formulajs\":true},\"DEC2BIN\":{\"category\":\"engineering\",\"formulajs\":true},\"DEC2HEX\":{\"category\":\"engineering\",\"formulajs\":true},\"DEC2OCT\":{\"category\":\"engineering\",\"formulajs\":true},\"DECIMAL\":{\"category\":\"math\",\"formulajs\":true},\"DEGREES\":{\"category\":\"math\",\"formulajs\":true},\"DELTA\":{\"category\":\"engineering\",\"formulajs\":true},\"DETECTLANGUAGE\":{\"category\":\"text\",\"formulajs\":false},\"DEVSQ\":{\"category\":\"statistical\",\"formulajs\":true},\"DGET\":{\"category\":\"database\",\"formulajs\":true},\"DISC\":{\"category\":\"financial\",\"formulajs\":true},\"DMAX\":{\"category\":\"database\",\"formulajs\":true},\"DMIN\":{\"category\":\"database\",\"formulajs\":true},\"DOLLAR\":{\"category\":\"text\",\"formulajs\":true},\"DOLLARDE\":{\"category\":\"financial\",\"formulajs\":true},\"DOLLARFR\":{\"category\":\"financial\",\"formulajs\":true},\"DPRODUCT\":{\"category\":\"database\",\"formulajs\":true},\"DROP\":{\"category\":\"lookup\",\"formulajs\":false},\"DSTDEV\":{\"category\":\"database\",\"formulajs\":true},\"DSTDEVP\":{\"category\":\"database\",\"formulajs\":true},\"DSUM\":{\"category\":\"database\",\"formulajs\":true},\"DURATION\":{\"category\":\"financial\",\"formulajs\":false},\"DVAR\":{\"category\":\"database\",\"formulajs\":true},\"DVARP\":{\"category\":\"database\",\"formulajs\":true},\"EDATE\":{\"category\":\"date\",\"formulajs\":true},\"EFFECT\":{\"category\":\"financial\",\"formulajs\":true},\"EOMONTH\":{\"category\":\"date\",\"formulajs\":true},\"ERF\":{\"category\":\"engineering\",\"formulajs\":true},\"ERFPRECISE\":{\"category\":\"engineering\",\"formulajs\":false},\"ERFC\":{\"category\":\"engineering\",\"formulajs\":true},\"ERFCPRECISE\":{\"category\":\"engineering\",\"formulajs\":false},\"ERRORTYPE\":{\"category\":\"information\",\"formulajs\":true},\"EVEN\":{\"category\":\"math\",\"formulajs\":true},\"EXACT\":{\"category\":\"text\",\"formulajs\":true},\"EXP\":{\"category\":\"math\",\"formulajs\":true},\"EXPAND\":{\"category\":\"lookup\",\"formulajs\":false},\"EXPONDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"FACT\":{\"category\":\"math\",\"formulajs\":true},\"FACTDOUBLE\":{\"category\":\"math\",\"formulajs\":true},\"FALSE\":{\"category\":\"logical\",\"formulajs\":true},\"FDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"FDISTRT\":{\"category\":\"statistical\",\"formulajs\":true},\"FILTER\":{\"category\":\"lookup\",\"formulajs\":false},\"FIND\":{\"category\":\"text\",\"formulajs\":true},\"FINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"FINVRT\":{\"category\":\"statistical\",\"formulajs\":true},\"FISHER\":{\"category\":\"statistical\",\"formulajs\":true},\"FISHERINV\":{\"category\":\"statistical\",\"formulajs\":true},\"FIXED\":{\"category\":\"text\",\"formulajs\":true},\"FLOOR\":{\"category\":\"compatibility\",\"formulajs\":true},\"FLOORMATH\":{\"category\":\"math\",\"formulajs\":true},\"FLOORPRECISE\":{\"category\":\"math\",\"formulajs\":true},\"FORECAST\":{\"category\":\"statistical\",\"formulajs\":true},\"FORECASTETS\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTETSCONFINT\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTETSSEASONALITY\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTETSSTAT\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTLINEAR\":{\"category\":\"statistical\",\"formulajs\":false},\"FORMULATEXT\":{\"category\":\"lookup\",\"formulajs\":false},\"FREQUENCY\":{\"category\":\"statistical\",\"formulajs\":true},\"FTEST\":{\"category\":\"compatibility\",\"formulajs\":true},\"FV\":{\"category\":\"financial\",\"formulajs\":true},\"FVSCHEDULE\":{\"category\":\"financial\",\"formulajs\":true},\"GAMMA\":{\"category\":\"statistical\",\"formulajs\":true},\"GAMMADIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"GAMMAINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"GAMMALN\":{\"category\":\"statistical\",\"formulajs\":true},\"GAMMALNPRECISE\":{\"category\":\"statistical\",\"formulajs\":true},\"GAUSS\":{\"category\":\"statistical\",\"formulajs\":true},\"GCD\":{\"category\":\"math\",\"formulajs\":true},\"GEOMEAN\":{\"category\":\"statistical\",\"formulajs\":true},\"GESTEP\":{\"category\":\"engineering\",\"formulajs\":true},\"GETPIVOTDATA\":{\"category\":\"lookup\",\"formulajs\":false},\"GROUPBY\":{\"category\":\"lookup\",\"formulajs\":false},\"GROWTH\":{\"category\":\"statistical\",\"formulajs\":true},\"HARMEAN\":{\"category\":\"statistical\",\"formulajs\":true},\"HEX2BIN\":{\"category\":\"engineering\",\"formulajs\":true},\"HEX2DEC\":{\"category\":\"engineering\",\"formulajs\":true},\"HEX2OCT\":{\"category\":\"engineering\",\"formulajs\":true},\"HLOOKUP\":{\"category\":\"lookup\",\"formulajs\":true},\"HOUR\":{\"category\":\"date\",\"formulajs\":true},\"HSTACK\":{\"category\":\"lookup\",\"formulajs\":false},\"HYPERLINK\":{\"category\":\"lookup\",\"formulajs\":false},\"HYPGEOMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"IF\":{\"category\":\"logical\",\"formulajs\":true},\"IFERROR\":{\"category\":\"logical\",\"formulajs\":true},\"IFNA\":{\"category\":\"logical\",\"formulajs\":true},\"IFS\":{\"category\":\"logical\",\"formulajs\":true},\"IMABS\":{\"category\":\"engineering\",\"formulajs\":true},\"IMAGE\":{\"category\":\"lookup\",\"formulajs\":false},\"IMAGINARY\":{\"category\":\"engineering\",\"formulajs\":true},\"IMARGUMENT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCONJUGATE\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCOS\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCOSH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCOT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCSC\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCSCH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMDIV\":{\"category\":\"engineering\",\"formulajs\":true},\"IMEXP\":{\"category\":\"engineering\",\"formulajs\":true},\"IMLN\":{\"category\":\"engineering\",\"formulajs\":true},\"IMLOG10\":{\"category\":\"engineering\",\"formulajs\":true},\"IMLOG2\":{\"category\":\"engineering\",\"formulajs\":true},\"IMPOWER\":{\"category\":\"engineering\",\"formulajs\":true},\"IMPRODUCT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMREAL\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSEC\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSECH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSIN\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSINH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSQRT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSUB\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSUM\":{\"category\":\"engineering\",\"formulajs\":true},\"IMTAN\":{\"category\":\"engineering\",\"formulajs\":true},\"INDEX\":{\"category\":\"lookup\",\"formulajs\":true},\"INDIRECT\":{\"category\":\"lookup\",\"formulajs\":false},\"INFO\":{\"category\":\"information\",\"formulajs\":false},\"INT\":{\"category\":\"math\",\"formulajs\":true},\"INTERCEPT\":{\"category\":\"statistical\",\"formulajs\":true},\"INTRATE\":{\"category\":\"financial\",\"formulajs\":false},\"IPMT\":{\"category\":\"financial\",\"formulajs\":true},\"IRR\":{\"category\":\"financial\",\"formulajs\":true},\"ISBLANK\":{\"category\":\"information\",\"formulajs\":true},\"ISERR\":{\"category\":\"information\",\"formulajs\":true},\"ISERROR\":{\"category\":\"information\",\"formulajs\":true},\"ISEVEN\":{\"category\":\"information\",\"formulajs\":true},\"ISFORMULA\":{\"category\":\"information\",\"formulajs\":false},\"ISLOGICAL\":{\"category\":\"information\",\"formulajs\":true},\"ISNA\":{\"category\":\"information\",\"formulajs\":true},\"ISNONTEXT\":{\"category\":\"information\",\"formulajs\":true},\"ISNUMBER\":{\"category\":\"information\",\"formulajs\":true},\"ISODD\":{\"category\":\"information\",\"formulajs\":true},\"ISOMITTED\":{\"category\":\"information\",\"formulajs\":false},\"ISREF\":{\"category\":\"information\",\"formulajs\":false},\"ISTEXT\":{\"category\":\"information\",\"formulajs\":true},\"ISOCEILING\":{\"category\":\"math\",\"formulajs\":true},\"ISOWEEKNUM\":{\"category\":\"date\",\"formulajs\":true},\"ISPMT\":{\"category\":\"financial\",\"formulajs\":true},\"JIS\":{\"category\":\"text\",\"formulajs\":false},\"KURT\":{\"category\":\"statistical\",\"formulajs\":true},\"LAMBDA\":{\"category\":\"logical\",\"formulajs\":false},\"LARGE\":{\"category\":\"statistical\",\"formulajs\":true},\"LCM\":{\"category\":\"math\",\"formulajs\":true},\"LEFT\":{\"category\":\"text\",\"formulajs\":true},\"LEN\":{\"category\":\"text\",\"formulajs\":true},\"LET\":{\"category\":\"logical\",\"formulajs\":false},\"LINEST\":{\"category\":\"statistical\",\"formulajs\":true},\"LN\":{\"category\":\"math\",\"formulajs\":true},\"LOG\":{\"category\":\"math\",\"formulajs\":true},\"LOG10\":{\"category\":\"math\",\"formulajs\":true},\"LOGEST\":{\"category\":\"statistical\",\"formulajs\":true},\"LOGINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"LOGNORMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"LOGNORMINV\":{\"category\":\"statistical\",\"formulajs\":true},\"LOOKUP\":{\"category\":\"lookup\",\"formulajs\":true},\"LOWER\":{\"category\":\"text\",\"formulajs\":true},\"MAKEARRAY\":{\"category\":\"logical\",\"formulajs\":false},\"MAP\":{\"category\":\"logical\",\"formulajs\":false},\"MATCH\":{\"category\":\"lookup\",\"formulajs\":true},\"MAX\":{\"category\":\"statistical\",\"formulajs\":true},\"MAXA\":{\"category\":\"statistical\",\"formulajs\":true},\"MAXIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"MDETERM\":{\"category\":\"math\",\"formulajs\":false},\"MDURATION\":{\"category\":\"financial\",\"formulajs\":false},\"MEDIAN\":{\"category\":\"statistical\",\"formulajs\":true},\"MID\":{\"category\":\"text\",\"formulajs\":true},\"MIN\":{\"category\":\"statistical\",\"formulajs\":true},\"MINIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"MINA\":{\"category\":\"statistical\",\"formulajs\":true},\"MINUTE\":{\"category\":\"date\",\"formulajs\":true},\"MINVERSE\":{\"category\":\"math\",\"formulajs\":false},\"MIRR\":{\"category\":\"financial\",\"formulajs\":true},\"MMULT\":{\"category\":\"math\",\"formulajs\":true},\"MOD\":{\"category\":\"math\",\"formulajs\":true},\"MODE\":{\"category\":\"compatibility\",\"formulajs\":false},\"MODEMULT\":{\"category\":\"statistical\",\"formulajs\":true},\"MODESNGL\":{\"category\":\"statistical\",\"formulajs\":true},\"MONTH\":{\"category\":\"date\",\"formulajs\":true},\"MROUND\":{\"category\":\"math\",\"formulajs\":true},\"MULTINOMIAL\":{\"category\":\"math\",\"formulajs\":true},\"MUNIT\":{\"category\":\"math\",\"formulajs\":true},\"N\":{\"category\":\"information\",\"formulajs\":true},\"NA\":{\"category\":\"information\",\"formulajs\":true},\"NEGBINOMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"NETWORKDAYS\":{\"category\":\"date\",\"formulajs\":true},\"NETWORKDAYSINTL\":{\"category\":\"date\",\"formulajs\":true},\"NOMINAL\":{\"category\":\"financial\",\"formulajs\":true},\"NORMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"NORMINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"NORMSDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"NORMSINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"NOT\":{\"category\":\"logical\",\"formulajs\":true},\"NOW\":{\"category\":\"date\",\"formulajs\":true},\"NPER\":{\"category\":\"financial\",\"formulajs\":true},\"NPV\":{\"category\":\"financial\",\"formulajs\":true},\"NUMBERVALUE\":{\"category\":\"text\",\"formulajs\":true},\"OCT2BIN\":{\"category\":\"engineering\",\"formulajs\":true},\"OCT2DEC\":{\"category\":\"engineering\",\"formulajs\":true},\"OCT2HEX\":{\"category\":\"engineering\",\"formulajs\":true},\"ODD\":{\"category\":\"math\",\"formulajs\":true},\"ODDFPRICE\":{\"category\":\"financial\",\"formulajs\":false},\"ODDFYIELD\":{\"category\":\"financial\",\"formulajs\":false},\"ODDLPRICE\":{\"category\":\"financial\",\"formulajs\":false},\"ODDLYIELD\":{\"category\":\"financial\",\"formulajs\":false},\"OFFSET\":{\"category\":\"lookup\",\"formulajs\":false},\"OR\":{\"category\":\"logical\",\"formulajs\":true},\"PDURATION\":{\"category\":\"financial\",\"formulajs\":true},\"PEARSON\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTILEEXC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTILEINC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTILE\":{\"category\":\"compatibility\",\"formulajs\":false},\"PERCENTOF\":{\"category\":\"math\",\"formulajs\":false},\"PERCENTRANKEXC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTRANKINC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTRANK\":{\"category\":\"compatibility\",\"formulajs\":false},\"PERMUT\":{\"category\":\"statistical\",\"formulajs\":true},\"PERMUTATIONA\":{\"category\":\"statistical\",\"formulajs\":true},\"PHI\":{\"category\":\"statistical\",\"formulajs\":true},\"PHONETIC\":{\"category\":\"text\",\"formulajs\":false},\"PI\":{\"category\":\"math\",\"formulajs\":true},\"PIVOTBY\":{\"category\":\"lookup\",\"formulajs\":false},\"PMT\":{\"category\":\"financial\",\"formulajs\":true},\"POISSONDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"POISSON\":{\"category\":\"compatibility\",\"formulajs\":false},\"POWER\":{\"category\":\"math\",\"formulajs\":true},\"PPMT\":{\"category\":\"financial\",\"formulajs\":true},\"PRICE\":{\"category\":\"financial\",\"formulajs\":false},\"PRICEDISC\":{\"category\":\"financial\",\"formulajs\":true},\"PRICEMAT\":{\"category\":\"financial\",\"formulajs\":false},\"PROB\":{\"category\":\"statistical\",\"formulajs\":true},\"PRODUCT\":{\"category\":\"math\",\"formulajs\":true},\"PROPER\":{\"category\":\"text\",\"formulajs\":true},\"PV\":{\"category\":\"financial\",\"formulajs\":true},\"QUARTILE\":{\"category\":\"compatibility\",\"formulajs\":false},\"QUARTILEEXC\":{\"category\":\"statistical\",\"formulajs\":true},\"QUARTILEINC\":{\"category\":\"statistical\",\"formulajs\":true},\"QUOTIENT\":{\"category\":\"math\",\"formulajs\":true},\"RADIANS\":{\"category\":\"math\",\"formulajs\":true},\"RAND\":{\"category\":\"math\",\"formulajs\":true},\"RANDARRAY\":{\"category\":\"math\",\"formulajs\":false},\"RANDBETWEEN\":{\"category\":\"math\",\"formulajs\":true},\"RANKAVG\":{\"category\":\"statistical\",\"formulajs\":true},\"RANKEQ\":{\"category\":\"statistical\",\"formulajs\":true},\"RANK\":{\"category\":\"compatibility\",\"formulajs\":false},\"RATE\":{\"category\":\"financial\",\"formulajs\":true},\"RECEIVED\":{\"category\":\"financial\",\"formulajs\":false},\"REDUCE\":{\"category\":\"logical\",\"formulajs\":false},\"REGEXEXTRACT\":{\"category\":\"text\",\"formulajs\":false},\"REGEXREPLACE\":{\"category\":\"text\",\"formulajs\":false},\"REGEXTEST\":{\"category\":\"text\",\"formulajs\":false},\"REPLACE\":{\"category\":\"text\",\"formulajs\":true},\"REPT\":{\"category\":\"text\",\"formulajs\":true},\"RIGHT\":{\"category\":\"text\",\"formulajs\":true},\"ROMAN\":{\"category\":\"math\",\"formulajs\":true},\"ROUND\":{\"category\":\"math\",\"formulajs\":true},\"ROUNDDOWN\":{\"category\":\"math\",\"formulajs\":true},\"ROUNDUP\":{\"category\":\"math\",\"formulajs\":true},\"ROW\":{\"category\":\"lookup\",\"formulajs\":true},\"ROWS\":{\"category\":\"lookup\",\"formulajs\":true},\"RRI\":{\"category\":\"financial\",\"formulajs\":true},\"RSQ\":{\"category\":\"statistical\",\"formulajs\":true},\"RTD\":{\"category\":\"lookup\",\"formulajs\":false},\"SCAN\":{\"category\":\"logical\",\"formulajs\":false},\"SEARCH\":{\"category\":\"text\",\"formulajs\":true},\"SEC\":{\"category\":\"math\",\"formulajs\":true},\"SECH\":{\"category\":\"math\",\"formulajs\":true},\"SECOND\":{\"category\":\"date\",\"formulajs\":true},\"SEQUENCE\":{\"category\":\"math\",\"formulajs\":false},\"SERIESSUM\":{\"category\":\"math\",\"formulajs\":true},\"SHEET\":{\"category\":\"information\",\"formulajs\":false},\"SHEETS\":{\"category\":\"information\",\"formulajs\":false},\"SIGN\":{\"category\":\"math\",\"formulajs\":true},\"SIN\":{\"category\":\"math\",\"formulajs\":true},\"SINH\":{\"category\":\"math\",\"formulajs\":true},\"SKEW\":{\"category\":\"statistical\",\"formulajs\":true},\"SKEWP\":{\"category\":\"statistical\",\"formulajs\":true},\"SLN\":{\"category\":\"financial\",\"formulajs\":true},\"SLOPE\":{\"category\":\"statistical\",\"formulajs\":true},\"SMALL\":{\"category\":\"statistical\",\"formulajs\":true},\"SORT\":{\"category\":\"lookup\",\"formulajs\":true},\"SORTBY\":{\"category\":\"lookup\",\"formulajs\":false},\"SQRT\":{\"category\":\"math\",\"formulajs\":true},\"SQRTPI\":{\"category\":\"math\",\"formulajs\":true},\"STANDARDIZE\":{\"category\":\"statistical\",\"formulajs\":true},\"STOCKHISTORY\":{\"category\":\"information\",\"formulajs\":false},\"STDEV\":{\"category\":\"compatibility\",\"formulajs\":false},\"STDEVP\":{\"category\":\"compatibility\",\"formulajs\":true},\"STDEVS\":{\"category\":\"statistical\",\"formulajs\":true},\"STDEVA\":{\"category\":\"statistical\",\"formulajs\":true},\"STDEVPA\":{\"category\":\"statistical\",\"formulajs\":true},\"STEYX\":{\"category\":\"statistical\",\"formulajs\":true},\"SUBSTITUTE\":{\"category\":\"text\",\"formulajs\":true},\"SUBTOTAL\":{\"category\":\"math\",\"formulajs\":true},\"SUM\":{\"category\":\"math\",\"formulajs\":true},\"SUMIF\":{\"category\":\"math\",\"formulajs\":true},\"SUMIFS\":{\"category\":\"math\",\"formulajs\":true},\"SUMPRODUCT\":{\"category\":\"math\",\"formulajs\":true},\"SUMSQ\":{\"category\":\"math\",\"formulajs\":true},\"SUMX2MY2\":{\"category\":\"math\",\"formulajs\":true},\"SUMX2PY2\":{\"category\":\"math\",\"formulajs\":true},\"SUMXMY2\":{\"category\":\"math\",\"formulajs\":true},\"SWITCH\":{\"category\":\"logical\",\"formulajs\":true},\"SYD\":{\"category\":\"financial\",\"formulajs\":true},\"T\":{\"category\":\"text\",\"formulajs\":true},\"TAN\":{\"category\":\"math\",\"formulajs\":true},\"TANH\":{\"category\":\"math\",\"formulajs\":true},\"TAKE\":{\"category\":\"lookup\",\"formulajs\":false},\"TBILLEQ\":{\"category\":\"financial\",\"formulajs\":true},\"TBILLPRICE\":{\"category\":\"financial\",\"formulajs\":true},\"TBILLYIELD\":{\"category\":\"financial\",\"formulajs\":true},\"TDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"TDIST2T\":{\"category\":\"statistical\",\"formulajs\":true},\"TDISTRT\":{\"category\":\"statistical\",\"formulajs\":true},\"TEXT\":{\"category\":\"text\",\"formulajs\":true},\"TEXTAFTER\":{\"category\":\"text\",\"formulajs\":false},\"TEXTBEFORE\":{\"category\":\"text\",\"formulajs\":false},\"TEXTJOIN\":{\"category\":\"text\",\"formulajs\":true},\"TEXTSPLIT\":{\"category\":\"text\",\"formulajs\":false},\"TIME\":{\"category\":\"date\",\"formulajs\":true},\"TIMEVALUE\":{\"category\":\"date\",\"formulajs\":true},\"TINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"TINV2T\":{\"category\":\"statistical\",\"formulajs\":true},\"TOCOL\":{\"category\":\"lookup\",\"formulajs\":false},\"TOROW\":{\"category\":\"lookup\",\"formulajs\":false},\"TODAY\":{\"category\":\"date\",\"formulajs\":true},\"TRANSLATE\":{\"category\":\"text\",\"formulajs\":false},\"TRANSPOSE\":{\"category\":\"lookup\",\"formulajs\":true},\"TREND\":{\"category\":\"statistical\",\"formulajs\":true},\"TRIM\":{\"category\":\"text\",\"formulajs\":true},\"TRIMMEAN\":{\"category\":\"statistical\",\"formulajs\":true},\"TRIMRANGE\":{\"category\":\"lookup\",\"formulajs\":false},\"TRUE\":{\"category\":\"logical\",\"formulajs\":true},\"TRUNC\":{\"category\":\"math\",\"formulajs\":true},\"TTEST\":{\"category\":\"compatibility\",\"formulajs\":true},\"TYPE\":{\"category\":\"information\",\"formulajs\":true},\"UNICHAR\":{\"category\":\"text\",\"formulajs\":true},\"UNICODE\":{\"category\":\"text\",\"formulajs\":true},\"UNIQUE\":{\"category\":\"lookup\",\"formulajs\":true},\"UPPER\":{\"category\":\"text\",\"formulajs\":true},\"VALUE\":{\"category\":\"text\",\"formulajs\":true},\"VALUETOTEXT\":{\"category\":\"text\",\"formulajs\":false},\"VAR\":{\"category\":\"compatibility\",\"formulajs\":false},\"VARP\":{\"category\":\"compatibility\",\"formulajs\":true},\"VARS\":{\"category\":\"statistical\",\"formulajs\":true},\"VARA\":{\"category\":\"statistical\",\"formulajs\":true},\"VARPA\":{\"category\":\"statistical\",\"formulajs\":true},\"VDB\":{\"category\":\"financial\",\"formulajs\":false},\"VLOOKUP\":{\"category\":\"lookup\",\"formulajs\":true},\"WEEKDAY\":{\"category\":\"date\",\"formulajs\":true},\"WEEKNUM\":{\"category\":\"date\",\"formulajs\":true},\"WEIBULL\":{\"category\":\"compatibility\",\"formulajs\":false},\"WEIBULLDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"WORKDAY\":{\"category\":\"date\",\"formulajs\":true},\"WORKDAYINTL\":{\"category\":\"date\",\"formulajs\":true},\"XIRR\":{\"category\":\"financial\",\"formulajs\":true},\"XLOOKUP\":{\"category\":\"lookup\",\"formulajs\":false},\"XMATCH\":{\"category\":\"lookup\",\"formulajs\":false},\"XNPV\":{\"category\":\"financial\",\"formulajs\":true},\"XOR\":{\"category\":\"logical\",\"formulajs\":true},\"YEAR\":{\"category\":\"date\",\"formulajs\":true},\"YEARFRAC\":{\"category\":\"date\",\"formulajs\":true},\"YIELD\":{\"category\":\"financial\",\"formulajs\":false},\"YIELDDISC\":{\"category\":\"financial\",\"formulajs\":false},\"YIELDMAT\":{\"category\":\"financial\",\"formulajs\":false},\"ZTEST\":{\"category\":\"compatibility\",\"formulajs\":true}}","/**\n * UI 元数据覆盖(可选)。\n * 函数全集来自 @formulajs/formulajs + formulajs-catalog.json(formulajs.info 分类)。\n * 此处只维护:常用 featured、已接入 implemented、中文 label/hint/syntax。\n * 其余函数使用默认占位,后续可对照语雀 / Excel 文档逐步补充。\n */\nimport type { FormulaBuiltinEntry, FormulaCategoryId } from './types'\n\ntype MetaOverride = Partial<FormulaBuiltinEntry> & { name: string }\n\nexport const FORMULA_META_OVERRIDES: readonly MetaOverride[] = [\n {\n name: 'SUM',\n category: 'statistical',\n label: '求和',\n syntax: 'SUM(数值1, [数值2], …)',\n hint: '返回一组数值和/或单元格的总和。',\n example: 'SUM(A1:A10)',\n implemented: true,\n featured: true,\n },\n {\n name: 'AVERAGE',\n category: 'statistical',\n label: '平均值',\n syntax: 'AVERAGE(数值1, [数值2], …)',\n hint: '返回其参数的算术平均值。',\n example: 'AVERAGE(A1:A10)',\n implemented: true,\n featured: true,\n },\n {\n name: 'COUNT',\n category: 'statistical',\n label: '计数',\n syntax: 'COUNT(数值1, [数值2], …)',\n hint: '计算参数列表中数字的个数。',\n example: 'COUNT(A1:A10)',\n implemented: true,\n featured: true,\n },\n {\n name: 'MAX',\n category: 'statistical',\n label: '最大值',\n syntax: 'MAX(数值1, [数值2], …)',\n hint: '返回参数列表中的最大值。',\n implemented: true,\n featured: true,\n },\n {\n name: 'MIN',\n category: 'statistical',\n label: '最小值',\n syntax: 'MIN(数值1, [数值2], …)',\n hint: '返回参数列表中的最小值。',\n implemented: true,\n featured: true,\n },\n {\n name: 'IF',\n category: 'logical',\n label: '条件',\n syntax: 'IF(条件, 真值, [假值])',\n hint: '判断是否满足某个条件,返回不同结果。',\n featured: true,\n },\n {\n name: 'AND',\n category: 'logical',\n label: '且',\n syntax: 'AND(逻辑1, [逻辑2], …)',\n hint: '所有参数为 TRUE 时返回 TRUE。',\n featured: true,\n },\n {\n name: 'OR',\n category: 'logical',\n label: '或',\n syntax: 'OR(逻辑1, [逻辑2], …)',\n hint: '任一参数为 TRUE 时返回 TRUE。',\n featured: true,\n },\n {\n name: 'ABS',\n category: 'math',\n label: '绝对值',\n syntax: 'ABS(数值)',\n hint: '返回数字的绝对值。',\n },\n {\n name: 'ROUND',\n category: 'math',\n label: '四舍五入',\n syntax: 'ROUND(数值, 位数)',\n hint: '按指定位数四舍五入。',\n },\n {\n name: 'VLOOKUP',\n category: 'lookup',\n label: '垂直查找',\n syntax: 'VLOOKUP(查找值, 表区域, 列序, [匹配])',\n hint: '在表首列查找并返回同行指定列。',\n },\n] as const\n\nexport function getMetaOverrideMap(): Map<string, MetaOverride> {\n return new Map(FORMULA_META_OVERRIDES.map((m) => [m.name, m]))\n}\n\nexport function defaultCategory(): FormulaCategoryId {\n return 'math'\n}\n","/**\n * 从 @formulajs/formulajs 导出 + formulajs.info 分类目录 合并为注册表。\n * 不引入平台自定义函数;UI 文案在 meta.ts 按需覆盖。\n */\nimport * as formulajs from '@formulajs/formulajs'\nimport type { FormulaBuiltinEntry, FormulaCategoryId } from './types'\nimport catalog from './formulajs-catalog.json'\nimport { defaultCategory, getMetaOverrideMap } from './meta'\n\ntype CatalogRow = { category: FormulaCategoryId; formulajs: boolean }\n\nconst catalogMap = catalog as Record<string, CatalogRow>\n\nfunction getFormulajsExportNames(): string[] {\n const lib = formulajs as Record<string, unknown>\n return Object.keys(lib)\n .filter((k) => /^[A-Z][A-Z0-9_]*$/.test(k) && typeof lib[k] === 'function')\n .sort()\n}\n\nfunction buildEntry(name: string): FormulaBuiltinEntry | null {\n if (!catalogMap[name]) return null\n const row = catalogMap[name]\n const override = getMetaOverrideMap().get(name)\n const category = override?.category ?? row.category ?? defaultCategory()\n return {\n name,\n category,\n label: override?.label ?? name,\n labelEn: override?.labelEn,\n syntax: override?.syntax ?? `${name}(…)`,\n hint:\n override?.hint ??\n 'Excel 兼容函数(@formulajs/formulajs)。说明待补充,可参考 formulajs.info。',\n description: override?.description,\n example: override?.example,\n seeAlso: override?.seeAlso,\n aliases: override?.aliases,\n implemented: override?.implemented ?? false,\n formulajs: row.formulajs,\n featured: override?.featured ?? false,\n }\n}\n\n/** 运行时注册表:仅包含 formulajs 包内存在的函数 */\nexport function buildFormulaBuiltinRegistry(): FormulaBuiltinEntry[] {\n const names = getFormulajsExportNames()\n const out: FormulaBuiltinEntry[] = []\n for (const name of names) {\n const entry = buildEntry(name)\n if (entry) out.push(entry)\n }\n return out\n}\n\nexport const FORMULA_BUILTIN_REGISTRY: readonly FormulaBuiltinEntry[] =\n buildFormulaBuiltinRegistry()\n","import type { FormulaCategoryId, FormulaCategoryMeta } from './types'\n\nexport const FORMULA_CATEGORIES: readonly FormulaCategoryMeta[] = [\n { id: 'math', label: '数学', labelEn: 'Math', formulajsCategory: 'Math and trigonometry' },\n { id: 'statistical', label: '统计', labelEn: 'Statistics', formulajsCategory: 'Statistical' },\n { id: 'financial', label: '财务', labelEn: 'Financial', formulajsCategory: 'Financial' },\n { id: 'engineering', label: '工程', labelEn: 'Engineering', formulajsCategory: 'Engineering' },\n { id: 'text', label: '文本', labelEn: 'Text', formulajsCategory: 'Text' },\n { id: 'logical', label: '逻辑', labelEn: 'Logical', formulajsCategory: 'Logical' },\n { id: 'date', label: '日期', labelEn: 'Date', formulajsCategory: 'Date and time' },\n { id: 'lookup', label: '查找', labelEn: 'Lookup', formulajsCategory: 'Lookup and reference' },\n { id: 'information', label: '信息', labelEn: 'Information', formulajsCategory: 'Information' },\n { id: 'database', label: '数据库', labelEn: 'Database', formulajsCategory: 'Database' },\n { id: 'compatibility', label: '兼容', labelEn: 'Compatibility', formulajsCategory: 'Compatibility' },\n] as const\n\nexport function getCategoryMeta(id: FormulaCategoryId): FormulaCategoryMeta | undefined {\n return FORMULA_CATEGORIES.find((c) => c.id === id)\n}\n\nexport function categoryLabel(id: FormulaCategoryId, locale: 'zh' | 'en' = 'zh'): string {\n const meta = getCategoryMeta(id)\n if (!meta) return id\n return locale === 'en' ? meta.labelEn : meta.label\n}\n","import type { FormulaCategoryId, FormulaBuiltinEntry } from './types'\nimport { FORMULA_BUILTIN_REGISTRY } from './buildRegistry'\nimport { FORMULA_CATEGORIES, categoryLabel, getCategoryMeta } from './categories'\n\nexport type { FormulaBuiltinEntry, FormulaCategoryId, FormulaCategoryMeta } from './types'\nexport { FORMULA_BUILTIN_REGISTRY } from './buildRegistry'\nexport { FORMULA_META_OVERRIDES } from './meta'\nexport { FORMULA_CATEGORIES, categoryLabel, getCategoryMeta } from './categories'\n\nconst _canonical = new Map<string, string>()\n\nfunction rebuildCanonical(): void {\n if (_canonical.size) return\n for (const b of FORMULA_BUILTIN_REGISTRY) {\n const upper = b.name.toUpperCase()\n _canonical.set(upper, upper)\n for (const a of b.aliases ?? []) {\n _canonical.set(a.toUpperCase(), upper)\n }\n }\n}\n\nexport function resolveBuiltinName(name: string): string | undefined {\n rebuildCanonical()\n return _canonical.get(name.toUpperCase())\n}\n\nexport function isRegisteredBuiltin(name: string): boolean {\n rebuildCanonical()\n return _canonical.has(name.toUpperCase())\n}\n\nexport function getBuiltinEntry(name: string): FormulaBuiltinEntry | undefined {\n const canonical = resolveBuiltinName(name)\n if (!canonical) return undefined\n return FORMULA_BUILTIN_REGISTRY.find((b) => b.name === canonical)\n}\n\nexport function getFeaturedBuiltins(): FormulaBuiltinEntry[] {\n return FORMULA_BUILTIN_REGISTRY.filter((b) => b.featured)\n}\n\nexport function getBuiltinsByCategory(category: FormulaCategoryId): FormulaBuiltinEntry[] {\n return FORMULA_BUILTIN_REGISTRY.filter((b) => b.category === category)\n}\n\nexport function getImplementedBuiltins(): FormulaBuiltinEntry[] {\n return FORMULA_BUILTIN_REGISTRY.filter((b) => b.implemented)\n}\n\nexport function getImplementedBuiltinNames(): string[] {\n return getImplementedBuiltins().map((b) => b.name)\n}\n\n/** 菜单用:有函数的分类(保持 FORMULA_CATEGORIES 顺序) */\nexport function getCategoriesWithBuiltins(): FormulaCategoryId[] {\n const ids = new Set<FormulaCategoryId>()\n for (const b of FORMULA_BUILTIN_REGISTRY) ids.add(b.category)\n return FORMULA_CATEGORIES.map((c) => c.id).filter((id) => ids.has(id))\n}\n\nexport function searchBuiltins(query: string): FormulaBuiltinEntry[] {\n const q = query.trim().toUpperCase()\n if (!q) return [...FORMULA_BUILTIN_REGISTRY]\n return FORMULA_BUILTIN_REGISTRY.filter((b) => {\n if (b.name.includes(q)) return true\n if (b.label.includes(query.trim())) return true\n if (b.hint.includes(query.trim())) return true\n return (b.aliases ?? []).some((a) => a.toUpperCase().includes(q))\n })\n}\n\n/** 从公式文本解析当前正在输入的函数名(=SUM( → SUM) */\nexport function parseActiveFunctionName(formula: string, caret: number): string | null {\n const head = formula.slice(0, caret)\n const m = head.match(/([A-Za-z][\\w.]*)$/)\n if (!m) return null\n const name = m[1].toUpperCase().replace(/\\./g, '')\n if (!name) return null\n const after = head.slice(head.length - m[1].length)\n if (!/^[A-Za-z]/.test(after)) return null\n return resolveBuiltinName(name) ?? null\n}\n\nexport function buildFunctionNamePattern(): RegExp {\n const names = [...new Set(FORMULA_BUILTIN_REGISTRY.map((b) => b.name))]\n const escaped = names.sort((a, b) => b.length - a.length).map((n) =>\n n.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'),\n )\n return new RegExp(`\\\\b(${escaped.join('|')})\\\\s*\\\\(`, 'gi')\n}\n","import * as formulajs from '@formulajs/formulajs'\nimport { buildFunctionNamePattern, getImplementedBuiltinNames } from './registry'\n\nexport type FormulaFn = (values: number[]) => number\n\nfunction buildFnMap(): Record<string, FormulaFn> {\n const map: Record<string, FormulaFn> = {}\n const lib = formulajs as Record<string, unknown>\n for (const name of getImplementedBuiltinNames()) {\n const fn = lib[name]\n if (typeof fn !== 'function') continue\n map[name] = fn as FormulaFn\n }\n return map\n}\n\nexport const FN_MAP = buildFnMap()\nexport const FN_RE = buildFunctionNamePattern()\n","/**\n * 公式编辑态字符串操作(headless,与 UI 框架无关)。\n * 供 vue3 / 其他宿主在公式栏、单元格内联编辑、点选引用时复用。\n */\nimport type { Sheet } from '@speed-sheet/core'\nimport type { CellAttributes } from '@speed-sheet/shared'\nimport { createFormulaContext } from './context'\nimport { internalFormulaToDisplay } from './formula-bindings'\nimport { overlapsInternalRef } from './internal-ref-scan'\nimport { formatA1 } from './refs'\n\nconst REF_TOKEN_RE =\n /(?:'[^']+'!)?[A-Za-z]{1,4}\\d+(?::[A-Za-z]{1,4}\\d+)?/gi\n\nconst OP_END_RE = /[+\\-*/,(]$/\n\n/** 光标前为该字符时,允许点选单元格插入引用(对齐 Luckysheet israngeseleciton) */\nconst REF_PICK_TRIGGER = new Set([\n '(',\n ',',\n '=',\n '+',\n '-',\n '*',\n '/',\n '%',\n '&',\n '^',\n '<',\n '>',\n '|',\n ':',\n])\n\n/**\n * 是否处于「点选插入引用」态(而非仅公式编辑态)。\n * @param refPickSession 已为 true 时等同 Luckysheet rangestart(上一次点选后保持到提交/取消)\n */\nexport function canPickFormulaRefAtCaret(formula: string, caret: number): boolean {\n if (!isFormulaInput(formula)) return false\n const trimmed = formula.trimStart()\n if (trimmed === '=') return true\n const safeCaret = Math.max(0, Math.min(caret, formula.length))\n const before = formula.slice(0, safeCaret).trimEnd()\n if (!before.length) return false\n const last = before[before.length - 1]!\n return REF_PICK_TRIGGER.has(last)\n}\n\nexport function canPickFormulaRef(\n formula: string,\n caret: number,\n refPickSession: boolean,\n): boolean {\n if (!isFormulaInput(formula)) return false\n return refPickSession || canPickFormulaRefAtCaret(formula, caret)\n}\n\nexport function isFormulaInput(text: string): boolean {\n return text.trimStart().startsWith('=')\n}\n\nexport const isFormulaText = isFormulaInput\n\nexport function getCellFormulaInitialFromCell(\n cell: CellAttributes | null | undefined,\n sheet?: Sheet,\n sheetId?: string,\n): string {\n if (cell?.f) {\n const f = String(cell.f)\n if (sheet && f.startsWith('=')) {\n const ctx = createFormulaContext(sheet)\n const sid = sheetId ?? sheet.getActiveSheetId()\n return internalFormulaToDisplay(f, ctx, sid)\n }\n return f\n }\n const raw = cell?.m ?? cell?.v\n if (typeof raw === 'string' && raw.startsWith('=')) return raw\n return '='\n}\n\n/** 进入公式编辑时的初始文本:已有公式则保留,否则为 `=` */\nexport function getCellFormulaInitial(sheet: Sheet, r: number, c: number): string {\n return getCellFormulaInitialFromCell(\n sheet.state.getCellData(r, c),\n sheet,\n sheet.getActiveSheetId(),\n )\n}\n\nexport function formatRangeA1(\n r0: number,\n c0: number,\n r1: number,\n c1: number,\n): string {\n const ra = Math.min(r0, r1)\n const rb = Math.max(r0, r1)\n const ca = Math.min(c0, c1)\n const cb = Math.max(c0, c1)\n if (ra === rb && ca === cb) return formatA1(ra, ca)\n return `${formatA1(ra, ca)}:${formatA1(rb, cb)}`\n}\n\nexport function buildSheetRefToken(\n sheet: Sheet,\n r0: number,\n c0: number,\n r1?: number,\n c1?: number,\n sheetId?: string,\n): string {\n const sid = sheetId ?? sheet.getActiveSheetId()\n const activeId = sheet.getActiveSheetId()\n const local =\n r1 !== undefined && c1 !== undefined\n ? formatRangeA1(r0, c0, r1, c1)\n : formatA1(r0, c0)\n if (sid === activeId) return local\n const name = sheet.getSheetName(sid)\n return `'${name.replace(/'/g, \"''\")}'!${local}`\n}\n\nfunction findRefSpanAt(formula: string, index: number): { start: number; end: number } | null {\n REF_TOKEN_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = REF_TOKEN_RE.exec(formula)) !== null) {\n const start = m.index\n const end = start + m[0].length\n if (overlapsInternalRef(formula, start, end)) continue\n if (index >= start && index <= end) return { start, end }\n }\n return null\n}\n\nfunction findLastRefSpan(formula: string): { start: number; end: number } | null {\n REF_TOKEN_RE.lastIndex = 0\n let last: { start: number; end: number } | null = null\n let m: RegExpExecArray | null\n while ((m = REF_TOKEN_RE.exec(formula)) !== null) {\n const start = m.index\n const end = start + m[0].length\n if (overlapsInternalRef(formula, start, end)) continue\n last = { start, end }\n }\n return last\n}\n\n/** 在公式中插入/替换引用:运算符后拼接,否则替换光标处引用(或最后一个引用) */\nexport function patchFormulaWithRef(\n formula: string,\n caret: number,\n refToken: string,\n): { text: string; caret: number } {\n if (!isFormulaInput(formula)) {\n return { text: `=${refToken}`, caret: 1 + refToken.length }\n }\n\n const safeCaret = Math.max(0, Math.min(caret, formula.length))\n const before = formula.slice(0, safeCaret)\n const after = formula.slice(safeCaret)\n\n if (formula === '=' || OP_END_RE.test(before.trimEnd())) {\n const text = before + refToken + after\n return { text, caret: before.length + refToken.length }\n }\n\n const span =\n findRefSpanAt(formula, safeCaret) ??\n findRefSpanAt(formula, safeCaret - 1) ??\n findLastRefSpan(formula)\n\n if (span) {\n const text = formula.slice(0, span.start) + refToken + formula.slice(span.end)\n return { text, caret: span.start + refToken.length }\n }\n\n const sep = OP_END_RE.test(before.trimEnd()) ? '' : '+'\n const text = before + sep + refToken + after\n return { text, caret: before.length + sep.length + refToken.length }\n}\n","import type { FormulaContext } from './context'\nimport { collectIdRangeScalars, coerceNumber } from './context'\nimport { formulaErrorResult, type FormulaErrorCode } from './errors'\nimport {\n extractInternalRefTokens,\n hasInternalRefs,\n parseInternalRefToken,\n} from './formula-bindings'\nimport { FN_MAP, FN_RE } from './fnMap'\nimport { isRegisteredBuiltin } from './registry'\n\nexport type { FormulaErrorCode }\nexport { formulaErrorResult, isFormulaErrorDisplay, getFormulaErrorMessage, FORMULA_ERRORS } from './errors'\n\nexport interface FormulaResult {\n value: number | string | boolean | null\n m: string\n error?: FormulaErrorCode\n errorMessage?: string\n}\n\ntype FnName = keyof typeof FN_MAP\nconst IDENT_FN_RE = /\\b([A-Za-z_][\\w.]*)\\s*\\(/g\nconst NULL_RANGE_RE = /[A-Za-z]{1,4}\\d+:[A-Za-z]{1,4}\\d+\\s+[A-Za-z]{1,4}/\n\nfunction splitTopLevelArgs(inner: string): string[] {\n const parts: string[] = []\n let depth = 0\n let start = 0\n for (let i = 0; i < inner.length; i++) {\n const ch = inner[i]\n if (ch === '(') depth++\n else if (ch === ')') depth--\n else if (ch === ',' && depth === 0) {\n parts.push(inner.slice(start, i).trim())\n start = i + 1\n }\n }\n parts.push(inner.slice(start).trim())\n return parts.filter(Boolean)\n}\n\nfunction detectNameError(expr: string): boolean {\n IDENT_FN_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = IDENT_FN_RE.exec(expr)) !== null) {\n const name = m[1].toUpperCase().replace(/\\./g, '')\n if (!isRegisteredBuiltin(name)) return true\n }\n return false\n}\n\nfunction detectNullRangeError(expr: string): boolean {\n return NULL_RANGE_RE.test(expr)\n}\n\nfunction resolveRefSheetId(\n ctx: FormulaContext,\n sheetIdOrName: string | undefined,\n): string | { error: 'REF' } {\n if (!sheetIdOrName) return ctx.activeSheetId\n const id = ctx.resolveSheetId(sheetIdOrName)\n if (!id) return { error: 'REF' }\n return id\n}\n\nfunction resolveArgNumbers(\n arg: string,\n ctx: FormulaContext,\n visiting: Set<string>,\n): number[] | { error: FormulaErrorCode } {\n if (arg.startsWith('#')) {\n const ref = parseInternalRefToken(arg)\n if (!ref) return { error: 'REF' }\n const sheetResolved = resolveRefSheetId(ctx, ref.sheetId)\n if (typeof sheetResolved !== 'string') return sheetResolved\n const sheetId = sheetResolved\n if (ref.endRowId != null && ref.endColId != null) {\n return collectIdRangeScalars(\n ctx,\n sheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n visiting,\n )\n }\n const raw = ctx.getScalarById(sheetId, ref.rowId, ref.colId, visiting)\n if (typeof raw === 'string' && raw.startsWith('#')) return { error: 'REF' }\n if (typeof raw === 'string' && raw !== '' && Number.isNaN(Number(raw))) {\n return { error: 'VALUE' }\n }\n return [coerceNumber(raw)]\n }\n const n = Number(arg)\n if (Number.isFinite(n)) return [n]\n if (arg.startsWith('\"') || /[A-Za-z\\u4e00-\\u9fff]/.test(arg)) return { error: 'VALUE' }\n return []\n}\n\nfunction evalFunctions(\n expr: string,\n ctx: FormulaContext,\n visiting: Set<string>,\n): string | { error: FormulaErrorCode } {\n let out = expr\n let guard = 0\n while (guard++ < 32) {\n FN_RE.lastIndex = 0\n const m = FN_RE.exec(out)\n if (!m) break\n const fnName = m[1].toUpperCase().replace(/\\./g, '') as FnName\n const fn = FN_MAP[fnName]\n if (!fn) {\n FN_RE.lastIndex = m.index + m[0].length\n continue\n }\n\n const open = m.index + m[0].length\n let depth = 1\n let i = open\n for (; i < out.length && depth > 0; i++) {\n if (out[i] === '(') depth++\n else if (out[i] === ')') depth--\n }\n if (depth !== 0) return { error: 'ERROR' }\n\n const inner = out.slice(open, i - 1)\n const args = splitTopLevelArgs(inner)\n const values: number[] = []\n for (const a of args) {\n const resolved = resolveArgNumbers(a, ctx, visiting)\n if (!Array.isArray(resolved)) return resolved\n values.push(...resolved)\n }\n\n let computed: number\n computed = fn(values)\n\n if (!Number.isFinite(computed)) return { error: 'NUM' }\n\n const replacement = String(computed)\n out = out.slice(0, m.index) + replacement + out.slice(i)\n }\n return out\n}\n\nfunction replaceInternalRefs(\n expr: string,\n ctx: FormulaContext,\n visiting: Set<string>,\n): string | { error: FormulaErrorCode } {\n const tokens = extractInternalRefTokens(expr)\n let out = expr\n for (const token of tokens) {\n const ref = parseInternalRefToken(token)\n if (!ref) continue\n const sheetResolved = resolveRefSheetId(ctx, ref.sheetId)\n if (typeof sheetResolved !== 'string') return sheetResolved\n const sheetId = sheetResolved\n if (ref.endRowId != null && ref.endColId != null) {\n const nums = collectIdRangeScalars(\n ctx,\n sheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n visiting,\n )\n const sumFn = FN_MAP.SUM\n if (!sumFn) return { error: 'NAME' }\n const sum = sumFn(nums)\n if (!Number.isFinite(sum)) return { error: 'NUM' }\n out = out.split(token).join(String(sum))\n continue\n }\n const raw = ctx.getScalarById(sheetId, ref.rowId, ref.colId, visiting)\n if (typeof raw === 'string' && raw.startsWith('#')) return { error: 'REF' }\n if (typeof raw === 'string' && raw !== '' && Number.isNaN(Number(raw))) {\n return { error: 'VALUE' }\n }\n const v = coerceNumber(raw)\n out = out.split(token).join(String(v))\n }\n return out\n}\n\nfunction safeArithmetic(expr: string): FormulaResult {\n const trimmed = expr.replace(/\\s/g, '')\n if (!trimmed) return formulaErrorResult('ERROR')\n\n if (/[a-zA-Z\"]/.test(trimmed)) {\n return formulaErrorResult('VALUE')\n }\n\n if (!/^[0-9+\\-*/().]+$/.test(trimmed)) {\n return formulaErrorResult('ERROR')\n }\n\n if (/\\/\\s*0+(?:\\.0*)?(?:[+\\-*/)]|$)/.test(trimmed)) {\n return formulaErrorResult('DIV0')\n }\n\n try {\n // eslint-disable-next-line no-new-func\n const v = new Function(`return (${trimmed})`)()\n if (typeof v !== 'number' || Number.isNaN(v)) {\n return formulaErrorResult('VALUE')\n }\n if (!Number.isFinite(v)) {\n return formulaErrorResult(Math.abs(v) === Infinity ? 'DIV0' : 'NUM')\n }\n const m = Number.isInteger(v) ? String(v) : String(Math.round(v * 1e9) / 1e9)\n return { value: v, m }\n } catch {\n return formulaErrorResult('ERROR')\n }\n}\n\nexport function evaluateFormulaString(\n raw: string,\n ctx: FormulaContext,\n visiting: Set<string> = new Set(),\n): FormulaResult {\n const text = raw.trim()\n if (!text.startsWith('=')) {\n return { value: text, m: text }\n }\n\n let expr = text.slice(1).trim()\n if (!expr) {\n return formulaErrorResult('ERROR')\n }\n\n if (detectNullRangeError(expr)) {\n return formulaErrorResult('NULL')\n }\n\n if (detectNameError(expr)) {\n return formulaErrorResult('NAME')\n }\n\n try {\n const afterFn = evalFunctions(expr, ctx, visiting)\n if (typeof afterFn !== 'string') {\n return formulaErrorResult(afterFn.error)\n }\n expr = afterFn\n\n if (hasInternalRefs(expr)) {\n const afterRefs = replaceInternalRefs(expr, ctx, visiting)\n if (typeof afterRefs !== 'string') {\n return formulaErrorResult(afterRefs.error)\n }\n expr = afterRefs\n }\n\n return safeArithmetic(expr)\n } catch {\n return formulaErrorResult('ERROR')\n }\n}\n\nexport { isFormulaInput } from './edit'\n","import { getFormulaErrorMessage } from './errors'\nimport type { FormulaResult } from './evaluate'\nimport type { CellAttributes } from '@speed-sheet/shared'\n\nexport function cellPatchFromFormulaResult(\n formula: string,\n result: FormulaResult,\n): Partial<CellAttributes> {\n const f = formula.trim()\n if (result.error) {\n return {\n f,\n v: null,\n m: result.m,\n ef: result.error,\n em: result.errorMessage ?? getFormulaErrorMessage(result.error),\n }\n }\n return {\n f,\n v: result.value,\n m: result.m,\n ef: undefined,\n em: undefined,\n }\n}\n","import { extractInternalRefTokens, hasInternalRefs } from './internal-ref-scan'\nimport { extractRefTokens } from './refs'\n\nexport const FORMULA_REF_COLORS = [\n '#1a73e8',\n '#0d9d57',\n '#e37400',\n '#9c27b0',\n '#d93025',\n] as const\n\nexport interface FormulaRefSpan {\n start: number\n end: number\n token: string\n color: string\n}\n\nfunction spansForTokens(formula: string, tokens: string[]): FormulaRefSpan[] {\n const spans: FormulaRefSpan[] = []\n let searchFrom = 0\n tokens.forEach((token, i) => {\n const idx = formula.indexOf(token, searchFrom)\n if (idx < 0) return\n spans.push({\n start: idx,\n end: idx + token.length,\n token,\n color: FORMULA_REF_COLORS[i % FORMULA_REF_COLORS.length],\n })\n searchFrom = idx + token.length\n })\n return spans\n}\n\n/** 公式内引用 token 着色区间 */\nexport function getFormulaRefSpans(formula: string): FormulaRefSpan[] {\n if (hasInternalRefs(formula)) {\n return spansForTokens(formula, extractInternalRefTokens(formula))\n }\n return spansForTokens(formula, extractRefTokens(formula))\n}\n","import * as Y from 'yjs'\nimport type { Sheet } from '@speed-sheet/core'\nimport { SheetState, transactSystem } from '@speed-sheet/core'\nimport { depKey, parseDepKey } from '@speed-sheet/shared'\nimport { createFormulaContext } from './context'\nimport { evaluateFormulaString } from './evaluate'\nimport {\n displayFormulaToInternal,\n extractInternalRefTokens,\n hasInternalRefs,\n parseInternalRefToken,\n} from './formula-bindings'\nimport { cellPatchFromFormulaResult } from './result'\nimport { extractRefTokens, parseRefToken } from './refs'\nimport { FORMULA_REF_COLORS } from './refSpans'\n\nexport interface FormulaRangeHighlight {\n sheetId: string\n row: [number, number]\n column: [number, number]\n color: string\n}\n\nconst HIGHLIGHT_COLORS = [...FORMULA_REF_COLORS]\n\nfunction refToHighlight(\n ctx: ReturnType<typeof createFormulaContext>,\n sheetId: string,\n r: number,\n c: number,\n color: string,\n): FormulaRangeHighlight {\n return { sheetId, row: [r, r], column: [c, c], color }\n}\n\nexport function buildHighlightsFromFormula(\n formula: string,\n ctx: ReturnType<typeof createFormulaContext>,\n): FormulaRangeHighlight[] {\n const out: FormulaRangeHighlight[] = []\n\n if (hasInternalRefs(formula)) {\n const tokens = extractInternalRefTokens(formula)\n tokens.forEach((token, i) => {\n const ref = parseInternalRefToken(token)\n if (!ref) return\n const sheetId = ref.sheetId ?? ctx.activeSheetId\n const color = HIGHLIGHT_COLORS[i % HIGHLIGHT_COLORS.length]\n if (ref.endRowId != null && ref.endColId != null) {\n const cells = ctx.expandIdRange(\n sheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n )\n if (!cells.length) return\n let rMin = Infinity\n let rMax = -Infinity\n let cMin = Infinity\n let cMax = -Infinity\n for (const { rowId, colId } of cells) {\n const pos = ctx.idsToDisplay(sheetId, rowId, colId)\n if (!pos) continue\n rMin = Math.min(rMin, pos.r)\n rMax = Math.max(rMax, pos.r)\n cMin = Math.min(cMin, pos.c)\n cMax = Math.max(cMax, pos.c)\n }\n if (rMin !== Infinity) {\n out.push({ sheetId, row: [rMin, rMax], column: [cMin, cMax], color })\n }\n } else {\n const pos = ctx.idsToDisplay(sheetId, ref.rowId, ref.colId)\n if (pos) out.push(refToHighlight(ctx, sheetId, pos.r, pos.c, color))\n }\n })\n return out\n }\n\n const tokens = extractRefTokens(formula)\n tokens.forEach((token, i) => {\n const ref = parseRefToken(token)\n if (!ref) return\n const sheetId = ctx.resolveSheetId(ref.sheet) ?? ctx.activeSheetId\n const color = HIGHLIGHT_COLORS[i % HIGHLIGHT_COLORS.length]\n if (ref.range) {\n out.push({ sheetId, row: ref.range.row, column: ref.range.column, color })\n } else if (ref.cell) {\n out.push(refToHighlight(ctx, sheetId, ref.cell.r, ref.cell.c, color))\n }\n })\n return out\n}\n\nexport function recalculateWorkbook(sheet: Sheet): void {\n const ctx = createFormulaContext(sheet)\n const sheetsMap = sheet.ydoc.getMap('sheets')\n const formulas: Array<{ sheetId: string; r: number; c: number; f: string }> = []\n\n for (const sheetId of sheet.getSheetIds()) {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) continue\n const state = new SheetState(ySheet)\n for (const { r, c, data } of state.getAllCells()) {\n if (data.f && String(data.f).startsWith('=') && hasInternalRefs(String(data.f))) {\n formulas.push({ sheetId, r, c, f: String(data.f) })\n }\n }\n }\n\n for (let pass = 0; pass < 8; pass++) {\n let changed = false\n for (const item of formulas) {\n const visiting = new Set<string>()\n const result = evaluateFormulaString(item.f, ctx, visiting)\n const ySheet = sheetsMap.get(item.sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) continue\n const state = new SheetState(ySheet)\n const prev = state.getCellData(item.r, item.c)\n const patch = cellPatchFromFormulaResult(item.f, result)\n if (prev?.v !== patch.v || prev?.m !== patch.m || prev?.ef !== patch.ef) {\n changed = true\n transactSystem(sheet.ydoc, () => {\n state.setCell(item.r, item.c, patch, false)\n })\n }\n }\n if (!changed) break\n }\n}\n\nexport function normalizeWorkbookFormulas(sheet: Sheet, dependents: Map<string, Set<string>>): void {\n const ctx = createFormulaContext(sheet)\n const sheetsMap = sheet.ydoc.getMap('sheets')\n\n for (const sheetId of sheet.getSheetIds()) {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) continue\n const state = new SheetState(ySheet)\n\n for (const { r, c, data } of state.getAllCells()) {\n const f = data.f ? String(data.f) : ''\n if (!f.startsWith('=') || hasInternalRefs(f)) continue\n\n const internal = displayFormulaToInternal(f, ctx, sheetId)\n const ids = state.resolveCellIds(r, c)\n if (!ids) continue\n\n transactSystem(sheet.ydoc, () => {\n state.setCell(r, c, { f: internal }, false)\n })\n registerFormulaDeps(sheetId, ids.rowId, ids.colId, internal, ctx, dependents)\n }\n }\n}\n\nexport function updateDependents(\n sheet: Sheet,\n changedSheetId: string,\n r: number,\n c: number,\n dependents: Map<string, Set<string>>,\n): void {\n const ySheet = sheet.ydoc.getMap('sheets').get(changedSheetId) as Y.Map<unknown> | undefined\n if (!ySheet) return\n const state = new SheetState(ySheet)\n const ids = state.resolveCellIds(r, c)\n if (!ids) return\n\n const key = depKey(changedSheetId, ids.rowId, ids.colId)\n const targets = dependents.get(key)\n if (!targets?.size) return\n\n const ctx = createFormulaContext(sheet)\n const sheetsMap = sheet.ydoc.getMap('sheets')\n\n for (const targetKey of targets) {\n const parsed = parseDepKey(targetKey)\n if (!parsed) continue\n const { sheetId, rowId, colId } = parsed\n const targetSheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!targetSheet) continue\n const targetState = new SheetState(targetSheet)\n const pos = ctx.idsToDisplay(sheetId, rowId, colId)\n if (!pos) continue\n const data = targetState.getCellData(pos.r, pos.c)\n if (!data?.f) continue\n const f = String(data.f)\n if (!hasInternalRefs(f)) continue\n const result = evaluateFormulaString(f, ctx)\n transactSystem(sheet.ydoc, () => {\n targetState.setCell(pos.r, pos.c, cellPatchFromFormulaResult(f, result), false)\n })\n }\n}\n\nexport function registerFormulaDeps(\n sheetId: string,\n rowId: string,\n colId: string,\n internalFormula: string,\n ctx: ReturnType<typeof createFormulaContext>,\n dependents: Map<string, Set<string>>,\n): void {\n const targetKey = depKey(sheetId, rowId, colId)\n\n for (const dep of dependents.values()) {\n dep.delete(targetKey)\n }\n for (const k of [...dependents.keys()]) {\n const set = dependents.get(k)!\n if (set.has(targetKey)) set.delete(targetKey)\n }\n\n for (const token of extractInternalRefTokens(internalFormula)) {\n const ref = parseInternalRefToken(token)\n if (!ref) continue\n const refSheetId = ref.sheetId ?? sheetId\n\n const link = (depRowId: string, depColId: string): void => {\n const depKeyStr = depKey(refSheetId, depRowId, depColId)\n if (!dependents.has(depKeyStr)) dependents.set(depKeyStr, new Set())\n dependents.get(depKeyStr)!.add(targetKey)\n }\n\n if (ref.endRowId != null && ref.endColId != null) {\n for (const cell of ctx.expandIdRange(\n refSheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n )) {\n link(cell.rowId, cell.colId)\n }\n } else {\n link(ref.rowId, ref.colId)\n }\n }\n}\n","import type { Sheet } from '@speed-sheet/core'\nimport {\n Extension,\n type CommandContext,\n type ExtensionCommandContext,\n} from '@speed-sheet/core'\nimport { depKey } from '@speed-sheet/shared'\nimport { createFormulaContext } from './context'\nimport { evaluateFormulaString, isFormulaInput } from './evaluate'\nimport {\n buildHighlightsFromFormula,\n normalizeWorkbookFormulas,\n recalculateWorkbook,\n registerFormulaDeps,\n updateDependents,\n} from './engine'\nimport { displayFormulaToInternal } from './formula-bindings'\nimport { cellPatchFromFormulaResult } from './result'\n\nexport interface FormulaStorage {\n evaluating: boolean\n dependents: Map<string, Set<string>>\n sheet: Sheet | null\n}\n\nfunction afterLayoutChange(sheet: Sheet, storage: FormulaStorage): void {\n storage.evaluating = true\n try {\n recalculateWorkbook(sheet)\n } finally {\n storage.evaluating = false\n }\n sheet.notifyLayoutChange()\n}\n\nexport const FormulaExtension = Extension.create<FormulaStorage>({\n name: 'formula',\n priority: 10,\n\n addStorage() {\n return {\n evaluating: false,\n dependents: new Map(),\n sheet: null,\n }\n },\n\n addCommands(ctx: ExtensionCommandContext) {\n const boundSheet = ctx.sheet\n\n return {\n setCellValue: (props: { r: number; c: number; value: string }) => {\n return ({ state }: CommandContext) => {\n const raw = props.value\n const sheetId = boundSheet.getActiveSheetId()\n const ids = state.resolveCellIds(props.r, props.c)\n\n if (isFormulaInput(raw)) {\n const fctx = createFormulaContext(boundSheet)\n const internal = displayFormulaToInternal(raw, fctx, sheetId)\n const result = evaluateFormulaString(internal, fctx)\n state.setCell(props.r, props.c, cellPatchFromFormulaResult(internal, result))\n if (ids) {\n registerFormulaDeps(\n sheetId,\n ids.rowId,\n ids.colId,\n internal,\n fctx,\n this.storage.dependents,\n )\n }\n } else {\n const num = Number(raw)\n const v: string | number = !Number.isNaN(num) && raw !== '' ? num : raw\n state.setCell(props.r, props.c, {\n v,\n m: raw,\n ef: undefined,\n em: undefined,\n })\n const cell = state.getCell(props.r, props.c)\n cell?.delete('f')\n if (ids) {\n const tk = depKey(sheetId, ids.rowId, ids.colId)\n for (const set of this.storage.dependents.values()) set.delete(tk)\n }\n }\n\n return true\n }\n },\n\n setCellFormula: (props: { r: number; c: number; formula: string }) => {\n return ({ state }: CommandContext) => {\n const display = props.formula.startsWith('=') ? props.formula : `=${props.formula}`\n const fctx = createFormulaContext(boundSheet)\n const sheetId = boundSheet.getActiveSheetId()\n const internal = displayFormulaToInternal(display, fctx, sheetId)\n const result = evaluateFormulaString(internal, fctx)\n const ids = state.resolveCellIds(props.r, props.c)\n state.setCell(props.r, props.c, cellPatchFromFormulaResult(internal, result))\n if (ids) {\n registerFormulaDeps(\n sheetId,\n ids.rowId,\n ids.colId,\n internal,\n fctx,\n this.storage.dependents,\n )\n }\n return true\n }\n },\n\n recalculateFormulas: () => {\n return () => {\n this.storage.evaluating = true\n try {\n recalculateWorkbook(boundSheet)\n } finally {\n this.storage.evaluating = false\n }\n return true\n }\n },\n\n insertRows: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.insertRows(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n deleteRows: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.deleteRows(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n insertCols: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.insertCols(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n deleteCols: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.deleteCols(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n }\n },\n\n onInit(this: Extension<FormulaStorage>, sheet: Sheet) {\n this.storage.sheet = sheet\n this.storage.evaluating = true\n try {\n normalizeWorkbookFormulas(sheet, this.storage.dependents)\n recalculateWorkbook(sheet)\n } finally {\n this.storage.evaluating = false\n }\n },\n\n onCellChange(this: Extension<FormulaStorage>, r: number, c: number) {\n if (this.storage.evaluating || !this.storage.sheet) return\n updateDependents(\n this.storage.sheet,\n this.storage.sheet.getActiveSheetId(),\n r,\n c,\n this.storage.dependents,\n )\n },\n})\n\nexport function getFormulaHighlights(sheet: Sheet, formula: string) {\n if (!isFormulaInput(formula)) return []\n const ctx = createFormulaContext(sheet)\n return buildHighlightsFromFormula(formula, ctx)\n}\n\nexport type { FormulaRangeHighlight } from './engine'\n"]}
1
+ {"version":3,"sources":["../../../../node_modules/.pnpm/jstat@1.9.6/node_modules/jstat/dist/jstat.js","../../../../node_modules/.pnpm/bessel@1.0.2/node_modules/bessel/bessel.js","../src/context.ts","../src/errors.ts","../src/internal-ref-scan.ts","../src/refs.ts","../src/formula-bindings.ts","../../../../node_modules/.pnpm/@formulajs+formulajs@4.6.0/node_modules/@formulajs/formulajs/lib/esm/index.mjs","../src/registry/formulajs-catalog.json","../src/registry/meta.ts","../src/registry/buildRegistry.ts","../src/registry/categories.ts","../src/registry/index.ts","../src/fnMap.ts","../src/edit.ts","../src/evaluate.ts","../src/result.ts","../src/refSpans.ts","../src/engine.ts","../src/extension.ts"],"names":["jStat","Math","undefined","isArray","num","i","transpose","slice","row","n","m","sum","number","value","curriedFunction","x","N","T","X","F","ssr","sse","sst","module","BESSEL","name","bessel","besselj","besseli","data","ID","AXIS_ID_PATTERN","ref","a","date","currentArray","xsqr","dof","x1","numbers","initial","values","dates","text","tokens","SheetState","depKey"],"mappings":"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","file":"index.js","sourcesContent":["(function (window, factory) {\n if (typeof exports === 'object') {\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n define(factory);\n } else {\n window.jStat = factory();\n }\n})(this, function () {\nvar jStat = (function(Math, undefined) {\n\n// For quick reference.\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n// Calculate correction for IEEE error\n// TODO: This calculation can be improved.\nfunction calcRdx(n, m) {\n var val = n > m ? n : m;\n return Math.pow(10,\n 17 - ~~(Math.log(((val > 0) ? val : -val)) * Math.LOG10E));\n}\n\n\nvar isArray = Array.isArray || function isArray(arg) {\n return toString.call(arg) === '[object Array]';\n};\n\n\nfunction isFunction(arg) {\n return toString.call(arg) === '[object Function]';\n}\n\n\nfunction isNumber(num) {\n return (typeof num === 'number') ? num - num === 0 : false;\n}\n\n\n// Converts the jStat matrix to vector.\nfunction toVector(arr) {\n return concat.apply([], arr);\n}\n\n\n// The one and only jStat constructor.\nfunction jStat() {\n return new jStat._init(arguments);\n}\n\n\n// TODO: Remove after all references in src files have been removed.\njStat.fn = jStat.prototype;\n\n\n// By separating the initializer from the constructor it's easier to handle\n// always returning a new instance whether \"new\" was used or not.\njStat._init = function _init(args) {\n // If first argument is an array, must be vector or matrix.\n if (isArray(args[0])) {\n // Check if matrix.\n if (isArray(args[0][0])) {\n // See if a mapping function was also passed.\n if (isFunction(args[1]))\n args[0] = jStat.map(args[0], args[1]);\n // Iterate over each is faster than this.push.apply(this, args[0].\n for (var i = 0; i < args[0].length; i++)\n this[i] = args[0][i];\n this.length = args[0].length;\n\n // Otherwise must be a vector.\n } else {\n this[0] = isFunction(args[1]) ? jStat.map(args[0], args[1]) : args[0];\n this.length = 1;\n }\n\n // If first argument is number, assume creation of sequence.\n } else if (isNumber(args[0])) {\n this[0] = jStat.seq.apply(null, args);\n this.length = 1;\n\n // Handle case when jStat object is passed to jStat.\n } else if (args[0] instanceof jStat) {\n // Duplicate the object and pass it back.\n return jStat(args[0].toArray());\n\n // Unexpected argument value, return empty jStat object.\n // TODO: This is strange behavior. Shouldn't this throw or some such to let\n // the user know they had bad arguments?\n } else {\n this[0] = [];\n this.length = 1;\n }\n\n return this;\n};\njStat._init.prototype = jStat.prototype;\njStat._init.constructor = jStat;\n\n\n// Utility functions.\n// TODO: for internal use only?\njStat.utils = {\n calcRdx: calcRdx,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n toVector: toVector\n};\n\n\njStat._random_fn = Math.random;\njStat.setRandom = function setRandom(fn) {\n if (typeof fn !== 'function')\n throw new TypeError('fn is not a function');\n jStat._random_fn = fn;\n};\n\n\n// Easily extend the jStat object.\n// TODO: is this seriously necessary?\njStat.extend = function extend(obj) {\n var i, j;\n\n if (arguments.length === 1) {\n for (j in obj)\n jStat[j] = obj[j];\n return this;\n }\n\n for (i = 1; i < arguments.length; i++) {\n for (j in arguments[i])\n obj[j] = arguments[i][j];\n }\n\n return obj;\n};\n\n\n// Returns the number of rows in the matrix.\njStat.rows = function rows(arr) {\n return arr.length || 1;\n};\n\n\n// Returns the number of columns in the matrix.\njStat.cols = function cols(arr) {\n return arr[0].length || 1;\n};\n\n\n// Returns the dimensions of the object { rows: i, cols: j }\njStat.dimensions = function dimensions(arr) {\n return {\n rows: jStat.rows(arr),\n cols: jStat.cols(arr)\n };\n};\n\n\n// Returns a specified row as a vector or return a sub matrix by pick some rows\njStat.row = function row(arr, index) {\n if (isArray(index)) {\n return index.map(function(i) {\n return jStat.row(arr, i);\n })\n }\n return arr[index];\n};\n\n\n// return row as array\n// rowa([[1,2],[3,4]],0) -> [1,2]\njStat.rowa = function rowa(arr, i) {\n return jStat.row(arr, i);\n};\n\n\n// Returns the specified column as a vector or return a sub matrix by pick some\n// columns\njStat.col = function col(arr, index) {\n if (isArray(index)) {\n var submat = jStat.arange(arr.length).map(function() {\n return new Array(index.length);\n });\n index.forEach(function(ind, i){\n jStat.arange(arr.length).forEach(function(j) {\n submat[j][i] = arr[j][ind];\n });\n });\n return submat;\n }\n var column = new Array(arr.length);\n for (var i = 0; i < arr.length; i++)\n column[i] = [arr[i][index]];\n return column;\n};\n\n\n// return column as array\n// cola([[1,2],[3,4]],0) -> [1,3]\njStat.cola = function cola(arr, i) {\n return jStat.col(arr, i).map(function(a){ return a[0] });\n};\n\n\n// Returns the diagonal of the matrix\njStat.diag = function diag(arr) {\n var nrow = jStat.rows(arr);\n var res = new Array(nrow);\n for (var row = 0; row < nrow; row++)\n res[row] = [arr[row][row]];\n return res;\n};\n\n\n// Returns the anti-diagonal of the matrix\njStat.antidiag = function antidiag(arr) {\n var nrow = jStat.rows(arr) - 1;\n var res = new Array(nrow);\n for (var i = 0; nrow >= 0; nrow--, i++)\n res[i] = [arr[i][nrow]];\n return res;\n};\n\n// Transpose a matrix or array.\njStat.transpose = function transpose(arr) {\n var obj = [];\n var objArr, rows, cols, j, i;\n\n // Make sure arr is in matrix format.\n if (!isArray(arr[0]))\n arr = [arr];\n\n rows = arr.length;\n cols = arr[0].length;\n\n for (i = 0; i < cols; i++) {\n objArr = new Array(rows);\n for (j = 0; j < rows; j++)\n objArr[j] = arr[j][i];\n obj.push(objArr);\n }\n\n // If obj is vector, return only single array.\n return obj.length === 1 ? obj[0] : obj;\n};\n\n\n// Map a function to an array or array of arrays.\n// \"toAlter\" is an internal variable.\njStat.map = function map(arr, func, toAlter) {\n var row, nrow, ncol, res, col;\n\n if (!isArray(arr[0]))\n arr = [arr];\n\n nrow = arr.length;\n ncol = arr[0].length;\n res = toAlter ? arr : new Array(nrow);\n\n for (row = 0; row < nrow; row++) {\n // if the row doesn't exist, create it\n if (!res[row])\n res[row] = new Array(ncol);\n for (col = 0; col < ncol; col++)\n res[row][col] = func(arr[row][col], row, col);\n }\n\n return res.length === 1 ? res[0] : res;\n};\n\n\n// Cumulatively combine the elements of an array or array of arrays using a function.\njStat.cumreduce = function cumreduce(arr, func, toAlter) {\n var row, nrow, ncol, res, col;\n\n if (!isArray(arr[0]))\n arr = [arr];\n\n nrow = arr.length;\n ncol = arr[0].length;\n res = toAlter ? arr : new Array(nrow);\n\n for (row = 0; row < nrow; row++) {\n // if the row doesn't exist, create it\n if (!res[row])\n res[row] = new Array(ncol);\n if (ncol > 0)\n res[row][0] = arr[row][0];\n for (col = 1; col < ncol; col++)\n res[row][col] = func(res[row][col-1], arr[row][col]);\n }\n return res.length === 1 ? res[0] : res;\n};\n\n\n// Destructively alter an array.\njStat.alter = function alter(arr, func) {\n return jStat.map(arr, func, true);\n};\n\n\n// Generate a rows x cols matrix according to the supplied function.\njStat.create = function create(rows, cols, func) {\n var res = new Array(rows);\n var i, j;\n\n if (isFunction(cols)) {\n func = cols;\n cols = rows;\n }\n\n for (i = 0; i < rows; i++) {\n res[i] = new Array(cols);\n for (j = 0; j < cols; j++)\n res[i][j] = func(i, j);\n }\n\n return res;\n};\n\n\nfunction retZero() { return 0; }\n\n\n// Generate a rows x cols matrix of zeros.\njStat.zeros = function zeros(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retZero);\n};\n\n\nfunction retOne() { return 1; }\n\n\n// Generate a rows x cols matrix of ones.\njStat.ones = function ones(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retOne);\n};\n\n\n// Generate a rows x cols matrix of uniformly random numbers.\njStat.rand = function rand(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, jStat._random_fn);\n};\n\n\nfunction retIdent(i, j) { return i === j ? 1 : 0; }\n\n\n// Generate an identity matrix of size row x cols.\njStat.identity = function identity(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retIdent);\n};\n\n\n// Tests whether a matrix is symmetric\njStat.symmetric = function symmetric(arr) {\n var size = arr.length;\n var row, col;\n\n if (arr.length !== arr[0].length)\n return false;\n\n for (row = 0; row < size; row++) {\n for (col = 0; col < size; col++)\n if (arr[col][row] !== arr[row][col])\n return false;\n }\n\n return true;\n};\n\n\n// Set all values to zero.\njStat.clear = function clear(arr) {\n return jStat.alter(arr, retZero);\n};\n\n\n// Generate sequence.\njStat.seq = function seq(min, max, length, func) {\n if (!isFunction(func))\n func = false;\n\n var arr = [];\n var hival = calcRdx(min, max);\n var step = (max * hival - min * hival) / ((length - 1) * hival);\n var current = min;\n var cnt;\n\n // Current is assigned using a technique to compensate for IEEE error.\n // TODO: Needs better implementation.\n for (cnt = 0;\n current <= max && cnt < length;\n cnt++, current = (min * hival + step * hival * cnt) / hival) {\n arr.push((func ? func(current, cnt) : current));\n }\n\n return arr;\n};\n\n\n// arange(5) -> [0,1,2,3,4]\n// arange(1,5) -> [1,2,3,4]\n// arange(5,1,-1) -> [5,4,3,2]\njStat.arange = function arange(start, end, step) {\n var rl = [];\n var i;\n step = step || 1;\n if (end === undefined) {\n end = start;\n start = 0;\n }\n if (start === end || step === 0) {\n return [];\n }\n if (start < end && step < 0) {\n return [];\n }\n if (start > end && step > 0) {\n return [];\n }\n if (step > 0) {\n for (i = start; i < end; i += step) {\n rl.push(i);\n }\n } else {\n for (i = start; i > end; i += step) {\n rl.push(i);\n }\n }\n return rl;\n};\n\n\n// A=[[1,2,3],[4,5,6],[7,8,9]]\n// slice(A,{row:{end:2},col:{start:1}}) -> [[2,3],[5,6]]\n// slice(A,1,{start:1}) -> [5,6]\n// as numpy code A[:2,1:]\njStat.slice = (function(){\n function _slice(list, start, end, step) {\n // note it's not equal to range.map mode it's a bug\n var i;\n var rl = [];\n var length = list.length;\n if (start === undefined && end === undefined && step === undefined) {\n return jStat.copy(list);\n }\n\n start = start || 0;\n end = end || list.length;\n start = start >= 0 ? start : length + start;\n end = end >= 0 ? end : length + end;\n step = step || 1;\n if (start === end || step === 0) {\n return [];\n }\n if (start < end && step < 0) {\n return [];\n }\n if (start > end && step > 0) {\n return [];\n }\n if (step > 0) {\n for (i = start; i < end; i += step) {\n rl.push(list[i]);\n }\n } else {\n for (i = start; i > end;i += step) {\n rl.push(list[i]);\n }\n }\n return rl;\n }\n\n function slice(list, rcSlice) {\n var colSlice, rowSlice;\n rcSlice = rcSlice || {};\n if (isNumber(rcSlice.row)) {\n if (isNumber(rcSlice.col))\n return list[rcSlice.row][rcSlice.col];\n var row = jStat.rowa(list, rcSlice.row);\n colSlice = rcSlice.col || {};\n return _slice(row, colSlice.start, colSlice.end, colSlice.step);\n }\n\n if (isNumber(rcSlice.col)) {\n var col = jStat.cola(list, rcSlice.col);\n rowSlice = rcSlice.row || {};\n return _slice(col, rowSlice.start, rowSlice.end, rowSlice.step);\n }\n\n rowSlice = rcSlice.row || {};\n colSlice = rcSlice.col || {};\n var rows = _slice(list, rowSlice.start, rowSlice.end, rowSlice.step);\n return rows.map(function(row) {\n return _slice(row, colSlice.start, colSlice.end, colSlice.step);\n });\n }\n\n return slice;\n}());\n\n\n// A=[[1,2,3],[4,5,6],[7,8,9]]\n// sliceAssign(A,{row:{start:1},col:{start:1}},[[0,0],[0,0]])\n// A=[[1,2,3],[4,0,0],[7,0,0]]\njStat.sliceAssign = function sliceAssign(A, rcSlice, B) {\n var nl, ml;\n if (isNumber(rcSlice.row)) {\n if (isNumber(rcSlice.col))\n return A[rcSlice.row][rcSlice.col] = B;\n rcSlice.col = rcSlice.col || {};\n rcSlice.col.start = rcSlice.col.start || 0;\n rcSlice.col.end = rcSlice.col.end || A[0].length;\n rcSlice.col.step = rcSlice.col.step || 1;\n nl = jStat.arange(rcSlice.col.start,\n Math.min(A.length, rcSlice.col.end),\n rcSlice.col.step);\n var m = rcSlice.row;\n nl.forEach(function(n, i) {\n A[m][n] = B[i];\n });\n return A;\n }\n\n if (isNumber(rcSlice.col)) {\n rcSlice.row = rcSlice.row || {};\n rcSlice.row.start = rcSlice.row.start || 0;\n rcSlice.row.end = rcSlice.row.end || A.length;\n rcSlice.row.step = rcSlice.row.step || 1;\n ml = jStat.arange(rcSlice.row.start,\n Math.min(A[0].length, rcSlice.row.end),\n rcSlice.row.step);\n var n = rcSlice.col;\n ml.forEach(function(m, j) {\n A[m][n] = B[j];\n });\n return A;\n }\n\n if (B[0].length === undefined) {\n B = [B];\n }\n rcSlice.row.start = rcSlice.row.start || 0;\n rcSlice.row.end = rcSlice.row.end || A.length;\n rcSlice.row.step = rcSlice.row.step || 1;\n rcSlice.col.start = rcSlice.col.start || 0;\n rcSlice.col.end = rcSlice.col.end || A[0].length;\n rcSlice.col.step = rcSlice.col.step || 1;\n ml = jStat.arange(rcSlice.row.start,\n Math.min(A.length, rcSlice.row.end),\n rcSlice.row.step);\n nl = jStat.arange(rcSlice.col.start,\n Math.min(A[0].length, rcSlice.col.end),\n rcSlice.col.step);\n ml.forEach(function(m, i) {\n nl.forEach(function(n, j) {\n A[m][n] = B[i][j];\n });\n });\n return A;\n};\n\n\n// [1,2,3] ->\n// [[1,0,0],[0,2,0],[0,0,3]]\njStat.diagonal = function diagonal(diagArray) {\n var mat = jStat.zeros(diagArray.length, diagArray.length);\n diagArray.forEach(function(t, i) {\n mat[i][i] = t;\n });\n return mat;\n};\n\n\n// return copy of A\njStat.copy = function copy(A) {\n return A.map(function(row) {\n if (isNumber(row))\n return row;\n return row.map(function(t) {\n return t;\n });\n });\n};\n\n\n// TODO: Go over this entire implementation. Seems a tragic waste of resources\n// doing all this work. Instead, and while ugly, use new Function() to generate\n// a custom function for each static method.\n\n// Quick reference.\nvar jProto = jStat.prototype;\n\n// Default length.\njProto.length = 0;\n\n// For internal use only.\n// TODO: Check if they're actually used, and if they are then rename them\n// to _*\njProto.push = Array.prototype.push;\njProto.sort = Array.prototype.sort;\njProto.splice = Array.prototype.splice;\njProto.slice = Array.prototype.slice;\n\n\n// Return a clean array.\njProto.toArray = function toArray() {\n return this.length > 1 ? slice.call(this) : slice.call(this)[0];\n};\n\n\n// Map a function to a matrix or vector.\njProto.map = function map(func, toAlter) {\n return jStat(jStat.map(this, func, toAlter));\n};\n\n\n// Cumulatively combine the elements of a matrix or vector using a function.\njProto.cumreduce = function cumreduce(func, toAlter) {\n return jStat(jStat.cumreduce(this, func, toAlter));\n};\n\n\n// Destructively alter an array.\njProto.alter = function alter(func) {\n jStat.alter(this, func);\n return this;\n};\n\n\n// Extend prototype with methods that have no argument.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function(func) {\n var self = this,\n results;\n // Check for callback.\n if (func) {\n setTimeout(function() {\n func.call(self, jProto[passfunc].call(self));\n });\n return this;\n }\n results = jStat[passfunc](this);\n return isArray(results) ? jStat(results) : results;\n };\n })(funcs[i]);\n})('transpose clear symmetric rows cols dimensions diag antidiag'.split(' '));\n\n\n// Extend prototype with methods that have one argument.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function(index, func) {\n var self = this;\n // check for callback\n if (func) {\n setTimeout(function() {\n func.call(self, jProto[passfunc].call(self, index));\n });\n return this;\n }\n return jStat(jStat[passfunc](this, index));\n };\n })(funcs[i]);\n})('row col'.split(' '));\n\n\n// Extend prototype with simple shortcut methods.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function() {\n return jStat(jStat[passfunc].apply(null, arguments));\n };\n })(funcs[i]);\n})('create zeros ones rand identity'.split(' '));\n\n\n// Exposing jStat.\nreturn jStat;\n\n}(Math));\n(function(jStat, Math) {\n\nvar isFunction = jStat.utils.isFunction;\n\n// Ascending functions for sort\nfunction ascNum(a, b) { return a - b; }\n\nfunction clip(arg, min, max) {\n return Math.max(min, Math.min(arg, max));\n}\n\n\n// sum of an array\njStat.sum = function sum(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i];\n return sum;\n};\n\n\n// sum squared\njStat.sumsqrd = function sumsqrd(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i] * arr[i];\n return sum;\n};\n\n\n// sum of squared errors of prediction (SSE)\njStat.sumsqerr = function sumsqerr(arr) {\n var mean = jStat.mean(arr);\n var sum = 0;\n var i = arr.length;\n var tmp;\n while (--i >= 0) {\n tmp = arr[i] - mean;\n sum += tmp * tmp;\n }\n return sum;\n};\n\n// sum of an array in each row\njStat.sumrow = function sumrow(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i];\n return sum;\n};\n\n// product of an array\njStat.product = function product(arr) {\n var prod = 1;\n var i = arr.length;\n while (--i >= 0)\n prod *= arr[i];\n return prod;\n};\n\n\n// minimum value of an array\njStat.min = function min(arr) {\n var low = arr[0];\n var i = 0;\n while (++i < arr.length)\n if (arr[i] < low)\n low = arr[i];\n return low;\n};\n\n\n// maximum value of an array\njStat.max = function max(arr) {\n var high = arr[0];\n var i = 0;\n while (++i < arr.length)\n if (arr[i] > high)\n high = arr[i];\n return high;\n};\n\n\n// unique values of an array\njStat.unique = function unique(arr) {\n var hash = {}, _arr = [];\n for(var i = 0; i < arr.length; i++) {\n if (!hash[arr[i]]) {\n hash[arr[i]] = true;\n _arr.push(arr[i]);\n }\n }\n return _arr;\n};\n\n\n// mean value of an array\njStat.mean = function mean(arr) {\n return jStat.sum(arr) / arr.length;\n};\n\n\n// mean squared error (MSE)\njStat.meansqerr = function meansqerr(arr) {\n return jStat.sumsqerr(arr) / arr.length;\n};\n\n\n// geometric mean of an array\njStat.geomean = function geomean(arr) {\n var logs = arr.map(Math.log)\n var meanOfLogs = jStat.mean(logs)\n return Math.exp(meanOfLogs)\n};\n\n\n// median of an array\njStat.median = function median(arr) {\n var arrlen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n // check if array is even or odd, then return the appropriate\n return !(arrlen & 1)\n ? (_arr[(arrlen / 2) - 1 ] + _arr[(arrlen / 2)]) / 2\n : _arr[(arrlen / 2) | 0 ];\n};\n\n\n// cumulative sum of an array\njStat.cumsum = function cumsum(arr) {\n return jStat.cumreduce(arr, function (a, b) { return a + b; });\n};\n\n\n// cumulative product of an array\njStat.cumprod = function cumprod(arr) {\n return jStat.cumreduce(arr, function (a, b) { return a * b; });\n};\n\n\n// successive differences of a sequence\njStat.diff = function diff(arr) {\n var diffs = [];\n var arrLen = arr.length;\n var i;\n for (i = 1; i < arrLen; i++)\n diffs.push(arr[i] - arr[i - 1]);\n return diffs;\n};\n\n\n// ranks of an array\njStat.rank = function (arr) {\n var i;\n var distinctNumbers = [];\n var numberCounts = {};\n for (i = 0; i < arr.length; i++) {\n var number = arr[i];\n if (numberCounts[number]) {\n numberCounts[number]++;\n } else {\n numberCounts[number] = 1;\n distinctNumbers.push(number);\n }\n }\n\n var sortedDistinctNumbers = distinctNumbers.sort(ascNum);\n var numberRanks = {};\n var currentRank = 1;\n for (i = 0; i < sortedDistinctNumbers.length; i++) {\n var number = sortedDistinctNumbers[i];\n var count = numberCounts[number];\n var first = currentRank;\n var last = currentRank + count - 1;\n var rank = (first + last) / 2;\n numberRanks[number] = rank;\n currentRank += count;\n }\n\n return arr.map(function (number) {\n return numberRanks[number];\n });\n};\n\n\n// mode of an array\n// if there are multiple modes of an array, return all of them\n// is this the appropriate way of handling it?\njStat.mode = function mode(arr) {\n var arrLen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n var count = 1;\n var maxCount = 0;\n var numMaxCount = 0;\n var mode_arr = [];\n var i;\n\n for (i = 0; i < arrLen; i++) {\n if (_arr[i] === _arr[i + 1]) {\n count++;\n } else {\n if (count > maxCount) {\n mode_arr = [_arr[i]];\n maxCount = count;\n numMaxCount = 0;\n }\n // are there multiple max counts\n else if (count === maxCount) {\n mode_arr.push(_arr[i]);\n numMaxCount++;\n }\n // resetting count for new value in array\n count = 1;\n }\n }\n\n return numMaxCount === 0 ? mode_arr[0] : mode_arr;\n};\n\n\n// range of an array\njStat.range = function range(arr) {\n return jStat.max(arr) - jStat.min(arr);\n};\n\n// variance of an array\n// flag = true indicates sample instead of population\njStat.variance = function variance(arr, flag) {\n return jStat.sumsqerr(arr) / (arr.length - (flag ? 1 : 0));\n};\n\n// pooled variance of an array of arrays\njStat.pooledvariance = function pooledvariance(arr) {\n var sumsqerr = arr.reduce(function (a, samples) {return a + jStat.sumsqerr(samples);}, 0);\n var count = arr.reduce(function (a, samples) {return a + samples.length;}, 0);\n return sumsqerr / (count - arr.length);\n};\n\n// deviation of an array\njStat.deviation = function (arr) {\n var mean = jStat.mean(arr);\n var arrlen = arr.length;\n var dev = new Array(arrlen);\n for (var i = 0; i < arrlen; i++) {\n dev[i] = arr[i] - mean;\n }\n return dev;\n};\n\n// standard deviation of an array\n// flag = true indicates sample instead of population\njStat.stdev = function stdev(arr, flag) {\n return Math.sqrt(jStat.variance(arr, flag));\n};\n\n// pooled standard deviation of an array of arrays\njStat.pooledstdev = function pooledstdev(arr) {\n return Math.sqrt(jStat.pooledvariance(arr));\n};\n\n// mean deviation (mean absolute deviation) of an array\njStat.meandev = function meandev(arr) {\n var mean = jStat.mean(arr);\n var a = [];\n for (var i = arr.length - 1; i >= 0; i--) {\n a.push(Math.abs(arr[i] - mean));\n }\n return jStat.mean(a);\n};\n\n\n// median deviation (median absolute deviation) of an array\njStat.meddev = function meddev(arr) {\n var median = jStat.median(arr);\n var a = [];\n for (var i = arr.length - 1; i >= 0; i--) {\n a.push(Math.abs(arr[i] - median));\n }\n return jStat.median(a);\n};\n\n\n// coefficient of variation\njStat.coeffvar = function coeffvar(arr) {\n return jStat.stdev(arr) / jStat.mean(arr);\n};\n\n\n// quartiles of an array\njStat.quartiles = function quartiles(arr) {\n var arrlen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n return [\n _arr[ Math.round((arrlen) / 4) - 1 ],\n _arr[ Math.round((arrlen) / 2) - 1 ],\n _arr[ Math.round((arrlen) * 3 / 4) - 1 ]\n ];\n};\n\n\n// Arbitary quantiles of an array. Direct port of the scipy.stats\n// implementation by Pierre GF Gerard-Marchant.\njStat.quantiles = function quantiles(arr, quantilesArray, alphap, betap) {\n var sortedArray = arr.slice().sort(ascNum);\n var quantileVals = [quantilesArray.length];\n var n = arr.length;\n var i, p, m, aleph, k, gamma;\n\n if (typeof alphap === 'undefined')\n alphap = 3 / 8;\n if (typeof betap === 'undefined')\n betap = 3 / 8;\n\n for (i = 0; i < quantilesArray.length; i++) {\n p = quantilesArray[i];\n m = alphap + p * (1 - alphap - betap);\n aleph = n * p + m;\n k = Math.floor(clip(aleph, 1, n - 1));\n gamma = clip(aleph - k, 0, 1);\n quantileVals[i] = (1 - gamma) * sortedArray[k - 1] + gamma * sortedArray[k];\n }\n\n return quantileVals;\n};\n\n// Return the k-th percentile of values in a range, where k is in the range 0..1, inclusive.\n// Passing true for the exclusive parameter excludes both endpoints of the range.\njStat.percentile = function percentile(arr, k, exclusive) {\n var _arr = arr.slice().sort(ascNum);\n var realIndex = k * (_arr.length + (exclusive ? 1 : -1)) + (exclusive ? 0 : 1);\n var index = parseInt(realIndex);\n var frac = realIndex - index;\n if (index + 1 < _arr.length) {\n return _arr[index - 1] + frac * (_arr[index] - _arr[index - 1]);\n } else {\n return _arr[index - 1];\n }\n}\n\n// The percentile rank of score in a given array. Returns the percentage\n// of all values in the input array that are less than (kind='strict') or\n// less or equal than (kind='weak') score. Default is weak.\njStat.percentileOfScore = function percentileOfScore(arr, score, kind) {\n var counter = 0;\n var len = arr.length;\n var strict = false;\n var value, i;\n\n if (kind === 'strict')\n strict = true;\n\n for (i = 0; i < len; i++) {\n value = arr[i];\n if ((strict && value < score) ||\n (!strict && value <= score)) {\n counter++;\n }\n }\n\n return counter / len;\n};\n\n\n// Histogram (bin count) data\njStat.histogram = function histogram(arr, binCnt) {\n binCnt = binCnt || 4;\n var first = jStat.min(arr);\n var binWidth = (jStat.max(arr) - first) / binCnt;\n var len = arr.length;\n var bins = [];\n var i;\n\n for (i = 0; i < binCnt; i++)\n bins[i] = 0;\n for (i = 0; i < len; i++)\n bins[Math.min(Math.floor(((arr[i] - first) / binWidth)), binCnt - 1)] += 1;\n\n return bins;\n};\n\n\n// covariance of two arrays\njStat.covariance = function covariance(arr1, arr2) {\n var u = jStat.mean(arr1);\n var v = jStat.mean(arr2);\n var arr1Len = arr1.length;\n var sq_dev = new Array(arr1Len);\n var i;\n\n for (i = 0; i < arr1Len; i++)\n sq_dev[i] = (arr1[i] - u) * (arr2[i] - v);\n\n return jStat.sum(sq_dev) / (arr1Len - 1);\n};\n\n\n// (pearson's) population correlation coefficient, rho\njStat.corrcoeff = function corrcoeff(arr1, arr2) {\n return jStat.covariance(arr1, arr2) /\n jStat.stdev(arr1, 1) /\n jStat.stdev(arr2, 1);\n};\n\n // (spearman's) rank correlation coefficient, sp\njStat.spearmancoeff = function (arr1, arr2) {\n arr1 = jStat.rank(arr1);\n arr2 = jStat.rank(arr2);\n //return pearson's correlation of the ranks:\n return jStat.corrcoeff(arr1, arr2);\n}\n\n\n// statistical standardized moments (general form of skew/kurt)\njStat.stanMoment = function stanMoment(arr, n) {\n var mu = jStat.mean(arr);\n var sigma = jStat.stdev(arr);\n var len = arr.length;\n var skewSum = 0;\n\n for (var i = 0; i < len; i++)\n skewSum += Math.pow((arr[i] - mu) / sigma, n);\n\n return skewSum / arr.length;\n};\n\n// (pearson's) moment coefficient of skewness\njStat.skewness = function skewness(arr) {\n return jStat.stanMoment(arr, 3);\n};\n\n// (pearson's) (excess) kurtosis\njStat.kurtosis = function kurtosis(arr) {\n return jStat.stanMoment(arr, 4) - 3;\n};\n\n\nvar jProto = jStat.prototype;\n\n\n// Extend jProto with method for calculating cumulative sums and products.\n// This differs from the similar extension below as cumsum and cumprod should\n// not be run again in the case fullbool === true.\n// If a matrix is passed, automatically assume operation should be done on the\n// columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n // If a matrix is passed, automatically assume operation should be done on\n // the columns.\n jProto[passfunc] = function(fullbool, func) {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n // Assignment reassignation depending on how parameters were passed in.\n if (isFunction(fullbool)) {\n func = fullbool;\n fullbool = false;\n }\n // Check if a callback was passed with the function.\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));\n });\n return this;\n }\n // Check if matrix and run calculations.\n if (this.length > 1) {\n tmpthis = fullbool === true ? this : this.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = jStat[passfunc](tmpthis[i]);\n return arr;\n }\n // Pass fullbool if only vector, not a matrix. for variance and stdev.\n return jStat[passfunc](this[0], fullbool);\n };\n })(funcs[i]);\n})(('cumsum cumprod').split(' '));\n\n\n// Extend jProto with methods which don't require arguments and work on columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n // If a matrix is passed, automatically assume operation should be done on\n // the columns.\n jProto[passfunc] = function(fullbool, func) {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n // Assignment reassignation depending on how parameters were passed in.\n if (isFunction(fullbool)) {\n func = fullbool;\n fullbool = false;\n }\n // Check if a callback was passed with the function.\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));\n });\n return this;\n }\n // Check if matrix and run calculations.\n if (this.length > 1) {\n if (passfunc !== 'sumrow')\n tmpthis = fullbool === true ? this : this.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = jStat[passfunc](tmpthis[i]);\n return fullbool === true\n ? jStat[passfunc](jStat.utils.toVector(arr))\n : arr;\n }\n // Pass fullbool if only vector, not a matrix. for variance and stdev.\n return jStat[passfunc](this[0], fullbool);\n };\n })(funcs[i]);\n})(('sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr ' +\n 'geomean median diff rank mode range variance deviation stdev meandev ' +\n 'meddev coeffvar quartiles histogram skewness kurtosis').split(' '));\n\n\n// Extend jProto with functions that take arguments. Operations on matrices are\n// done on columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function() {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n var args = Array.prototype.slice.call(arguments);\n var callbackFunction;\n\n // If the last argument is a function, we assume it's a callback; we\n // strip the callback out and call the function again.\n if (isFunction(args[args.length - 1])) {\n callbackFunction = args[args.length - 1];\n var argsToPass = args.slice(0, args.length - 1);\n\n setTimeout(function() {\n callbackFunction.call(tmpthis,\n jProto[passfunc].apply(tmpthis, argsToPass));\n });\n return this;\n\n // Otherwise we curry the function args and call normally.\n } else {\n callbackFunction = undefined;\n var curriedFunction = function curriedFunction(vector) {\n return jStat[passfunc].apply(tmpthis, [vector].concat(args));\n }\n }\n\n // If this is a matrix, run column-by-column.\n if (this.length > 1) {\n tmpthis = tmpthis.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = curriedFunction(tmpthis[i]);\n return arr;\n }\n\n // Otherwise run on the vector.\n return curriedFunction(this[0]);\n };\n })(funcs[i]);\n})('quantiles percentileOfScore'.split(' '));\n\n}(jStat, Math));\n// Special functions //\n(function(jStat, Math) {\n\n// Log-gamma function\njStat.gammaln = function gammaln(x) {\n var j = 0;\n var cof = [\n 76.18009172947146, -86.50532032941677, 24.01409824083091,\n -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5\n ];\n var ser = 1.000000000190015;\n var xx, y, tmp;\n tmp = (y = xx = x) + 5.5;\n tmp -= (xx + 0.5) * Math.log(tmp);\n for (; j < 6; j++)\n ser += cof[j] / ++y;\n return Math.log(2.5066282746310005 * ser / xx) - tmp;\n};\n\n/*\n * log-gamma function to support poisson distribution sampling. The\n * algorithm comes from SPECFUN by Shanjie Zhang and Jianming Jin and their\n * book \"Computation of Special Functions\", 1996, John Wiley & Sons, Inc.\n */\njStat.loggam = function loggam(x) {\n var x0, x2, xp, gl, gl0;\n var k, n;\n\n var a = [8.333333333333333e-02, -2.777777777777778e-03,\n 7.936507936507937e-04, -5.952380952380952e-04,\n 8.417508417508418e-04, -1.917526917526918e-03,\n 6.410256410256410e-03, -2.955065359477124e-02,\n 1.796443723688307e-01, -1.39243221690590e+00];\n x0 = x;\n n = 0;\n if ((x == 1.0) || (x == 2.0)) {\n return 0.0;\n }\n if (x <= 7.0) {\n n = Math.floor(7 - x);\n x0 = x + n;\n }\n x2 = 1.0 / (x0 * x0);\n xp = 2 * Math.PI;\n gl0 = a[9];\n for (k = 8; k >= 0; k--) {\n gl0 *= x2;\n gl0 += a[k];\n }\n gl = gl0 / x0 + 0.5 * Math.log(xp) + (x0 - 0.5) * Math.log(x0) - x0;\n if (x <= 7.0) {\n for (k = 1; k <= n; k++) {\n gl -= Math.log(x0 - 1.0);\n x0 -= 1.0;\n }\n }\n return gl;\n}\n\n// gamma of x\njStat.gammafn = function gammafn(x) {\n var p = [-1.716185138865495, 24.76565080557592, -379.80425647094563,\n 629.3311553128184, 866.9662027904133, -31451.272968848367,\n -36144.413418691176, 66456.14382024054\n ];\n var q = [-30.8402300119739, 315.35062697960416, -1015.1563674902192,\n -3107.771671572311, 22538.118420980151, 4755.8462775278811,\n -134659.9598649693, -115132.2596755535];\n var fact = false;\n var n = 0;\n var xden = 0;\n var xnum = 0;\n var y = x;\n var i, z, yi, res;\n if (x > 171.6243769536076) {\n return Infinity;\n }\n if (y <= 0) {\n res = y % 1 + 3.6e-16;\n if (res) {\n fact = (!(y & 1) ? 1 : -1) * Math.PI / Math.sin(Math.PI * res);\n y = 1 - y;\n } else {\n return Infinity;\n }\n }\n yi = y;\n if (y < 1) {\n z = y++;\n } else {\n z = (y -= n = (y | 0) - 1) - 1;\n }\n for (i = 0; i < 8; ++i) {\n xnum = (xnum + p[i]) * z;\n xden = xden * z + q[i];\n }\n res = xnum / xden + 1;\n if (yi < y) {\n res /= yi;\n } else if (yi > y) {\n for (i = 0; i < n; ++i) {\n res *= y;\n y++;\n }\n }\n if (fact) {\n res = fact / res;\n }\n return res;\n};\n\n\n// lower incomplete gamma function, which is usually typeset with a\n// lower-case greek gamma as the function symbol\njStat.gammap = function gammap(a, x) {\n return jStat.lowRegGamma(a, x) * jStat.gammafn(a);\n};\n\n\n// The lower regularized incomplete gamma function, usually written P(a,x)\njStat.lowRegGamma = function lowRegGamma(a, x) {\n var aln = jStat.gammaln(a);\n var ap = a;\n var sum = 1 / a;\n var del = sum;\n var b = x + 1 - a;\n var c = 1 / 1.0e-30;\n var d = 1 / b;\n var h = d;\n var i = 1;\n // calculate maximum number of itterations required for a\n var ITMAX = -~(Math.log((a >= 1) ? a : 1 / a) * 8.5 + a * 0.4 + 17);\n var an;\n\n if (x < 0 || a <= 0) {\n return NaN;\n } else if (x < a + 1) {\n for (; i <= ITMAX; i++) {\n sum += del *= x / ++ap;\n }\n return (sum * Math.exp(-x + a * Math.log(x) - (aln)));\n }\n\n for (; i <= ITMAX; i++) {\n an = -i * (i - a);\n b += 2;\n d = an * d + b;\n c = b + an / c;\n d = 1 / d;\n h *= d * c;\n }\n\n return (1 - h * Math.exp(-x + a * Math.log(x) - (aln)));\n};\n\n// natural log factorial of n\njStat.factorialln = function factorialln(n) {\n return n < 0 ? NaN : jStat.gammaln(n + 1);\n};\n\n// factorial of n\njStat.factorial = function factorial(n) {\n return n < 0 ? NaN : jStat.gammafn(n + 1);\n};\n\n// combinations of n, m\njStat.combination = function combination(n, m) {\n // make sure n or m don't exceed the upper limit of usable values\n return (n > 170 || m > 170)\n ? Math.exp(jStat.combinationln(n, m))\n : (jStat.factorial(n) / jStat.factorial(m)) / jStat.factorial(n - m);\n};\n\n\njStat.combinationln = function combinationln(n, m){\n return jStat.factorialln(n) - jStat.factorialln(m) - jStat.factorialln(n - m);\n};\n\n\n// permutations of n, m\njStat.permutation = function permutation(n, m) {\n return jStat.factorial(n) / jStat.factorial(n - m);\n};\n\n\n// beta function\njStat.betafn = function betafn(x, y) {\n // ensure arguments are positive\n if (x <= 0 || y <= 0)\n return undefined;\n // make sure x + y doesn't exceed the upper limit of usable values\n return (x + y > 170)\n ? Math.exp(jStat.betaln(x, y))\n : jStat.gammafn(x) * jStat.gammafn(y) / jStat.gammafn(x + y);\n};\n\n\n// natural logarithm of beta function\njStat.betaln = function betaln(x, y) {\n return jStat.gammaln(x) + jStat.gammaln(y) - jStat.gammaln(x + y);\n};\n\n\n// Evaluates the continued fraction for incomplete beta function by modified\n// Lentz's method.\njStat.betacf = function betacf(x, a, b) {\n var fpmin = 1e-30;\n var m = 1;\n var qab = a + b;\n var qap = a + 1;\n var qam = a - 1;\n var c = 1;\n var d = 1 - qab * x / qap;\n var m2, aa, del, h;\n\n // These q's will be used in factors that occur in the coefficients\n if (Math.abs(d) < fpmin)\n d = fpmin;\n d = 1 / d;\n h = d;\n\n for (; m <= 100; m++) {\n m2 = 2 * m;\n aa = m * (b - m) * x / ((qam + m2) * (a + m2));\n // One step (the even one) of the recurrence\n d = 1 + aa * d;\n if (Math.abs(d) < fpmin)\n d = fpmin;\n c = 1 + aa / c;\n if (Math.abs(c) < fpmin)\n c = fpmin;\n d = 1 / d;\n h *= d * c;\n aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));\n // Next step of the recurrence (the odd one)\n d = 1 + aa * d;\n if (Math.abs(d) < fpmin)\n d = fpmin;\n c = 1 + aa / c;\n if (Math.abs(c) < fpmin)\n c = fpmin;\n d = 1 / d;\n del = d * c;\n h *= del;\n if (Math.abs(del - 1.0) < 3e-7)\n break;\n }\n\n return h;\n};\n\n\n// Returns the inverse of the lower regularized inomplete gamma function\njStat.gammapinv = function gammapinv(p, a) {\n var j = 0;\n var a1 = a - 1;\n var EPS = 1e-8;\n var gln = jStat.gammaln(a);\n var x, err, t, u, pp, lna1, afac;\n\n if (p >= 1)\n return Math.max(100, a + 100 * Math.sqrt(a));\n if (p <= 0)\n return 0;\n if (a > 1) {\n lna1 = Math.log(a1);\n afac = Math.exp(a1 * (lna1 - 1) - gln);\n pp = (p < 0.5) ? p : 1 - p;\n t = Math.sqrt(-2 * Math.log(pp));\n x = (2.30753 + t * 0.27061) / (1 + t * (0.99229 + t * 0.04481)) - t;\n if (p < 0.5)\n x = -x;\n x = Math.max(1e-3,\n a * Math.pow(1 - 1 / (9 * a) - x / (3 * Math.sqrt(a)), 3));\n } else {\n t = 1 - a * (0.253 + a * 0.12);\n if (p < t)\n x = Math.pow(p / t, 1 / a);\n else\n x = 1 - Math.log(1 - (p - t) / (1 - t));\n }\n\n for(; j < 12; j++) {\n if (x <= 0)\n return 0;\n err = jStat.lowRegGamma(a, x) - p;\n if (a > 1)\n t = afac * Math.exp(-(x - a1) + a1 * (Math.log(x) - lna1));\n else\n t = Math.exp(-x + a1 * Math.log(x) - gln);\n u = err / t;\n x -= (t = u / (1 - 0.5 * Math.min(1, u * ((a - 1) / x - 1))));\n if (x <= 0)\n x = 0.5 * (x + t);\n if (Math.abs(t) < EPS * x)\n break;\n }\n\n return x;\n};\n\n\n// Returns the error function erf(x)\njStat.erf = function erf(x) {\n var cof = [-1.3026537197817094, 6.4196979235649026e-1, 1.9476473204185836e-2,\n -9.561514786808631e-3, -9.46595344482036e-4, 3.66839497852761e-4,\n 4.2523324806907e-5, -2.0278578112534e-5, -1.624290004647e-6,\n 1.303655835580e-6, 1.5626441722e-8, -8.5238095915e-8,\n 6.529054439e-9, 5.059343495e-9, -9.91364156e-10,\n -2.27365122e-10, 9.6467911e-11, 2.394038e-12,\n -6.886027e-12, 8.94487e-13, 3.13092e-13,\n -1.12708e-13, 3.81e-16, 7.106e-15,\n -1.523e-15, -9.4e-17, 1.21e-16,\n -2.8e-17];\n var j = cof.length - 1;\n var isneg = false;\n var d = 0;\n var dd = 0;\n var t, ty, tmp, res;\n\n if (x < 0) {\n x = -x;\n isneg = true;\n }\n\n t = 2 / (2 + x);\n ty = 4 * t - 2;\n\n for(; j > 0; j--) {\n tmp = d;\n d = ty * d - dd + cof[j];\n dd = tmp;\n }\n\n res = t * Math.exp(-x * x + 0.5 * (cof[0] + ty * d) - dd);\n return isneg ? res - 1 : 1 - res;\n};\n\n\n// Returns the complmentary error function erfc(x)\njStat.erfc = function erfc(x) {\n return 1 - jStat.erf(x);\n};\n\n\n// Returns the inverse of the complementary error function\njStat.erfcinv = function erfcinv(p) {\n var j = 0;\n var x, err, t, pp;\n if (p >= 2)\n return -100;\n if (p <= 0)\n return 100;\n pp = (p < 1) ? p : 2 - p;\n t = Math.sqrt(-2 * Math.log(pp / 2));\n x = -0.70711 * ((2.30753 + t * 0.27061) /\n (1 + t * (0.99229 + t * 0.04481)) - t);\n for (; j < 2; j++) {\n err = jStat.erfc(x) - pp;\n x += err / (1.12837916709551257 * Math.exp(-x * x) - x * err);\n }\n return (p < 1) ? x : -x;\n};\n\n\n// Returns the inverse of the incomplete beta function\njStat.ibetainv = function ibetainv(p, a, b) {\n var EPS = 1e-8;\n var a1 = a - 1;\n var b1 = b - 1;\n var j = 0;\n var lna, lnb, pp, t, u, err, x, al, h, w, afac;\n if (p <= 0)\n return 0;\n if (p >= 1)\n return 1;\n if (a >= 1 && b >= 1) {\n pp = (p < 0.5) ? p : 1 - p;\n t = Math.sqrt(-2 * Math.log(pp));\n x = (2.30753 + t * 0.27061) / (1 + t* (0.99229 + t * 0.04481)) - t;\n if (p < 0.5)\n x = -x;\n al = (x * x - 3) / 6;\n h = 2 / (1 / (2 * a - 1) + 1 / (2 * b - 1));\n w = (x * Math.sqrt(al + h) / h) - (1 / (2 * b - 1) - 1 / (2 * a - 1)) *\n (al + 5 / 6 - 2 / (3 * h));\n x = a / (a + b * Math.exp(2 * w));\n } else {\n lna = Math.log(a / (a + b));\n lnb = Math.log(b / (a + b));\n t = Math.exp(a * lna) / a;\n u = Math.exp(b * lnb) / b;\n w = t + u;\n if (p < t / w)\n x = Math.pow(a * w * p, 1 / a);\n else\n x = 1 - Math.pow(b * w * (1 - p), 1 / b);\n }\n afac = -jStat.gammaln(a) - jStat.gammaln(b) + jStat.gammaln(a + b);\n for(; j < 10; j++) {\n if (x === 0 || x === 1)\n return x;\n err = jStat.ibeta(x, a, b) - p;\n t = Math.exp(a1 * Math.log(x) + b1 * Math.log(1 - x) + afac);\n u = err / t;\n x -= (t = u / (1 - 0.5 * Math.min(1, u * (a1 / x - b1 / (1 - x)))));\n if (x <= 0)\n x = 0.5 * (x + t);\n if (x >= 1)\n x = 0.5 * (x + t + 1);\n if (Math.abs(t) < EPS * x && j > 0)\n break;\n }\n return x;\n};\n\n\n// Returns the incomplete beta function I_x(a,b)\njStat.ibeta = function ibeta(x, a, b) {\n // Factors in front of the continued fraction.\n var bt = (x === 0 || x === 1) ? 0 :\n Math.exp(jStat.gammaln(a + b) - jStat.gammaln(a) -\n jStat.gammaln(b) + a * Math.log(x) + b *\n Math.log(1 - x));\n if (x < 0 || x > 1)\n return false;\n if (x < (a + 1) / (a + b + 2))\n // Use continued fraction directly.\n return bt * jStat.betacf(x, a, b) / a;\n // else use continued fraction after making the symmetry transformation.\n return 1 - bt * jStat.betacf(1 - x, b, a) / b;\n};\n\n\n// Returns a normal deviate (mu=0, sigma=1).\n// If n and m are specified it returns a object of normal deviates.\njStat.randn = function randn(n, m) {\n var u, v, x, y, q;\n if (!m)\n m = n;\n if (n)\n return jStat.create(n, m, function() { return jStat.randn(); });\n do {\n u = jStat._random_fn();\n v = 1.7156 * (jStat._random_fn() - 0.5);\n x = u - 0.449871;\n y = Math.abs(v) + 0.386595;\n q = x * x + y * (0.19600 * y - 0.25472 * x);\n } while (q > 0.27597 && (q > 0.27846 || v * v > -4 * Math.log(u) * u * u));\n return v / u;\n};\n\n\n// Returns a gamma deviate by the method of Marsaglia and Tsang.\njStat.randg = function randg(shape, n, m) {\n var oalph = shape;\n var a1, a2, u, v, x, mat;\n if (!m)\n m = n;\n if (!shape)\n shape = 1;\n if (n) {\n mat = jStat.zeros(n,m);\n mat.alter(function() { return jStat.randg(shape); });\n return mat;\n }\n if (shape < 1)\n shape += 1;\n a1 = shape - 1 / 3;\n a2 = 1 / Math.sqrt(9 * a1);\n do {\n do {\n x = jStat.randn();\n v = 1 + a2 * x;\n } while(v <= 0);\n v = v * v * v;\n u = jStat._random_fn();\n } while(u > 1 - 0.331 * Math.pow(x, 4) &&\n Math.log(u) > 0.5 * x*x + a1 * (1 - v + Math.log(v)));\n // alpha > 1\n if (shape == oalph)\n return a1 * v;\n // alpha < 1\n do {\n u = jStat._random_fn();\n } while(u === 0);\n return Math.pow(u, 1 / oalph) * a1 * v;\n};\n\n\n// making use of static methods on the instance\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function() {\n return jStat(\n jStat.map(this, function(value) { return jStat[passfunc](value); }));\n }\n })(funcs[i]);\n})('gammaln gammafn factorial factorialln'.split(' '));\n\n\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function() {\n return jStat(jStat[passfunc].apply(null, arguments));\n };\n })(funcs[i]);\n})('randn'.split(' '));\n\n}(jStat, Math));\n(function(jStat, Math) {\n\n// generate all distribution instance methods\n(function(list) {\n for (var i = 0; i < list.length; i++) (function(func) {\n // distribution instance method\n jStat[func] = function f(a, b, c) {\n if (!(this instanceof f))\n return new f(a, b, c);\n this._a = a;\n this._b = b;\n this._c = c;\n return this;\n };\n // distribution method to be used on a jStat instance\n jStat.fn[func] = function(a, b, c) {\n var newthis = jStat[func](a, b, c);\n newthis.data = this;\n return newthis;\n };\n // sample instance method\n jStat[func].prototype.sample = function(arr) {\n var a = this._a;\n var b = this._b;\n var c = this._c;\n if (arr)\n return jStat.alter(arr, function() {\n return jStat[func].sample(a, b, c);\n });\n else\n return jStat[func].sample(a, b, c);\n };\n // generate the pdf, cdf and inv instance methods\n (function(vals) {\n for (var i = 0; i < vals.length; i++) (function(fnfunc) {\n jStat[func].prototype[fnfunc] = function(x) {\n var a = this._a;\n var b = this._b;\n var c = this._c;\n if (!x && x !== 0)\n x = this.data;\n if (typeof x !== 'number') {\n return jStat.fn.map.call(x, function(x) {\n return jStat[func][fnfunc](x, a, b, c);\n });\n }\n return jStat[func][fnfunc](x, a, b, c);\n };\n })(vals[i]);\n })('pdf cdf inv'.split(' '));\n // generate the mean, median, mode and variance instance methods\n (function(vals) {\n for (var i = 0; i < vals.length; i++) (function(fnfunc) {\n jStat[func].prototype[fnfunc] = function() {\n return jStat[func][fnfunc](this._a, this._b, this._c);\n };\n })(vals[i]);\n })('mean median mode variance'.split(' '));\n })(list[i]);\n})((\n 'beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy ' +\n 'laplace lognormal noncentralt normal pareto studentt weibull uniform ' +\n 'binomial negbin hypgeom poisson triangular tukey arcsine'\n).split(' '));\n\n\n\n// extend beta function with static methods\njStat.extend(jStat.beta, {\n pdf: function pdf(x, alpha, beta) {\n // PDF is zero outside the support\n if (x > 1 || x < 0)\n return 0;\n // PDF is one for the uniform case\n if (alpha == 1 && beta == 1)\n return 1;\n\n if (alpha < 512 && beta < 512) {\n return (Math.pow(x, alpha - 1) * Math.pow(1 - x, beta - 1)) /\n jStat.betafn(alpha, beta);\n } else {\n return Math.exp((alpha - 1) * Math.log(x) +\n (beta - 1) * Math.log(1 - x) -\n jStat.betaln(alpha, beta));\n }\n },\n\n cdf: function cdf(x, alpha, beta) {\n return (x > 1 || x < 0) ? (x > 1) * 1 : jStat.ibeta(x, alpha, beta);\n },\n\n inv: function inv(x, alpha, beta) {\n return jStat.ibetainv(x, alpha, beta);\n },\n\n mean: function mean(alpha, beta) {\n return alpha / (alpha + beta);\n },\n\n median: function median(alpha, beta) {\n return jStat.ibetainv(0.5, alpha, beta);\n },\n\n mode: function mode(alpha, beta) {\n return (alpha - 1 ) / ( alpha + beta - 2);\n },\n\n // return a random sample\n sample: function sample(alpha, beta) {\n var u = jStat.randg(alpha);\n return u / (u + jStat.randg(beta));\n },\n\n variance: function variance(alpha, beta) {\n return (alpha * beta) / (Math.pow(alpha + beta, 2) * (alpha + beta + 1));\n }\n});\n\n// extend F function with static methods\njStat.extend(jStat.centralF, {\n // This implementation of the pdf function avoids float overflow\n // See the way that R calculates this value:\n // https://svn.r-project.org/R/trunk/src/nmath/df.c\n pdf: function pdf(x, df1, df2) {\n var p, q, f;\n\n if (x < 0)\n return 0;\n\n if (df1 <= 2) {\n if (x === 0 && df1 < 2) {\n return Infinity;\n }\n if (x === 0 && df1 === 2) {\n return 1;\n }\n return (1 / jStat.betafn(df1 / 2, df2 / 2)) *\n Math.pow(df1 / df2, df1 / 2) *\n Math.pow(x, (df1/2) - 1) *\n Math.pow((1 + (df1 / df2) * x), -(df1 + df2) / 2);\n }\n\n p = (df1 * x) / (df2 + x * df1);\n q = df2 / (df2 + x * df1);\n f = df1 * q / 2.0;\n return f * jStat.binomial.pdf((df1 - 2) / 2, (df1 + df2 - 2) / 2, p);\n },\n\n cdf: function cdf(x, df1, df2) {\n if (x < 0)\n return 0;\n return jStat.ibeta((df1 * x) / (df1 * x + df2), df1 / 2, df2 / 2);\n },\n\n inv: function inv(x, df1, df2) {\n return df2 / (df1 * (1 / jStat.ibetainv(x, df1 / 2, df2 / 2) - 1));\n },\n\n mean: function mean(df1, df2) {\n return (df2 > 2) ? df2 / (df2 - 2) : undefined;\n },\n\n mode: function mode(df1, df2) {\n return (df1 > 2) ? (df2 * (df1 - 2)) / (df1 * (df2 + 2)) : undefined;\n },\n\n // return a random sample\n sample: function sample(df1, df2) {\n var x1 = jStat.randg(df1 / 2) * 2;\n var x2 = jStat.randg(df2 / 2) * 2;\n return (x1 / df1) / (x2 / df2);\n },\n\n variance: function variance(df1, df2) {\n if (df2 <= 4)\n return undefined;\n return 2 * df2 * df2 * (df1 + df2 - 2) /\n (df1 * (df2 - 2) * (df2 - 2) * (df2 - 4));\n }\n});\n\n\n// extend cauchy function with static methods\njStat.extend(jStat.cauchy, {\n pdf: function pdf(x, local, scale) {\n if (scale < 0) { return 0; }\n\n return (scale / (Math.pow(x - local, 2) + Math.pow(scale, 2))) / Math.PI;\n },\n\n cdf: function cdf(x, local, scale) {\n return Math.atan((x - local) / scale) / Math.PI + 0.5;\n },\n\n inv: function(p, local, scale) {\n return local + scale * Math.tan(Math.PI * (p - 0.5));\n },\n\n median: function median(local/*, scale*/) {\n return local;\n },\n\n mode: function mode(local/*, scale*/) {\n return local;\n },\n\n sample: function sample(local, scale) {\n return jStat.randn() *\n Math.sqrt(1 / (2 * jStat.randg(0.5))) * scale + local;\n }\n});\n\n\n\n// extend chisquare function with static methods\njStat.extend(jStat.chisquare, {\n pdf: function pdf(x, dof) {\n if (x < 0)\n return 0;\n return (x === 0 && dof === 2) ? 0.5 :\n Math.exp((dof / 2 - 1) * Math.log(x) - x / 2 - (dof / 2) *\n Math.log(2) - jStat.gammaln(dof / 2));\n },\n\n cdf: function cdf(x, dof) {\n if (x < 0)\n return 0;\n return jStat.lowRegGamma(dof / 2, x / 2);\n },\n\n inv: function(p, dof) {\n return 2 * jStat.gammapinv(p, 0.5 * dof);\n },\n\n mean : function(dof) {\n return dof;\n },\n\n // TODO: this is an approximation (is there a better way?)\n median: function median(dof) {\n return dof * Math.pow(1 - (2 / (9 * dof)), 3);\n },\n\n mode: function mode(dof) {\n return (dof - 2 > 0) ? dof - 2 : 0;\n },\n\n sample: function sample(dof) {\n return jStat.randg(dof / 2) * 2;\n },\n\n variance: function variance(dof) {\n return 2 * dof;\n }\n});\n\n\n\n// extend exponential function with static methods\njStat.extend(jStat.exponential, {\n pdf: function pdf(x, rate) {\n return x < 0 ? 0 : rate * Math.exp(-rate * x);\n },\n\n cdf: function cdf(x, rate) {\n return x < 0 ? 0 : 1 - Math.exp(-rate * x);\n },\n\n inv: function(p, rate) {\n return -Math.log(1 - p) / rate;\n },\n\n mean : function(rate) {\n return 1 / rate;\n },\n\n median: function (rate) {\n return (1 / rate) * Math.log(2);\n },\n\n mode: function mode(/*rate*/) {\n return 0;\n },\n\n sample: function sample(rate) {\n return -1 / rate * Math.log(jStat._random_fn());\n },\n\n variance : function(rate) {\n return Math.pow(rate, -2);\n }\n});\n\n\n\n// extend gamma function with static methods\njStat.extend(jStat.gamma, {\n pdf: function pdf(x, shape, scale) {\n if (x < 0)\n return 0;\n return (x === 0 && shape === 1) ? 1 / scale :\n Math.exp((shape - 1) * Math.log(x) - x / scale -\n jStat.gammaln(shape) - shape * Math.log(scale));\n },\n\n cdf: function cdf(x, shape, scale) {\n if (x < 0)\n return 0;\n return jStat.lowRegGamma(shape, x / scale);\n },\n\n inv: function(p, shape, scale) {\n return jStat.gammapinv(p, shape) * scale;\n },\n\n mean : function(shape, scale) {\n return shape * scale;\n },\n\n mode: function mode(shape, scale) {\n if(shape > 1) return (shape - 1) * scale;\n return undefined;\n },\n\n sample: function sample(shape, scale) {\n return jStat.randg(shape) * scale;\n },\n\n variance: function variance(shape, scale) {\n return shape * scale * scale;\n }\n});\n\n// extend inverse gamma function with static methods\njStat.extend(jStat.invgamma, {\n pdf: function pdf(x, shape, scale) {\n if (x <= 0)\n return 0;\n return Math.exp(-(shape + 1) * Math.log(x) - scale / x -\n jStat.gammaln(shape) + shape * Math.log(scale));\n },\n\n cdf: function cdf(x, shape, scale) {\n if (x <= 0)\n return 0;\n return 1 - jStat.lowRegGamma(shape, scale / x);\n },\n\n inv: function(p, shape, scale) {\n return scale / jStat.gammapinv(1 - p, shape);\n },\n\n mean : function(shape, scale) {\n return (shape > 1) ? scale / (shape - 1) : undefined;\n },\n\n mode: function mode(shape, scale) {\n return scale / (shape + 1);\n },\n\n sample: function sample(shape, scale) {\n return scale / jStat.randg(shape);\n },\n\n variance: function variance(shape, scale) {\n if (shape <= 2)\n return undefined;\n return scale * scale / ((shape - 1) * (shape - 1) * (shape - 2));\n }\n});\n\n\n// extend kumaraswamy function with static methods\njStat.extend(jStat.kumaraswamy, {\n pdf: function pdf(x, alpha, beta) {\n if (x === 0 && alpha === 1)\n return beta;\n else if (x === 1 && beta === 1)\n return alpha;\n return Math.exp(Math.log(alpha) + Math.log(beta) + (alpha - 1) *\n Math.log(x) + (beta - 1) *\n Math.log(1 - Math.pow(x, alpha)));\n },\n\n cdf: function cdf(x, alpha, beta) {\n if (x < 0)\n return 0;\n else if (x > 1)\n return 1;\n return (1 - Math.pow(1 - Math.pow(x, alpha), beta));\n },\n\n inv: function inv(p, alpha, beta) {\n return Math.pow(1 - Math.pow(1 - p, 1 / beta), 1 / alpha);\n },\n\n mean : function(alpha, beta) {\n return (beta * jStat.gammafn(1 + 1 / alpha) *\n jStat.gammafn(beta)) / (jStat.gammafn(1 + 1 / alpha + beta));\n },\n\n median: function median(alpha, beta) {\n return Math.pow(1 - Math.pow(2, -1 / beta), 1 / alpha);\n },\n\n mode: function mode(alpha, beta) {\n if (!(alpha >= 1 && beta >= 1 && (alpha !== 1 && beta !== 1)))\n return undefined;\n return Math.pow((alpha - 1) / (alpha * beta - 1), 1 / alpha);\n },\n\n variance: function variance(/*alpha, beta*/) {\n throw new Error('variance not yet implemented');\n // TODO: complete this\n }\n});\n\n\n\n// extend lognormal function with static methods\njStat.extend(jStat.lognormal, {\n pdf: function pdf(x, mu, sigma) {\n if (x <= 0)\n return 0;\n return Math.exp(-Math.log(x) - 0.5 * Math.log(2 * Math.PI) -\n Math.log(sigma) - Math.pow(Math.log(x) - mu, 2) /\n (2 * sigma * sigma));\n },\n\n cdf: function cdf(x, mu, sigma) {\n if (x < 0)\n return 0;\n return 0.5 +\n (0.5 * jStat.erf((Math.log(x) - mu) / Math.sqrt(2 * sigma * sigma)));\n },\n\n inv: function(p, mu, sigma) {\n return Math.exp(-1.41421356237309505 * sigma * jStat.erfcinv(2 * p) + mu);\n },\n\n mean: function mean(mu, sigma) {\n return Math.exp(mu + sigma * sigma / 2);\n },\n\n median: function median(mu/*, sigma*/) {\n return Math.exp(mu);\n },\n\n mode: function mode(mu, sigma) {\n return Math.exp(mu - sigma * sigma);\n },\n\n sample: function sample(mu, sigma) {\n return Math.exp(jStat.randn() * sigma + mu);\n },\n\n variance: function variance(mu, sigma) {\n return (Math.exp(sigma * sigma) - 1) * Math.exp(2 * mu + sigma * sigma);\n }\n});\n\n\n\n// extend noncentralt function with static methods\njStat.extend(jStat.noncentralt, {\n pdf: function pdf(x, dof, ncp) {\n var tol = 1e-14;\n if (Math.abs(ncp) < tol) // ncp approx 0; use student-t\n return jStat.studentt.pdf(x, dof)\n\n if (Math.abs(x) < tol) { // different formula for x == 0\n return Math.exp(jStat.gammaln((dof + 1) / 2) - ncp * ncp / 2 -\n 0.5 * Math.log(Math.PI * dof) - jStat.gammaln(dof / 2));\n }\n\n // formula for x != 0\n return dof / x *\n (jStat.noncentralt.cdf(x * Math.sqrt(1 + 2 / dof), dof+2, ncp) -\n jStat.noncentralt.cdf(x, dof, ncp));\n },\n\n cdf: function cdf(x, dof, ncp) {\n var tol = 1e-14;\n var min_iterations = 200;\n\n if (Math.abs(ncp) < tol) // ncp approx 0; use student-t\n return jStat.studentt.cdf(x, dof);\n\n // turn negative x into positive and flip result afterwards\n var flip = false;\n if (x < 0) {\n flip = true;\n ncp = -ncp;\n }\n\n var prob = jStat.normal.cdf(-ncp, 0, 1);\n var value = tol + 1;\n // use value at last two steps to determine convergence\n var lastvalue = value;\n var y = x * x / (x * x + dof);\n var j = 0;\n var p = Math.exp(-ncp * ncp / 2);\n var q = Math.exp(-ncp * ncp / 2 - 0.5 * Math.log(2) -\n jStat.gammaln(3 / 2)) * ncp;\n while (j < min_iterations || lastvalue > tol || value > tol) {\n lastvalue = value;\n if (j > 0) {\n p *= (ncp * ncp) / (2 * j);\n q *= (ncp * ncp) / (2 * (j + 1 / 2));\n }\n value = p * jStat.beta.cdf(y, j + 0.5, dof / 2) +\n q * jStat.beta.cdf(y, j+1, dof/2);\n prob += 0.5 * value;\n j++;\n }\n\n return flip ? (1 - prob) : prob;\n }\n});\n\n\n// extend normal function with static methods\njStat.extend(jStat.normal, {\n pdf: function pdf(x, mean, std) {\n return Math.exp(-0.5 * Math.log(2 * Math.PI) -\n Math.log(std) - Math.pow(x - mean, 2) / (2 * std * std));\n },\n\n cdf: function cdf(x, mean, std) {\n return 0.5 * (1 + jStat.erf((x - mean) / Math.sqrt(2 * std * std)));\n },\n\n inv: function(p, mean, std) {\n return -1.41421356237309505 * std * jStat.erfcinv(2 * p) + mean;\n },\n\n mean : function(mean/*, std*/) {\n return mean;\n },\n\n median: function median(mean/*, std*/) {\n return mean;\n },\n\n mode: function (mean/*, std*/) {\n return mean;\n },\n\n sample: function sample(mean, std) {\n return jStat.randn() * std + mean;\n },\n\n variance : function(mean, std) {\n return std * std;\n }\n});\n\n\n\n// extend pareto function with static methods\njStat.extend(jStat.pareto, {\n pdf: function pdf(x, scale, shape) {\n if (x < scale)\n return 0;\n return (shape * Math.pow(scale, shape)) / Math.pow(x, shape + 1);\n },\n\n cdf: function cdf(x, scale, shape) {\n if (x < scale)\n return 0;\n return 1 - Math.pow(scale / x, shape);\n },\n\n inv: function inv(p, scale, shape) {\n return scale / Math.pow(1 - p, 1 / shape);\n },\n\n mean: function mean(scale, shape) {\n if (shape <= 1)\n return undefined;\n return (shape * Math.pow(scale, shape)) / (shape - 1);\n },\n\n median: function median(scale, shape) {\n return scale * (shape * Math.SQRT2);\n },\n\n mode: function mode(scale/*, shape*/) {\n return scale;\n },\n\n variance : function(scale, shape) {\n if (shape <= 2)\n return undefined;\n return (scale*scale * shape) / (Math.pow(shape - 1, 2) * (shape - 2));\n }\n});\n\n\n\n// extend studentt function with static methods\njStat.extend(jStat.studentt, {\n pdf: function pdf(x, dof) {\n dof = dof > 1e100 ? 1e100 : dof;\n return (1/(Math.sqrt(dof) * jStat.betafn(0.5, dof/2))) *\n Math.pow(1 + ((x * x) / dof), -((dof + 1) / 2));\n },\n\n cdf: function cdf(x, dof) {\n var dof2 = dof / 2;\n return jStat.ibeta((x + Math.sqrt(x * x + dof)) /\n (2 * Math.sqrt(x * x + dof)), dof2, dof2);\n },\n\n inv: function(p, dof) {\n var x = jStat.ibetainv(2 * Math.min(p, 1 - p), 0.5 * dof, 0.5);\n x = Math.sqrt(dof * (1 - x) / x);\n return (p > 0.5) ? x : -x;\n },\n\n mean: function mean(dof) {\n return (dof > 1) ? 0 : undefined;\n },\n\n median: function median(/*dof*/) {\n return 0;\n },\n\n mode: function mode(/*dof*/) {\n return 0;\n },\n\n sample: function sample(dof) {\n return jStat.randn() * Math.sqrt(dof / (2 * jStat.randg(dof / 2)));\n },\n\n variance: function variance(dof) {\n return (dof > 2) ? dof / (dof - 2) : (dof > 1) ? Infinity : undefined;\n }\n});\n\n\n\n// extend weibull function with static methods\njStat.extend(jStat.weibull, {\n pdf: function pdf(x, scale, shape) {\n if (x < 0 || scale < 0 || shape < 0)\n return 0;\n return (shape / scale) * Math.pow((x / scale), (shape - 1)) *\n Math.exp(-(Math.pow((x / scale), shape)));\n },\n\n cdf: function cdf(x, scale, shape) {\n return x < 0 ? 0 : 1 - Math.exp(-Math.pow((x / scale), shape));\n },\n\n inv: function(p, scale, shape) {\n return scale * Math.pow(-Math.log(1 - p), 1 / shape);\n },\n\n mean : function(scale, shape) {\n return scale * jStat.gammafn(1 + 1 / shape);\n },\n\n median: function median(scale, shape) {\n return scale * Math.pow(Math.log(2), 1 / shape);\n },\n\n mode: function mode(scale, shape) {\n if (shape <= 1)\n return 0;\n return scale * Math.pow((shape - 1) / shape, 1 / shape);\n },\n\n sample: function sample(scale, shape) {\n return scale * Math.pow(-Math.log(jStat._random_fn()), 1 / shape);\n },\n\n variance: function variance(scale, shape) {\n return scale * scale * jStat.gammafn(1 + 2 / shape) -\n Math.pow(jStat.weibull.mean(scale, shape), 2);\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.uniform, {\n pdf: function pdf(x, a, b) {\n return (x < a || x > b) ? 0 : 1 / (b - a);\n },\n\n cdf: function cdf(x, a, b) {\n if (x < a)\n return 0;\n else if (x < b)\n return (x - a) / (b - a);\n return 1;\n },\n\n inv: function(p, a, b) {\n return a + (p * (b - a));\n },\n\n mean: function mean(a, b) {\n return 0.5 * (a + b);\n },\n\n median: function median(a, b) {\n return jStat.mean(a, b);\n },\n\n mode: function mode(/*a, b*/) {\n throw new Error('mode is not yet implemented');\n },\n\n sample: function sample(a, b) {\n return (a / 2 + b / 2) + (b / 2 - a / 2) * (2 * jStat._random_fn() - 1);\n },\n\n variance: function variance(a, b) {\n return Math.pow(b - a, 2) / 12;\n }\n});\n\n\n// Got this from http://www.math.ucla.edu/~tom/distributions/binomial.html\nfunction betinc(x, a, b, eps) {\n var a0 = 0;\n var b0 = 1;\n var a1 = 1;\n var b1 = 1;\n var m9 = 0;\n var a2 = 0;\n var c9;\n\n while (Math.abs((a1 - a2) / a1) > eps) {\n a2 = a1;\n c9 = -(a + m9) * (a + b + m9) * x / (a + 2 * m9) / (a + 2 * m9 + 1);\n a0 = a1 + c9 * a0;\n b0 = b1 + c9 * b0;\n m9 = m9 + 1;\n c9 = m9 * (b - m9) * x / (a + 2 * m9 - 1) / (a + 2 * m9);\n a1 = a0 + c9 * a1;\n b1 = b0 + c9 * b1;\n a0 = a0 / b1;\n b0 = b0 / b1;\n a1 = a1 / b1;\n b1 = 1;\n }\n\n return a1 / a;\n}\n\n\n// extend uniform function with static methods\njStat.extend(jStat.binomial, {\n pdf: function pdf(k, n, p) {\n return (p === 0 || p === 1) ?\n ((n * p) === k ? 1 : 0) :\n jStat.combination(n, k) * Math.pow(p, k) * Math.pow(1 - p, n - k);\n },\n\n cdf: function cdf(x, n, p) {\n var betacdf;\n var eps = 1e-10;\n\n if (x < 0)\n return 0;\n if (x >= n)\n return 1;\n if (p < 0 || p > 1 || n <= 0)\n return NaN;\n\n x = Math.floor(x);\n var z = p;\n var a = x + 1;\n var b = n - x;\n var s = a + b;\n var bt = Math.exp(jStat.gammaln(s) - jStat.gammaln(b) -\n jStat.gammaln(a) + a * Math.log(z) + b * Math.log(1 - z));\n\n if (z < (a + 1) / (s + 2))\n betacdf = bt * betinc(z, a, b, eps);\n else\n betacdf = 1 - bt * betinc(1 - z, b, a, eps);\n\n return Math.round((1 - betacdf) * (1 / eps)) / (1 / eps);\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.negbin, {\n pdf: function pdf(k, r, p) {\n if (k !== k >>> 0)\n return false;\n if (k < 0)\n return 0;\n return jStat.combination(k + r - 1, r - 1) *\n Math.pow(1 - p, k) * Math.pow(p, r);\n },\n\n cdf: function cdf(x, r, p) {\n var sum = 0,\n k = 0;\n if (x < 0) return 0;\n for (; k <= x; k++) {\n sum += jStat.negbin.pdf(k, r, p);\n }\n return sum;\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.hypgeom, {\n pdf: function pdf(k, N, m, n) {\n // Hypergeometric PDF.\n\n // A simplification of the CDF algorithm below.\n\n // k = number of successes drawn\n // N = population size\n // m = number of successes in population\n // n = number of items drawn from population\n\n if(k !== k | 0) {\n return false;\n } else if(k < 0 || k < m - (N - n)) {\n // It's impossible to have this few successes drawn.\n return 0;\n } else if(k > n || k > m) {\n // It's impossible to have this many successes drawn.\n return 0;\n } else if (m * 2 > N) {\n // More than half the population is successes.\n\n if(n * 2 > N) {\n // More than half the population is sampled.\n\n return jStat.hypgeom.pdf(N - m - n + k, N, N - m, N - n)\n } else {\n // Half or less of the population is sampled.\n\n return jStat.hypgeom.pdf(n - k, N, N - m, n);\n }\n\n } else if(n * 2 > N) {\n // Half or less is successes.\n\n return jStat.hypgeom.pdf(m - k, N, m, N - n);\n\n } else if(m < n) {\n // We want to have the number of things sampled to be less than the\n // successes available. So swap the definitions of successful and sampled.\n return jStat.hypgeom.pdf(k, N, n, m);\n } else {\n // If we get here, half or less of the population was sampled, half or\n // less of it was successes, and we had fewer sampled things than\n // successes. Now we can do this complicated iterative algorithm in an\n // efficient way.\n\n // The basic premise of the algorithm is that we partially normalize our\n // intermediate product to keep it in a numerically good region, and then\n // finish the normalization at the end.\n\n // This variable holds the scaled probability of the current number of\n // successes.\n var scaledPDF = 1;\n\n // This keeps track of how much we have normalized.\n var samplesDone = 0;\n\n for(var i = 0; i < k; i++) {\n // For every possible number of successes up to that observed...\n\n while(scaledPDF > 1 && samplesDone < n) {\n // Intermediate result is growing too big. Apply some of the\n // normalization to shrink everything.\n\n scaledPDF *= 1 - (m / (N - samplesDone));\n\n // Say we've normalized by this sample already.\n samplesDone++;\n }\n\n // Work out the partially-normalized hypergeometric PDF for the next\n // number of successes\n scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));\n }\n\n for(; samplesDone < n; samplesDone++) {\n // Apply all the rest of the normalization\n scaledPDF *= 1 - (m / (N - samplesDone));\n }\n\n // Bound answer sanely before returning.\n return Math.min(1, Math.max(0, scaledPDF));\n }\n },\n\n cdf: function cdf(x, N, m, n) {\n // Hypergeometric CDF.\n\n // This algorithm is due to Prof. Thomas S. Ferguson, <tom@math.ucla.edu>,\n // and comes from his hypergeometric test calculator at\n // <http://www.math.ucla.edu/~tom/distributions/Hypergeometric.html>.\n\n // x = number of successes drawn\n // N = population size\n // m = number of successes in population\n // n = number of items drawn from population\n\n if(x < 0 || x < m - (N - n)) {\n // It's impossible to have this few successes drawn or fewer.\n return 0;\n } else if(x >= n || x >= m) {\n // We will always have this many successes or fewer.\n return 1;\n } else if (m * 2 > N) {\n // More than half the population is successes.\n\n if(n * 2 > N) {\n // More than half the population is sampled.\n\n return jStat.hypgeom.cdf(N - m - n + x, N, N - m, N - n)\n } else {\n // Half or less of the population is sampled.\n\n return 1 - jStat.hypgeom.cdf(n - x - 1, N, N - m, n);\n }\n\n } else if(n * 2 > N) {\n // Half or less is successes.\n\n return 1 - jStat.hypgeom.cdf(m - x - 1, N, m, N - n);\n\n } else if(m < n) {\n // We want to have the number of things sampled to be less than the\n // successes available. So swap the definitions of successful and sampled.\n return jStat.hypgeom.cdf(x, N, n, m);\n } else {\n // If we get here, half or less of the population was sampled, half or\n // less of it was successes, and we had fewer sampled things than\n // successes. Now we can do this complicated iterative algorithm in an\n // efficient way.\n\n // The basic premise of the algorithm is that we partially normalize our\n // intermediate sum to keep it in a numerically good region, and then\n // finish the normalization at the end.\n\n // Holds the intermediate, scaled total CDF.\n var scaledCDF = 1;\n\n // This variable holds the scaled probability of the current number of\n // successes.\n var scaledPDF = 1;\n\n // This keeps track of how much we have normalized.\n var samplesDone = 0;\n\n for(var i = 0; i < x; i++) {\n // For every possible number of successes up to that observed...\n\n while(scaledCDF > 1 && samplesDone < n) {\n // Intermediate result is growing too big. Apply some of the\n // normalization to shrink everything.\n\n var factor = 1 - (m / (N - samplesDone));\n\n scaledPDF *= factor;\n scaledCDF *= factor;\n\n // Say we've normalized by this sample already.\n samplesDone++;\n }\n\n // Work out the partially-normalized hypergeometric PDF for the next\n // number of successes\n scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));\n\n // Add to the CDF answer.\n scaledCDF += scaledPDF;\n }\n\n for(; samplesDone < n; samplesDone++) {\n // Apply all the rest of the normalization\n scaledCDF *= 1 - (m / (N - samplesDone));\n }\n\n // Bound answer sanely before returning.\n return Math.min(1, Math.max(0, scaledCDF));\n }\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.poisson, {\n pdf: function pdf(k, l) {\n if (l < 0 || (k % 1) !== 0 || k < 0) {\n return 0;\n }\n\n return Math.pow(l, k) * Math.exp(-l) / jStat.factorial(k);\n },\n\n cdf: function cdf(x, l) {\n var sumarr = [],\n k = 0;\n if (x < 0) return 0;\n for (; k <= x; k++) {\n sumarr.push(jStat.poisson.pdf(k, l));\n }\n return jStat.sum(sumarr);\n },\n\n mean : function(l) {\n return l;\n },\n\n variance : function(l) {\n return l;\n },\n\n sampleSmall: function sampleSmall(l) {\n var p = 1, k = 0, L = Math.exp(-l);\n do {\n k++;\n p *= jStat._random_fn();\n } while (p > L);\n return k - 1;\n },\n\n sampleLarge: function sampleLarge(l) {\n var lam = l;\n var k;\n var U, V, slam, loglam, a, b, invalpha, vr, us;\n\n slam = Math.sqrt(lam);\n loglam = Math.log(lam);\n b = 0.931 + 2.53 * slam;\n a = -0.059 + 0.02483 * b;\n invalpha = 1.1239 + 1.1328 / (b - 3.4);\n vr = 0.9277 - 3.6224 / (b - 2);\n\n while (1) {\n U = Math.random() - 0.5;\n V = Math.random();\n us = 0.5 - Math.abs(U);\n k = Math.floor((2 * a / us + b) * U + lam + 0.43);\n if ((us >= 0.07) && (V <= vr)) {\n return k;\n }\n if ((k < 0) || ((us < 0.013) && (V > us))) {\n continue;\n }\n /* log(V) == log(0.0) ok here */\n /* if U==0.0 so that us==0.0, log is ok since always returns */\n if ((Math.log(V) + Math.log(invalpha) - Math.log(a / (us * us) + b)) <= (-lam + k * loglam - jStat.loggam(k + 1))) {\n return k;\n }\n }\n },\n\n sample: function sample(l) {\n if (l < 10)\n return this.sampleSmall(l);\n else\n return this.sampleLarge(l);\n }\n});\n\n// extend triangular function with static methods\njStat.extend(jStat.triangular, {\n pdf: function pdf(x, a, b, c) {\n if (b <= a || c < a || c > b) {\n return NaN;\n } else {\n if (x < a || x > b) {\n return 0;\n } else if (x < c) {\n return (2 * (x - a)) / ((b - a) * (c - a));\n } else if (x === c) {\n return (2 / (b - a));\n } else { // x > c\n return (2 * (b - x)) / ((b - a) * (b - c));\n }\n }\n },\n\n cdf: function cdf(x, a, b, c) {\n if (b <= a || c < a || c > b)\n return NaN;\n if (x <= a)\n return 0;\n else if (x >= b)\n return 1;\n if (x <= c)\n return Math.pow(x - a, 2) / ((b - a) * (c - a));\n else // x > c\n return 1 - Math.pow(b - x, 2) / ((b - a) * (b - c));\n },\n\n inv: function inv(p, a, b, c) {\n if (b <= a || c < a || c > b) {\n return NaN;\n } else {\n if (p <= ((c - a) / (b - a))) {\n return a + (b - a) * Math.sqrt(p * ((c - a) / (b - a)));\n } else { // p > ((c - a) / (b - a))\n return a + (b - a) * (1 - Math.sqrt((1 - p) * (1 - ((c - a) / (b - a)))));\n }\n }\n },\n\n mean: function mean(a, b, c) {\n return (a + b + c) / 3;\n },\n\n median: function median(a, b, c) {\n if (c <= (a + b) / 2) {\n return b - Math.sqrt((b - a) * (b - c)) / Math.sqrt(2);\n } else if (c > (a + b) / 2) {\n return a + Math.sqrt((b - a) * (c - a)) / Math.sqrt(2);\n }\n },\n\n mode: function mode(a, b, c) {\n return c;\n },\n\n sample: function sample(a, b, c) {\n var u = jStat._random_fn();\n if (u < ((c - a) / (b - a)))\n return a + Math.sqrt(u * (b - a) * (c - a))\n return b - Math.sqrt((1 - u) * (b - a) * (b - c));\n },\n\n variance: function variance(a, b, c) {\n return (a * a + b * b + c * c - a * b - a * c - b * c) / 18;\n }\n});\n\n\n// extend arcsine function with static methods\njStat.extend(jStat.arcsine, {\n pdf: function pdf(x, a, b) {\n if (b <= a) return NaN;\n\n return (x <= a || x >= b) ? 0 :\n (2 / Math.PI) *\n Math.pow(Math.pow(b - a, 2) -\n Math.pow(2 * x - a - b, 2), -0.5);\n },\n\n cdf: function cdf(x, a, b) {\n if (x < a)\n return 0;\n else if (x < b)\n return (2 / Math.PI) * Math.asin(Math.sqrt((x - a)/(b - a)));\n return 1;\n },\n\n inv: function(p, a, b) {\n return a + (0.5 - 0.5 * Math.cos(Math.PI * p)) * (b - a);\n },\n\n mean: function mean(a, b) {\n if (b <= a) return NaN;\n return (a + b) / 2;\n },\n\n median: function median(a, b) {\n if (b <= a) return NaN;\n return (a + b) / 2;\n },\n\n mode: function mode(/*a, b*/) {\n throw new Error('mode is not yet implemented');\n },\n\n sample: function sample(a, b) {\n return ((a + b) / 2) + ((b - a) / 2) *\n Math.sin(2 * Math.PI * jStat.uniform.sample(0, 1));\n },\n\n variance: function variance(a, b) {\n if (b <= a) return NaN;\n return Math.pow(b - a, 2) / 8;\n }\n});\n\n\nfunction laplaceSign(x) { return x / Math.abs(x); }\n\njStat.extend(jStat.laplace, {\n pdf: function pdf(x, mu, b) {\n return (b <= 0) ? 0 : (Math.exp(-Math.abs(x - mu) / b)) / (2 * b);\n },\n\n cdf: function cdf(x, mu, b) {\n if (b <= 0) { return 0; }\n\n if(x < mu) {\n return 0.5 * Math.exp((x - mu) / b);\n } else {\n return 1 - 0.5 * Math.exp(- (x - mu) / b);\n }\n },\n\n mean: function(mu/*, b*/) {\n return mu;\n },\n\n median: function(mu/*, b*/) {\n return mu;\n },\n\n mode: function(mu/*, b*/) {\n return mu;\n },\n\n variance: function(mu, b) {\n return 2 * b * b;\n },\n\n sample: function sample(mu, b) {\n var u = jStat._random_fn() - 0.5;\n\n return mu - (b * laplaceSign(u) * Math.log(1 - (2 * Math.abs(u))));\n }\n});\n\nfunction tukeyWprob(w, rr, cc) {\n var nleg = 12;\n var ihalf = 6;\n\n var C1 = -30;\n var C2 = -50;\n var C3 = 60;\n var bb = 8;\n var wlar = 3;\n var wincr1 = 2;\n var wincr2 = 3;\n var xleg = [\n 0.981560634246719250690549090149,\n 0.904117256370474856678465866119,\n 0.769902674194304687036893833213,\n 0.587317954286617447296702418941,\n 0.367831498998180193752691536644,\n 0.125233408511468915472441369464\n ];\n var aleg = [\n 0.047175336386511827194615961485,\n 0.106939325995318430960254718194,\n 0.160078328543346226334652529543,\n 0.203167426723065921749064455810,\n 0.233492536538354808760849898925,\n 0.249147045813402785000562436043\n ];\n\n var qsqz = w * 0.5;\n\n // if w >= 16 then the integral lower bound (occurs for c=20)\n // is 0.99999999999995 so return a value of 1.\n\n if (qsqz >= bb)\n return 1.0;\n\n // find (f(w/2) - 1) ^ cc\n // (first term in integral of hartley's form).\n\n var pr_w = 2 * jStat.normal.cdf(qsqz, 0, 1, 1, 0) - 1; // erf(qsqz / M_SQRT2)\n // if pr_w ^ cc < 2e-22 then set pr_w = 0\n if (pr_w >= Math.exp(C2 / cc))\n pr_w = Math.pow(pr_w, cc);\n else\n pr_w = 0.0;\n\n // if w is large then the second component of the\n // integral is small, so fewer intervals are needed.\n\n var wincr;\n if (w > wlar)\n wincr = wincr1;\n else\n wincr = wincr2;\n\n // find the integral of second term of hartley's form\n // for the integral of the range for equal-length\n // intervals using legendre quadrature. limits of\n // integration are from (w/2, 8). two or three\n // equal-length intervals are used.\n\n // blb and bub are lower and upper limits of integration.\n\n var blb = qsqz;\n var binc = (bb - qsqz) / wincr;\n var bub = blb + binc;\n var einsum = 0.0;\n\n // integrate over each interval\n\n var cc1 = cc - 1.0;\n for (var wi = 1; wi <= wincr; wi++) {\n var elsum = 0.0;\n var a = 0.5 * (bub + blb);\n\n // legendre quadrature with order = nleg\n\n var b = 0.5 * (bub - blb);\n\n for (var jj = 1; jj <= nleg; jj++) {\n var j, xx;\n if (ihalf < jj) {\n j = (nleg - jj) + 1;\n xx = xleg[j-1];\n } else {\n j = jj;\n xx = -xleg[j-1];\n }\n var c = b * xx;\n var ac = a + c;\n\n // if exp(-qexpo/2) < 9e-14,\n // then doesn't contribute to integral\n\n var qexpo = ac * ac;\n if (qexpo > C3)\n break;\n\n var pplus = 2 * jStat.normal.cdf(ac, 0, 1, 1, 0);\n var pminus= 2 * jStat.normal.cdf(ac, w, 1, 1, 0);\n\n // if rinsum ^ (cc-1) < 9e-14,\n // then doesn't contribute to integral\n\n var rinsum = (pplus * 0.5) - (pminus * 0.5);\n if (rinsum >= Math.exp(C1 / cc1)) {\n rinsum = (aleg[j-1] * Math.exp(-(0.5 * qexpo))) * Math.pow(rinsum, cc1);\n elsum += rinsum;\n }\n }\n elsum *= (((2.0 * b) * cc) / Math.sqrt(2 * Math.PI));\n einsum += elsum;\n blb = bub;\n bub += binc;\n }\n\n // if pr_w ^ rr < 9e-14, then return 0\n pr_w += einsum;\n if (pr_w <= Math.exp(C1 / rr))\n return 0;\n\n pr_w = Math.pow(pr_w, rr);\n if (pr_w >= 1) // 1 was iMax was eps\n return 1;\n return pr_w;\n}\n\nfunction tukeyQinv(p, c, v) {\n var p0 = 0.322232421088;\n var q0 = 0.993484626060e-01;\n var p1 = -1.0;\n var q1 = 0.588581570495;\n var p2 = -0.342242088547;\n var q2 = 0.531103462366;\n var p3 = -0.204231210125;\n var q3 = 0.103537752850;\n var p4 = -0.453642210148e-04;\n var q4 = 0.38560700634e-02;\n var c1 = 0.8832;\n var c2 = 0.2368;\n var c3 = 1.214;\n var c4 = 1.208;\n var c5 = 1.4142;\n var vmax = 120.0;\n\n var ps = 0.5 - 0.5 * p;\n var yi = Math.sqrt(Math.log(1.0 / (ps * ps)));\n var t = yi + (((( yi * p4 + p3) * yi + p2) * yi + p1) * yi + p0)\n / (((( yi * q4 + q3) * yi + q2) * yi + q1) * yi + q0);\n if (v < vmax) t += (t * t * t + t) / v / 4.0;\n var q = c1 - c2 * t;\n if (v < vmax) q += -c3 / v + c4 * t / v;\n return t * (q * Math.log(c - 1.0) + c5);\n}\n\njStat.extend(jStat.tukey, {\n cdf: function cdf(q, nmeans, df) {\n // Identical implementation as the R ptukey() function as of commit 68947\n var rr = 1;\n var cc = nmeans;\n\n var nlegq = 16;\n var ihalfq = 8;\n\n var eps1 = -30.0;\n var eps2 = 1.0e-14;\n var dhaf = 100.0;\n var dquar = 800.0;\n var deigh = 5000.0;\n var dlarg = 25000.0;\n var ulen1 = 1.0;\n var ulen2 = 0.5;\n var ulen3 = 0.25;\n var ulen4 = 0.125;\n var xlegq = [\n 0.989400934991649932596154173450,\n 0.944575023073232576077988415535,\n 0.865631202387831743880467897712,\n 0.755404408355003033895101194847,\n 0.617876244402643748446671764049,\n 0.458016777657227386342419442984,\n 0.281603550779258913230460501460,\n 0.950125098376374401853193354250e-1\n ];\n var alegq = [\n 0.271524594117540948517805724560e-1,\n 0.622535239386478928628438369944e-1,\n 0.951585116824927848099251076022e-1,\n 0.124628971255533872052476282192,\n 0.149595988816576732081501730547,\n 0.169156519395002538189312079030,\n 0.182603415044923588866763667969,\n 0.189450610455068496285396723208\n ];\n\n if (q <= 0)\n return 0;\n\n // df must be > 1\n // there must be at least two values\n\n if (df < 2 || rr < 1 || cc < 2) return NaN;\n\n if (!Number.isFinite(q))\n return 1;\n\n if (df > dlarg)\n return tukeyWprob(q, rr, cc);\n\n // calculate leading constant\n\n var f2 = df * 0.5;\n var f2lf = ((f2 * Math.log(df)) - (df * Math.log(2))) - jStat.gammaln(f2);\n var f21 = f2 - 1.0;\n\n // integral is divided into unit, half-unit, quarter-unit, or\n // eighth-unit length intervals depending on the value of the\n // degrees of freedom.\n\n var ff4 = df * 0.25;\n var ulen;\n if (df <= dhaf) ulen = ulen1;\n else if (df <= dquar) ulen = ulen2;\n else if (df <= deigh) ulen = ulen3;\n else ulen = ulen4;\n\n f2lf += Math.log(ulen);\n\n // integrate over each subinterval\n\n var ans = 0.0;\n\n for (var i = 1; i <= 50; i++) {\n var otsum = 0.0;\n\n // legendre quadrature with order = nlegq\n // nodes (stored in xlegq) are symmetric around zero.\n\n var twa1 = (2 * i - 1) * ulen;\n\n for (var jj = 1; jj <= nlegq; jj++) {\n var j, t1;\n if (ihalfq < jj) {\n j = jj - ihalfq - 1;\n t1 = (f2lf + (f21 * Math.log(twa1 + (xlegq[j] * ulen))))\n - (((xlegq[j] * ulen) + twa1) * ff4);\n } else {\n j = jj - 1;\n t1 = (f2lf + (f21 * Math.log(twa1 - (xlegq[j] * ulen))))\n + (((xlegq[j] * ulen) - twa1) * ff4);\n }\n\n // if exp(t1) < 9e-14, then doesn't contribute to integral\n var qsqz;\n if (t1 >= eps1) {\n if (ihalfq < jj) {\n qsqz = q * Math.sqrt(((xlegq[j] * ulen) + twa1) * 0.5);\n } else {\n qsqz = q * Math.sqrt(((-(xlegq[j] * ulen)) + twa1) * 0.5);\n }\n\n // call wprob to find integral of range portion\n\n var wprb = tukeyWprob(qsqz, rr, cc);\n var rotsum = (wprb * alegq[j]) * Math.exp(t1);\n otsum += rotsum;\n }\n // end legendre integral for interval i\n // L200:\n }\n\n // if integral for interval i < 1e-14, then stop.\n // However, in order to avoid small area under left tail,\n // at least 1 / ulen intervals are calculated.\n if (i * ulen >= 1.0 && otsum <= eps2)\n break;\n\n // end of interval i\n // L330:\n\n ans += otsum;\n }\n\n if (otsum > eps2) { // not converged\n throw new Error('tukey.cdf failed to converge');\n }\n if (ans > 1)\n ans = 1;\n return ans;\n },\n\n inv: function(p, nmeans, df) {\n // Identical implementation as the R qtukey() function as of commit 68947\n var rr = 1;\n var cc = nmeans;\n\n var eps = 0.0001;\n var maxiter = 50;\n\n // df must be > 1 ; there must be at least two values\n if (df < 2 || rr < 1 || cc < 2) return NaN;\n\n if (p < 0 || p > 1) return NaN;\n if (p === 0) return 0;\n if (p === 1) return Infinity;\n\n // Initial value\n\n var x0 = tukeyQinv(p, cc, df);\n\n // Find prob(value < x0)\n\n var valx0 = jStat.tukey.cdf(x0, nmeans, df) - p;\n\n // Find the second iterate and prob(value < x1).\n // If the first iterate has probability value\n // exceeding p then second iterate is 1 less than\n // first iterate; otherwise it is 1 greater.\n\n var x1;\n if (valx0 > 0.0)\n x1 = Math.max(0.0, x0 - 1.0);\n else\n x1 = x0 + 1.0;\n var valx1 = jStat.tukey.cdf(x1, nmeans, df) - p;\n\n // Find new iterate\n\n var ans;\n for(var iter = 1; iter < maxiter; iter++) {\n ans = x1 - ((valx1 * (x1 - x0)) / (valx1 - valx0));\n valx0 = valx1;\n\n // New iterate must be >= 0\n\n x0 = x1;\n if (ans < 0.0) {\n ans = 0.0;\n valx1 = -p;\n }\n // Find prob(value < new iterate)\n\n valx1 = jStat.tukey.cdf(ans, nmeans, df) - p;\n x1 = ans;\n\n // If the difference between two successive\n // iterates is less than eps, stop\n\n var xabs = Math.abs(x1 - x0);\n if (xabs < eps)\n return ans;\n }\n\n throw new Error('tukey.inv failed to converge');\n }\n});\n\n}(jStat, Math));\n/* Provides functions for the solution of linear system of equations, integration, extrapolation,\n * interpolation, eigenvalue problems, differential equations and PCA analysis. */\n\n(function(jStat, Math) {\n\nvar push = Array.prototype.push;\nvar isArray = jStat.utils.isArray;\n\nfunction isUsable(arg) {\n return isArray(arg) || arg instanceof jStat;\n}\n\njStat.extend({\n\n // add a vector/matrix to a vector/matrix or scalar\n add: function add(arr, arg) {\n // check if arg is a vector or scalar\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.map(arr, function(value, row, col) {\n return value + arg[row][col];\n });\n }\n return jStat.map(arr, function(value) { return value + arg; });\n },\n\n // subtract a vector or scalar from the vector\n subtract: function subtract(arr, arg) {\n // check if arg is a vector or scalar\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.map(arr, function(value, row, col) {\n return value - arg[row][col] || 0;\n });\n }\n return jStat.map(arr, function(value) { return value - arg; });\n },\n\n // matrix division\n divide: function divide(arr, arg) {\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.multiply(arr, jStat.inv(arg));\n }\n return jStat.map(arr, function(value) { return value / arg; });\n },\n\n // matrix multiplication\n multiply: function multiply(arr, arg) {\n var row, col, nrescols, sum, nrow, ncol, res, rescols;\n // eg: arr = 2 arg = 3 -> 6 for res[0][0] statement closure\n if (arr.length === undefined && arg.length === undefined) {\n return arr * arg;\n }\n nrow = arr.length,\n ncol = arr[0].length,\n res = jStat.zeros(nrow, nrescols = (isUsable(arg)) ? arg[0].length : ncol),\n rescols = 0;\n if (isUsable(arg)) {\n for (; rescols < nrescols; rescols++) {\n for (row = 0; row < nrow; row++) {\n sum = 0;\n for (col = 0; col < ncol; col++)\n sum += arr[row][col] * arg[col][rescols];\n res[row][rescols] = sum;\n }\n }\n return (nrow === 1 && rescols === 1) ? res[0][0] : res;\n }\n return jStat.map(arr, function(value) { return value * arg; });\n },\n\n // outer([1,2,3],[4,5,6])\n // ===\n // [[1],[2],[3]] times [[4,5,6]]\n // ->\n // [[4,5,6],[8,10,12],[12,15,18]]\n outer:function outer(A, B) {\n return jStat.multiply(A.map(function(t){ return [t] }), [B]);\n },\n\n\n // Returns the dot product of two matricies\n dot: function dot(arr, arg) {\n if (!isUsable(arr[0])) arr = [ arr ];\n if (!isUsable(arg[0])) arg = [ arg ];\n // convert column to row vector\n var left = (arr[0].length === 1 && arr.length !== 1) ? jStat.transpose(arr) : arr,\n right = (arg[0].length === 1 && arg.length !== 1) ? jStat.transpose(arg) : arg,\n res = [],\n row = 0,\n nrow = left.length,\n ncol = left[0].length,\n sum, col;\n for (; row < nrow; row++) {\n res[row] = [];\n sum = 0;\n for (col = 0; col < ncol; col++)\n sum += left[row][col] * right[row][col];\n res[row] = sum;\n }\n return (res.length === 1) ? res[0] : res;\n },\n\n // raise every element by a scalar\n pow: function pow(arr, arg) {\n return jStat.map(arr, function(value) { return Math.pow(value, arg); });\n },\n\n // exponentiate every element\n exp: function exp(arr) {\n return jStat.map(arr, function(value) { return Math.exp(value); });\n },\n\n // generate the natural log of every element\n log: function exp(arr) {\n return jStat.map(arr, function(value) { return Math.log(value); });\n },\n\n // generate the absolute values of the vector\n abs: function abs(arr) {\n return jStat.map(arr, function(value) { return Math.abs(value); });\n },\n\n // computes the p-norm of the vector\n // In the case that a matrix is passed, uses the first row as the vector\n norm: function norm(arr, p) {\n var nnorm = 0,\n i = 0;\n // check the p-value of the norm, and set for most common case\n if (isNaN(p)) p = 2;\n // check if multi-dimensional array, and make vector correction\n if (isUsable(arr[0])) arr = arr[0];\n // vector norm\n for (; i < arr.length; i++) {\n nnorm += Math.pow(Math.abs(arr[i]), p);\n }\n return Math.pow(nnorm, 1 / p);\n },\n\n // computes the angle between two vectors in rads\n // In case a matrix is passed, this uses the first row as the vector\n angle: function angle(arr, arg) {\n return Math.acos(jStat.dot(arr, arg) / (jStat.norm(arr) * jStat.norm(arg)));\n },\n\n // augment one matrix by another\n // Note: this function returns a matrix, not a jStat object\n aug: function aug(a, b) {\n var newarr = [];\n var i;\n for (i = 0; i < a.length; i++) {\n newarr.push(a[i].slice());\n }\n for (i = 0; i < newarr.length; i++) {\n push.apply(newarr[i], b[i]);\n }\n return newarr;\n },\n\n // The inv() function calculates the inverse of a matrix\n // Create the inverse by augmenting the matrix by the identity matrix of the\n // appropriate size, and then use G-J elimination on the augmented matrix.\n inv: function inv(a) {\n var rows = a.length;\n var cols = a[0].length;\n var b = jStat.identity(rows, cols);\n var c = jStat.gauss_jordan(a, b);\n var result = [];\n var i = 0;\n var j;\n\n //We need to copy the inverse portion to a new matrix to rid G-J artifacts\n for (; i < rows; i++) {\n result[i] = [];\n for (j = cols; j < c[0].length; j++)\n result[i][j - cols] = c[i][j];\n }\n return result;\n },\n\n // calculate the determinant of a matrix\n det: function det(a) {\n if (a.length === 2) {\n return a[0][0] * a[1][1] - a[0][1] * a[1][0];\n }\n\n var determinant = 0;\n for (var i = 0; i < a.length; i++) {\n // build a sub matrix without column `i`\n var submatrix = [];\n for (var row = 1; row < a.length; row++) {\n submatrix[row - 1] = [];\n for (var col = 0; col < a.length; col++) {\n if (col < i) {\n submatrix[row - 1][col] = a[row][col];\n } else if (col > i) {\n submatrix[row - 1][col - 1] = a[row][col];\n }\n }\n }\n\n // alternate between + and - between determinants\n var sign = i % 2 ? -1 : 1;\n determinant += det(submatrix) * a[0][i] * sign;\n }\n\n return determinant\n },\n\n gauss_elimination: function gauss_elimination(a, b) {\n var i = 0,\n j = 0,\n n = a.length,\n m = a[0].length,\n factor = 1,\n sum = 0,\n x = [],\n maug, pivot, temp, k;\n a = jStat.aug(a, b);\n maug = a[0].length;\n for(i = 0; i < n; i++) {\n pivot = a[i][i];\n j = i;\n for (k = i + 1; k < m; k++) {\n if (pivot < Math.abs(a[k][i])) {\n pivot = a[k][i];\n j = k;\n }\n }\n if (j != i) {\n for(k = 0; k < maug; k++) {\n temp = a[i][k];\n a[i][k] = a[j][k];\n a[j][k] = temp;\n }\n }\n for (j = i + 1; j < n; j++) {\n factor = a[j][i] / a[i][i];\n for(k = i; k < maug; k++) {\n a[j][k] = a[j][k] - factor * a[i][k];\n }\n }\n }\n for (i = n - 1; i >= 0; i--) {\n sum = 0;\n for (j = i + 1; j<= n - 1; j++) {\n sum = sum + x[j] * a[i][j];\n }\n x[i] =(a[i][maug - 1] - sum) / a[i][i];\n }\n return x;\n },\n\n gauss_jordan: function gauss_jordan(a, b) {\n var m = jStat.aug(a, b);\n var h = m.length;\n var w = m[0].length;\n var c = 0;\n var x, y, y2;\n // find max pivot\n for (y = 0; y < h; y++) {\n var maxrow = y;\n for (y2 = y+1; y2 < h; y2++) {\n if (Math.abs(m[y2][y]) > Math.abs(m[maxrow][y]))\n maxrow = y2;\n }\n var tmp = m[y];\n m[y] = m[maxrow];\n m[maxrow] = tmp\n for (y2 = y+1; y2 < h; y2++) {\n c = m[y2][y] / m[y][y];\n for (x = y; x < w; x++) {\n m[y2][x] -= m[y][x] * c;\n }\n }\n }\n // backsubstitute\n for (y = h-1; y >= 0; y--) {\n c = m[y][y];\n for (y2 = 0; y2 < y; y2++) {\n for (x = w-1; x > y-1; x--) {\n m[y2][x] -= m[y][x] * m[y2][y] / c;\n }\n }\n m[y][y] /= c;\n for (x = h; x < w; x++) {\n m[y][x] /= c;\n }\n }\n return m;\n },\n\n // solve equation\n // Ax=b\n // A is upper triangular matrix\n // A=[[1,2,3],[0,4,5],[0,6,7]]\n // b=[1,2,3]\n // triaUpSolve(A,b) // -> [2.666,0.1666,1.666]\n // if you use matrix style\n // A=[[1,2,3],[0,4,5],[0,6,7]]\n // b=[[1],[2],[3]]\n // will return [[2.666],[0.1666],[1.666]]\n triaUpSolve: function triaUpSolve(A, b) {\n var size = A[0].length;\n var x = jStat.zeros(1, size)[0];\n var parts;\n var matrix_mode = false;\n\n if (b[0].length != undefined) {\n b = b.map(function(i){ return i[0] });\n matrix_mode = true;\n }\n\n jStat.arange(size - 1, -1, -1).forEach(function(i) {\n parts = jStat.arange(i + 1, size).map(function(j) {\n return x[j] * A[i][j];\n });\n x[i] = (b[i] - jStat.sum(parts)) / A[i][i];\n });\n\n if (matrix_mode)\n return x.map(function(i){ return [i] });\n return x;\n },\n\n triaLowSolve: function triaLowSolve(A, b) {\n // like to triaUpSolve but A is lower triangular matrix\n var size = A[0].length;\n var x = jStat.zeros(1, size)[0];\n var parts;\n\n var matrix_mode=false;\n if (b[0].length != undefined) {\n b = b.map(function(i){ return i[0] });\n matrix_mode = true;\n }\n\n jStat.arange(size).forEach(function(i) {\n parts = jStat.arange(i).map(function(j) {\n return A[i][j] * x[j];\n });\n x[i] = (b[i] - jStat.sum(parts)) / A[i][i];\n })\n\n if (matrix_mode)\n return x.map(function(i){ return [i] });\n return x;\n },\n\n\n // A -> [L,U]\n // A=LU\n // L is lower triangular matrix\n // U is upper triangular matrix\n lu: function lu(A) {\n var size = A.length;\n //var L=jStat.diagonal(jStat.ones(1,size)[0]);\n var L = jStat.identity(size);\n var R = jStat.zeros(A.length, A[0].length);\n var parts;\n jStat.arange(size).forEach(function(t) {\n R[0][t] = A[0][t];\n });\n jStat.arange(1, size).forEach(function(l) {\n jStat.arange(l).forEach(function(i) {\n parts = jStat.arange(i).map(function(jj) {\n return L[l][jj] * R[jj][i];\n });\n L[l][i] = (A[l][i] - jStat.sum(parts)) / R[i][i];\n });\n jStat.arange(l, size).forEach(function(j) {\n parts = jStat.arange(l).map(function(jj) {\n return L[l][jj] * R[jj][j];\n });\n R[l][j] = A[parts.length][j] - jStat.sum(parts);\n });\n });\n return [L, R];\n },\n\n // A -> T\n // A=TT'\n // T is lower triangular matrix\n cholesky: function cholesky(A) {\n var size = A.length;\n var T = jStat.zeros(A.length, A[0].length);\n var parts;\n jStat.arange(size).forEach(function(i) {\n parts = jStat.arange(i).map(function(t) {\n return Math.pow(T[i][t],2);\n });\n T[i][i] = Math.sqrt(A[i][i] - jStat.sum(parts));\n jStat.arange(i + 1, size).forEach(function(j) {\n parts = jStat.arange(i).map(function(t) {\n return T[i][t] * T[j][t];\n });\n T[j][i] = (A[i][j] - jStat.sum(parts)) / T[i][i];\n });\n });\n return T;\n },\n\n\n gauss_jacobi: function gauss_jacobi(a, b, x, r) {\n var i = 0;\n var j = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.multiply(jStat.inv(d), jStat.add(l, u)), -1);\n c = jStat.multiply(jStat.inv(d), b);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk,xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i++;\n }\n return xk;\n },\n\n gauss_seidel: function gauss_seidel(a, b, x, r) {\n var i = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var j, xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.multiply(jStat.inv(jStat.add(d, l)), u), -1);\n c = jStat.multiply(jStat.inv(jStat.add(d, l)), b);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk, xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i = i + 1;\n }\n return xk;\n },\n\n SOR: function SOR(a, b, x, r, w) {\n var i = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var j, xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.inv(jStat.add(d, jStat.multiply(l, w))),\n jStat.subtract(jStat.multiply(d, 1 - w),\n jStat.multiply(u, w)));\n c = jStat.multiply(jStat.multiply(jStat.inv(jStat.add(d,\n jStat.multiply(l, w))), b), w);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk, xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i++;\n }\n return xk;\n },\n\n householder: function householder(a) {\n var m = a.length;\n var n = a[0].length;\n var i = 0;\n var w = [];\n var p = [];\n var alpha, r, k, j, factor;\n for (; i < m - 1; i++) {\n alpha = 0;\n for (j = i + 1; j < n; j++)\n alpha += (a[j][i] * a[j][i]);\n factor = (a[i + 1][i] > 0) ? -1 : 1;\n alpha = factor * Math.sqrt(alpha);\n r = Math.sqrt((((alpha * alpha) - a[i + 1][i] * alpha) / 2));\n w = jStat.zeros(m, 1);\n w[i + 1][0] = (a[i + 1][i] - alpha) / (2 * r);\n for (k = i + 2; k < m; k++) w[k][0] = a[k][i] / (2 * r);\n p = jStat.subtract(jStat.identity(m, n),\n jStat.multiply(jStat.multiply(w, jStat.transpose(w)), 2));\n a = jStat.multiply(p, jStat.multiply(a, p));\n }\n return a;\n },\n\n // A -> [Q,R]\n // Q is orthogonal matrix\n // R is upper triangular\n QR: (function() {\n // x -> Q\n // find a orthogonal matrix Q st.\n // Qx=y\n // y is [||x||,0,0,...]\n\n // quick ref\n var sum = jStat.sum;\n var range = jStat.arange;\n\n function qr2(x) {\n // quick impletation\n // https://www.stat.wisc.edu/~larget/math496/qr.html\n\n var n = x.length;\n var p = x[0].length;\n\n var r = jStat.zeros(p, p);\n x = jStat.copy(x);\n\n var i,j,k;\n for(j = 0; j < p; j++){\n r[j][j] = Math.sqrt(sum(range(n).map(function(i){\n return x[i][j] * x[i][j];\n })));\n for(i = 0; i < n; i++){\n x[i][j] = x[i][j] / r[j][j];\n }\n for(k = j+1; k < p; k++){\n r[j][k] = sum(range(n).map(function(i){\n return x[i][j] * x[i][k];\n }));\n for(i = 0; i < n; i++){\n x[i][k] = x[i][k] - x[i][j]*r[j][k];\n }\n }\n }\n return [x, r];\n }\n\n return qr2;\n }()),\n\n lstsq: (function() {\n // solve least squard problem for Ax=b as QR decomposition way if b is\n // [[b1],[b2],[b3]] form will return [[x1],[x2],[x3]] array form solution\n // else b is [b1,b2,b3] form will return [x1,x2,x3] array form solution\n function R_I(A) {\n A = jStat.copy(A);\n var size = A.length;\n var I = jStat.identity(size);\n jStat.arange(size - 1, -1, -1).forEach(function(i) {\n jStat.sliceAssign(\n I, { row: i }, jStat.divide(jStat.slice(I, { row: i }), A[i][i]));\n jStat.sliceAssign(\n A, { row: i }, jStat.divide(jStat.slice(A, { row: i }), A[i][i]));\n jStat.arange(i).forEach(function(j) {\n var c = jStat.multiply(A[j][i], -1);\n var Aj = jStat.slice(A, { row: j });\n var cAi = jStat.multiply(jStat.slice(A, { row: i }), c);\n jStat.sliceAssign(A, { row: j }, jStat.add(Aj, cAi));\n var Ij = jStat.slice(I, { row: j });\n var cIi = jStat.multiply(jStat.slice(I, { row: i }), c);\n jStat.sliceAssign(I, { row: j }, jStat.add(Ij, cIi));\n })\n });\n return I;\n }\n\n function qr_solve(A, b){\n var array_mode = false;\n if (b[0].length === undefined) {\n // [c1,c2,c3] mode\n b = b.map(function(x){ return [x] });\n array_mode = true;\n }\n var QR = jStat.QR(A);\n var Q = QR[0];\n var R = QR[1];\n var attrs = A[0].length;\n var Q1 = jStat.slice(Q,{col:{end:attrs}});\n var R1 = jStat.slice(R,{row:{end:attrs}});\n var RI = R_I(R1);\n var Q2 = jStat.transpose(Q1);\n\n if(Q2[0].length === undefined){\n Q2 = [Q2]; // The confusing jStat.multifly implementation threat nature process again.\n }\n\n var x = jStat.multiply(jStat.multiply(RI, Q2), b);\n\n if(x.length === undefined){\n x = [[x]]; // The confusing jStat.multifly implementation threat nature process again.\n }\n\n\n if (array_mode)\n return x.map(function(i){ return i[0] });\n return x;\n }\n\n return qr_solve;\n }()),\n\n jacobi: function jacobi(a) {\n var condition = 1;\n var n = a.length;\n var e = jStat.identity(n, n);\n var ev = [];\n var b, i, j, p, q, maxim, theta, s;\n // condition === 1 only if tolerance is not reached\n while (condition === 1) {\n maxim = a[0][1];\n p = 0;\n q = 1;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n if (i != j) {\n if (maxim < Math.abs(a[i][j])) {\n maxim = Math.abs(a[i][j]);\n p = i;\n q = j;\n }\n }\n }\n }\n if (a[p][p] === a[q][q])\n theta = (a[p][q] > 0) ? Math.PI / 4 : -Math.PI / 4;\n else\n theta = Math.atan(2 * a[p][q] / (a[p][p] - a[q][q])) / 2;\n s = jStat.identity(n, n);\n s[p][p] = Math.cos(theta);\n s[p][q] = -Math.sin(theta);\n s[q][p] = Math.sin(theta);\n s[q][q] = Math.cos(theta);\n // eigen vector matrix\n e = jStat.multiply(e, s);\n b = jStat.multiply(jStat.multiply(jStat.inv(s), a), s);\n a = b;\n condition = 0;\n for (i = 1; i < n; i++) {\n for (j = 1; j < n; j++) {\n if (i != j && Math.abs(a[i][j]) > 0.001) {\n condition = 1;\n }\n }\n }\n }\n for (i = 0; i < n; i++) ev.push(a[i][i]);\n //returns both the eigenvalue and eigenmatrix\n return [e, ev];\n },\n\n rungekutta: function rungekutta(f, h, p, t_j, u_j, order) {\n var k1, k2, u_j1, k3, k4;\n if (order === 2) {\n while (t_j <= p) {\n k1 = h * f(t_j, u_j);\n k2 = h * f(t_j + h, u_j + k1);\n u_j1 = u_j + (k1 + k2) / 2;\n u_j = u_j1;\n t_j = t_j + h;\n }\n }\n if (order === 4) {\n while (t_j <= p) {\n k1 = h * f(t_j, u_j);\n k2 = h * f(t_j + h / 2, u_j + k1 / 2);\n k3 = h * f(t_j + h / 2, u_j + k2 / 2);\n k4 = h * f(t_j +h, u_j + k3);\n u_j1 = u_j + (k1 + 2 * k2 + 2 * k3 + k4) / 6;\n u_j = u_j1;\n t_j = t_j + h;\n }\n }\n return u_j;\n },\n\n romberg: function romberg(f, a, b, order) {\n var i = 0;\n var h = (b - a) / 2;\n var x = [];\n var h1 = [];\n var g = [];\n var m, a1, j, k, I;\n while (i < order / 2) {\n I = f(a);\n for (j = a, k = 0; j <= b; j = j + h, k++) x[k] = j;\n m = x.length;\n for (j = 1; j < m - 1; j++) {\n I += (((j % 2) !== 0) ? 4 : 2) * f(x[j]);\n }\n I = (h / 3) * (I + f(b));\n g[i] = I;\n h /= 2;\n i++;\n }\n a1 = g.length;\n m = 1;\n while (a1 !== 1) {\n for (j = 0; j < a1 - 1; j++)\n h1[j] = ((Math.pow(4, m)) * g[j + 1] - g[j]) / (Math.pow(4, m) - 1);\n a1 = h1.length;\n g = h1;\n h1 = [];\n m++;\n }\n return g;\n },\n\n richardson: function richardson(X, f, x, h) {\n function pos(X, x) {\n var i = 0;\n var n = X.length;\n var p;\n for (; i < n; i++)\n if (X[i] === x) p = i;\n return p;\n }\n var h_min = Math.abs(x - X[pos(X, x) + 1]);\n var i = 0;\n var g = [];\n var h1 = [];\n var y1, y2, m, a, j;\n while (h >= h_min) {\n y1 = pos(X, x + h);\n y2 = pos(X, x);\n g[i] = (f[y1] - 2 * f[y2] + f[2 * y2 - y1]) / (h * h);\n h /= 2;\n i++;\n }\n a = g.length;\n m = 1;\n while (a != 1) {\n for (j = 0; j < a - 1; j++)\n h1[j] = ((Math.pow(4, m)) * g[j + 1] - g[j]) / (Math.pow(4, m) - 1);\n a = h1.length;\n g = h1;\n h1 = [];\n m++;\n }\n return g;\n },\n\n simpson: function simpson(f, a, b, n) {\n var h = (b - a) / n;\n var I = f(a);\n var x = [];\n var j = a;\n var k = 0;\n var i = 1;\n var m;\n for (; j <= b; j = j + h, k++)\n x[k] = j;\n m = x.length;\n for (; i < m - 1; i++) {\n I += ((i % 2 !== 0) ? 4 : 2) * f(x[i]);\n }\n return (h / 3) * (I + f(b));\n },\n\n hermite: function hermite(X, F, dF, value) {\n var n = X.length;\n var p = 0;\n var i = 0;\n var l = [];\n var dl = [];\n var A = [];\n var B = [];\n var j;\n for (; i < n; i++) {\n l[i] = 1;\n for (j = 0; j < n; j++) {\n if (i != j) l[i] *= (value - X[j]) / (X[i] - X[j]);\n }\n dl[i] = 0;\n for (j = 0; j < n; j++) {\n if (i != j) dl[i] += 1 / (X [i] - X[j]);\n }\n A[i] = (1 - 2 * (value - X[i]) * dl[i]) * (l[i] * l[i]);\n B[i] = (value - X[i]) * (l[i] * l[i]);\n p += (A[i] * F[i] + B[i] * dF[i]);\n }\n return p;\n },\n\n lagrange: function lagrange(X, F, value) {\n var p = 0;\n var i = 0;\n var j, l;\n var n = X.length;\n for (; i < n; i++) {\n l = F[i];\n for (j = 0; j < n; j++) {\n // calculating the lagrange polynomial L_i\n if (i != j) l *= (value - X[j]) / (X[i] - X[j]);\n }\n // adding the lagrange polynomials found above\n p += l;\n }\n return p;\n },\n\n cubic_spline: function cubic_spline(X, F, value) {\n var n = X.length;\n var i = 0, j;\n var A = [];\n var B = [];\n var alpha = [];\n var c = [];\n var h = [];\n var b = [];\n var d = [];\n for (; i < n - 1; i++)\n h[i] = X[i + 1] - X[i];\n alpha[0] = 0;\n for (i = 1; i < n - 1; i++) {\n alpha[i] = (3 / h[i]) * (F[i + 1] - F[i]) -\n (3 / h[i-1]) * (F[i] - F[i-1]);\n }\n for (i = 1; i < n - 1; i++) {\n A[i] = [];\n B[i] = [];\n A[i][i-1] = h[i-1];\n A[i][i] = 2 * (h[i - 1] + h[i]);\n A[i][i+1] = h[i];\n B[i][0] = alpha[i];\n }\n c = jStat.multiply(jStat.inv(A), B);\n for (j = 0; j < n - 1; j++) {\n b[j] = (F[j + 1] - F[j]) / h[j] - h[j] * (c[j + 1][0] + 2 * c[j][0]) / 3;\n d[j] = (c[j + 1][0] - c[j][0]) / (3 * h[j]);\n }\n for (j = 0; j < n; j++) {\n if (X[j] > value) break;\n }\n j -= 1;\n return F[j] + (value - X[j]) * b[j] + jStat.sq(value-X[j]) *\n c[j] + (value - X[j]) * jStat.sq(value - X[j]) * d[j];\n },\n\n gauss_quadrature: function gauss_quadrature() {\n throw new Error('gauss_quadrature not yet implemented');\n },\n\n PCA: function PCA(X) {\n var m = X.length;\n var n = X[0].length;\n var i = 0;\n var j, temp1;\n var u = [];\n var D = [];\n var result = [];\n var temp2 = [];\n var Y = [];\n var Bt = [];\n var B = [];\n var C = [];\n var V = [];\n var Vt = [];\n for (i = 0; i < m; i++) {\n u[i] = jStat.sum(X[i]) / n;\n }\n for (i = 0; i < n; i++) {\n B[i] = [];\n for(j = 0; j < m; j++) {\n B[i][j] = X[j][i] - u[j];\n }\n }\n B = jStat.transpose(B);\n for (i = 0; i < m; i++) {\n C[i] = [];\n for (j = 0; j < m; j++) {\n C[i][j] = (jStat.dot([B[i]], [B[j]])) / (n - 1);\n }\n }\n result = jStat.jacobi(C);\n V = result[0];\n D = result[1];\n Vt = jStat.transpose(V);\n for (i = 0; i < D.length; i++) {\n for (j = i; j < D.length; j++) {\n if(D[i] < D[j]) {\n temp1 = D[i];\n D[i] = D[j];\n D[j] = temp1;\n temp2 = Vt[i];\n Vt[i] = Vt[j];\n Vt[j] = temp2;\n }\n }\n }\n Bt = jStat.transpose(B);\n for (i = 0; i < m; i++) {\n Y[i] = [];\n for (j = 0; j < Bt.length; j++) {\n Y[i][j] = jStat.dot([Vt[i]], [Bt[j]]);\n }\n }\n return [X, D, Vt, Y];\n }\n});\n\n// extend jStat.fn with methods that require one argument\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function(arg, func) {\n var tmpthis = this;\n // check for callback\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jStat.fn[passfunc].call(tmpthis, arg));\n }, 15);\n return this;\n }\n if (typeof jStat[passfunc](this, arg) === 'number')\n return jStat[passfunc](this, arg);\n else\n return jStat(jStat[passfunc](this, arg));\n };\n }(funcs[i]));\n}('add divide multiply subtract dot pow exp log abs norm angle'.split(' ')));\n\n}(jStat, Math));\n(function(jStat, Math) {\n\nvar slice = [].slice;\nvar isNumber = jStat.utils.isNumber;\nvar isArray = jStat.utils.isArray;\n\n// flag==true denotes use of sample standard deviation\n// Z Statistics\njStat.extend({\n // 2 different parameter lists:\n // (value, mean, sd)\n // (value, array, flag)\n zscore: function zscore() {\n var args = slice.call(arguments);\n if (isNumber(args[1])) {\n return (args[0] - args[1]) / args[2];\n }\n return (args[0] - jStat.mean(args[1])) / jStat.stdev(args[1], args[2]);\n },\n\n // 3 different paramter lists:\n // (value, mean, sd, sides)\n // (zscore, sides)\n // (value, array, sides, flag)\n ztest: function ztest() {\n var args = slice.call(arguments);\n var z;\n if (isArray(args[1])) {\n // (value, array, sides, flag)\n z = jStat.zscore(args[0],args[1],args[3]);\n return (args[2] === 1) ?\n (jStat.normal.cdf(-Math.abs(z), 0, 1)) :\n (jStat.normal.cdf(-Math.abs(z), 0, 1)*2);\n } else {\n if (args.length > 2) {\n // (value, mean, sd, sides)\n z = jStat.zscore(args[0],args[1],args[2]);\n return (args[3] === 1) ?\n (jStat.normal.cdf(-Math.abs(z),0,1)) :\n (jStat.normal.cdf(-Math.abs(z),0,1)* 2);\n } else {\n // (zscore, sides)\n z = args[0];\n return (args[1] === 1) ?\n (jStat.normal.cdf(-Math.abs(z),0,1)) :\n (jStat.normal.cdf(-Math.abs(z),0,1)*2);\n }\n }\n }\n});\n\njStat.extend(jStat.fn, {\n zscore: function zscore(value, flag) {\n return (value - this.mean()) / this.stdev(flag);\n },\n\n ztest: function ztest(value, sides, flag) {\n var zscore = Math.abs(this.zscore(value, flag));\n return (sides === 1) ?\n (jStat.normal.cdf(-zscore, 0, 1)) :\n (jStat.normal.cdf(-zscore, 0, 1) * 2);\n }\n});\n\n// T Statistics\njStat.extend({\n // 2 parameter lists\n // (value, mean, sd, n)\n // (value, array)\n tscore: function tscore() {\n var args = slice.call(arguments);\n return (args.length === 4) ?\n ((args[0] - args[1]) / (args[2] / Math.sqrt(args[3]))) :\n ((args[0] - jStat.mean(args[1])) /\n (jStat.stdev(args[1], true) / Math.sqrt(args[1].length)));\n },\n\n // 3 different paramter lists:\n // (value, mean, sd, n, sides)\n // (tscore, n, sides)\n // (value, array, sides)\n ttest: function ttest() {\n var args = slice.call(arguments);\n var tscore;\n if (args.length === 5) {\n tscore = Math.abs(jStat.tscore(args[0], args[1], args[2], args[3]));\n return (args[4] === 1) ?\n (jStat.studentt.cdf(-tscore, args[3]-1)) :\n (jStat.studentt.cdf(-tscore, args[3]-1)*2);\n }\n if (isNumber(args[1])) {\n tscore = Math.abs(args[0])\n return (args[2] == 1) ?\n (jStat.studentt.cdf(-tscore, args[1]-1)) :\n (jStat.studentt.cdf(-tscore, args[1]-1) * 2);\n }\n tscore = Math.abs(jStat.tscore(args[0], args[1]))\n return (args[2] == 1) ?\n (jStat.studentt.cdf(-tscore, args[1].length-1)) :\n (jStat.studentt.cdf(-tscore, args[1].length-1) * 2);\n }\n});\n\njStat.extend(jStat.fn, {\n tscore: function tscore(value) {\n return (value - this.mean()) / (this.stdev(true) / Math.sqrt(this.cols()));\n },\n\n ttest: function ttest(value, sides) {\n return (sides === 1) ?\n (1 - jStat.studentt.cdf(Math.abs(this.tscore(value)), this.cols()-1)) :\n (jStat.studentt.cdf(-Math.abs(this.tscore(value)), this.cols()-1)*2);\n }\n});\n\n// F Statistics\njStat.extend({\n // Paramter list is as follows:\n // (array1, array2, array3, ...)\n // or it is an array of arrays\n // array of arrays conversion\n anovafscore: function anovafscore() {\n var args = slice.call(arguments),\n expVar, sample, sampMean, sampSampMean, tmpargs, unexpVar, i, j;\n if (args.length === 1) {\n tmpargs = new Array(args[0].length);\n for (i = 0; i < args[0].length; i++) {\n tmpargs[i] = args[0][i];\n }\n args = tmpargs;\n }\n // Builds sample array\n sample = new Array();\n for (i = 0; i < args.length; i++) {\n sample = sample.concat(args[i]);\n }\n sampMean = jStat.mean(sample);\n // Computes the explained variance\n expVar = 0;\n for (i = 0; i < args.length; i++) {\n expVar = expVar + args[i].length * Math.pow(jStat.mean(args[i]) - sampMean, 2);\n }\n expVar /= (args.length - 1);\n // Computes unexplained variance\n unexpVar = 0;\n for (i = 0; i < args.length; i++) {\n sampSampMean = jStat.mean(args[i]);\n for (j = 0; j < args[i].length; j++) {\n unexpVar += Math.pow(args[i][j] - sampSampMean, 2);\n }\n }\n unexpVar /= (sample.length - args.length);\n return expVar / unexpVar;\n },\n\n // 2 different paramter setups\n // (array1, array2, array3, ...)\n // (anovafscore, df1, df2)\n anovaftest: function anovaftest() {\n var args = slice.call(arguments),\n df1, df2, n, i;\n if (isNumber(args[0])) {\n return 1 - jStat.centralF.cdf(args[0], args[1], args[2]);\n }\n var anovafscore = jStat.anovafscore(args);\n df1 = args.length - 1;\n n = 0;\n for (i = 0; i < args.length; i++) {\n n = n + args[i].length;\n }\n df2 = n - df1 - 1;\n return 1 - jStat.centralF.cdf(anovafscore, df1, df2);\n },\n\n ftest: function ftest(fscore, df1, df2) {\n return 1 - jStat.centralF.cdf(fscore, df1, df2);\n }\n});\n\njStat.extend(jStat.fn, {\n anovafscore: function anovafscore() {\n return jStat.anovafscore(this.toArray());\n },\n\n anovaftes: function anovaftes() {\n var n = 0;\n var i;\n for (i = 0; i < this.length; i++) {\n n = n + this[i].length;\n }\n return jStat.ftest(this.anovafscore(), this.length - 1, n - this.length);\n }\n});\n\n// Tukey's range test\njStat.extend({\n // 2 parameter lists\n // (mean1, mean2, n1, n2, sd)\n // (array1, array2, sd)\n qscore: function qscore() {\n var args = slice.call(arguments);\n var mean1, mean2, n1, n2, sd;\n if (isNumber(args[0])) {\n mean1 = args[0];\n mean2 = args[1];\n n1 = args[2];\n n2 = args[3];\n sd = args[4];\n } else {\n mean1 = jStat.mean(args[0]);\n mean2 = jStat.mean(args[1]);\n n1 = args[0].length;\n n2 = args[1].length;\n sd = args[2];\n }\n return Math.abs(mean1 - mean2) / (sd * Math.sqrt((1 / n1 + 1 / n2) / 2));\n },\n\n // 3 different parameter lists:\n // (qscore, n, k)\n // (mean1, mean2, n1, n2, sd, n, k)\n // (array1, array2, sd, n, k)\n qtest: function qtest() {\n var args = slice.call(arguments);\n\n var qscore;\n if (args.length === 3) {\n qscore = args[0];\n args = args.slice(1);\n } else if (args.length === 7) {\n qscore = jStat.qscore(args[0], args[1], args[2], args[3], args[4]);\n args = args.slice(5);\n } else {\n qscore = jStat.qscore(args[0], args[1], args[2]);\n args = args.slice(3);\n }\n\n var n = args[0];\n var k = args[1];\n\n return 1 - jStat.tukey.cdf(qscore, k, n - k);\n },\n\n tukeyhsd: function tukeyhsd(arrays) {\n var sd = jStat.pooledstdev(arrays);\n var means = arrays.map(function (arr) {return jStat.mean(arr);});\n var n = arrays.reduce(function (n, arr) {return n + arr.length;}, 0);\n\n var results = [];\n for (var i = 0; i < arrays.length; ++i) {\n for (var j = i + 1; j < arrays.length; ++j) {\n var p = jStat.qtest(means[i], means[j], arrays[i].length, arrays[j].length, sd, n, arrays.length);\n results.push([[i, j], p]);\n }\n }\n\n return results;\n }\n});\n\n// Error Bounds\njStat.extend({\n // 2 different parameter setups\n // (value, alpha, sd, n)\n // (value, alpha, array)\n normalci: function normalci() {\n var args = slice.call(arguments),\n ans = new Array(2),\n change;\n if (args.length === 4) {\n change = Math.abs(jStat.normal.inv(args[1] / 2, 0, 1) *\n args[2] / Math.sqrt(args[3]));\n } else {\n change = Math.abs(jStat.normal.inv(args[1] / 2, 0, 1) *\n jStat.stdev(args[2]) / Math.sqrt(args[2].length));\n }\n ans[0] = args[0] - change;\n ans[1] = args[0] + change;\n return ans;\n },\n\n // 2 different parameter setups\n // (value, alpha, sd, n)\n // (value, alpha, array)\n tci: function tci() {\n var args = slice.call(arguments),\n ans = new Array(2),\n change;\n if (args.length === 4) {\n change = Math.abs(jStat.studentt.inv(args[1] / 2, args[3] - 1) *\n args[2] / Math.sqrt(args[3]));\n } else {\n change = Math.abs(jStat.studentt.inv(args[1] / 2, args[2].length - 1) *\n jStat.stdev(args[2], true) / Math.sqrt(args[2].length));\n }\n ans[0] = args[0] - change;\n ans[1] = args[0] + change;\n return ans;\n },\n\n significant: function significant(pvalue, alpha) {\n return pvalue < alpha;\n }\n});\n\njStat.extend(jStat.fn, {\n normalci: function normalci(value, alpha) {\n return jStat.normalci(value, alpha, this.toArray());\n },\n\n tci: function tci(value, alpha) {\n return jStat.tci(value, alpha, this.toArray());\n }\n});\n\n// internal method for calculating the z-score for a difference of proportions test\nfunction differenceOfProportions(p1, n1, p2, n2) {\n if (p1 > 1 || p2 > 1 || p1 <= 0 || p2 <= 0) {\n throw new Error(\"Proportions should be greater than 0 and less than 1\")\n }\n var pooled = (p1 * n1 + p2 * n2) / (n1 + n2);\n var se = Math.sqrt(pooled * (1 - pooled) * ((1/n1) + (1/n2)));\n return (p1 - p2) / se;\n}\n\n// Difference of Proportions\njStat.extend(jStat.fn, {\n oneSidedDifferenceOfProportions: function oneSidedDifferenceOfProportions(p1, n1, p2, n2) {\n var z = differenceOfProportions(p1, n1, p2, n2);\n return jStat.ztest(z, 1);\n },\n\n twoSidedDifferenceOfProportions: function twoSidedDifferenceOfProportions(p1, n1, p2, n2) {\n var z = differenceOfProportions(p1, n1, p2, n2);\n return jStat.ztest(z, 2);\n }\n});\n\n}(jStat, Math));\njStat.models = (function(){\n function sub_regress(exog) {\n var var_count = exog[0].length;\n var modelList = jStat.arange(var_count).map(function(endog_index) {\n var exog_index =\n jStat.arange(var_count).filter(function(i){return i!==endog_index});\n return ols(jStat.col(exog, endog_index).map(function(x){ return x[0] }),\n jStat.col(exog, exog_index))\n });\n return modelList;\n }\n\n // do OLS model regress\n // exog have include const columns ,it will not generate it .In fact, exog is\n // \"design matrix\" look at\n //https://en.wikipedia.org/wiki/Design_matrix\n function ols(endog, exog) {\n var nobs = endog.length;\n var df_model = exog[0].length - 1;\n var df_resid = nobs-df_model - 1;\n var coef = jStat.lstsq(exog, endog);\n var predict =\n jStat.multiply(exog, coef.map(function(x) { return [x] }))\n .map(function(p) { return p[0] });\n var resid = jStat.subtract(endog, predict);\n var ybar = jStat.mean(endog);\n // constant cause problem\n // var SST = jStat.sum(endog.map(function(y) {\n // return Math.pow(y-ybar,2);\n // }));\n var SSE = jStat.sum(predict.map(function(f) {\n return Math.pow(f - ybar, 2);\n }));\n var SSR = jStat.sum(endog.map(function(y, i) {\n return Math.pow(y - predict[i], 2);\n }));\n var SST = SSE + SSR;\n var R2 = (SSE / SST);\n return {\n exog:exog,\n endog:endog,\n nobs:nobs,\n df_model:df_model,\n df_resid:df_resid,\n coef:coef,\n predict:predict,\n resid:resid,\n ybar:ybar,\n SST:SST,\n SSE:SSE,\n SSR:SSR,\n R2:R2\n };\n }\n\n // H0: b_I=0\n // H1: b_I!=0\n function t_test(model) {\n var subModelList = sub_regress(model.exog);\n //var sigmaHat=jStat.stdev(model.resid);\n var sigmaHat = Math.sqrt(model.SSR / (model.df_resid));\n var seBetaHat = subModelList.map(function(mod) {\n var SST = mod.SST;\n var R2 = mod.R2;\n return sigmaHat / Math.sqrt(SST * (1 - R2));\n });\n var tStatistic = model.coef.map(function(coef, i) {\n return (coef - 0) / seBetaHat[i];\n });\n var pValue = tStatistic.map(function(t) {\n var leftppf = jStat.studentt.cdf(t, model.df_resid);\n return (leftppf > 0.5 ? 1 - leftppf : leftppf) * 2;\n });\n var c = jStat.studentt.inv(0.975, model.df_resid);\n var interval95 = model.coef.map(function(coef, i) {\n var d = c * seBetaHat[i];\n return [coef - d, coef + d];\n })\n return {\n se: seBetaHat,\n t: tStatistic,\n p: pValue,\n sigmaHat: sigmaHat,\n interval95: interval95\n };\n }\n\n function F_test(model) {\n var F_statistic =\n (model.R2 / model.df_model) / ((1 - model.R2) / model.df_resid);\n var fcdf = function(x, n1, n2) {\n return jStat.beta.cdf(x / (n2 / n1 + x), n1 / 2, n2 / 2)\n }\n var pvalue = 1 - fcdf(F_statistic, model.df_model, model.df_resid);\n return { F_statistic: F_statistic, pvalue: pvalue };\n }\n\n function ols_wrap(endog, exog) {\n var model = ols(endog,exog);\n var ttest = t_test(model);\n var ftest = F_test(model);\n // Provide the Wherry / Ezekiel / McNemar / Cohen Adjusted R^2\n // Which matches the 'adjusted R^2' provided by R's lm package\n var adjust_R2 =\n 1 - (1 - model.R2) * ((model.nobs - 1) / (model.df_resid));\n model.t = ttest;\n model.f = ftest;\n model.adjust_R2 = adjust_R2;\n return model;\n }\n\n return { ols: ols_wrap };\n})();\n//To regress, simply build X matrix\n//(append column of 1's) using\n//buildxmatrix and build the Y\n//matrix using buildymatrix\n//(simply the transpose)\n//and run regress.\n\n\n\n//Regressions\n\njStat.extend({\n buildxmatrix: function buildxmatrix(){\n //Parameters will be passed in as such\n //(array1,array2,array3,...)\n //as (x1,x2,x3,...)\n //needs to be (1,x1,x2,x3,...)\n var matrixRows = new Array(arguments.length);\n for(var i=0;i<arguments.length;i++){\n var array = [1];\n matrixRows[i]= array.concat(arguments[i]);\n }\n return jStat(matrixRows);\n\n },\n\n builddxmatrix: function builddxmatrix() {\n //Paramters will be passed in as such\n //([array1,array2,...]\n var matrixRows = new Array(arguments[0].length);\n for(var i=0;i<arguments[0].length;i++){\n var array = [1]\n matrixRows[i]= array.concat(arguments[0][i]);\n }\n return jStat(matrixRows);\n\n },\n\n buildjxmatrix: function buildjxmatrix(jMat) {\n //Builds from jStat Matrix\n var pass = new Array(jMat.length)\n for(var i=0;i<jMat.length;i++){\n pass[i] = jMat[i];\n }\n return jStat.builddxmatrix(pass);\n\n },\n\n buildymatrix: function buildymatrix(array){\n return jStat(array).transpose();\n },\n\n buildjymatrix: function buildjymatrix(jMat){\n return jMat.transpose();\n },\n\n matrixmult: function matrixmult(A,B){\n var i, j, k, result, sum;\n if (A.cols() == B.rows()) {\n if(B.rows()>1){\n result = [];\n for (i = 0; i < A.rows(); i++) {\n result[i] = [];\n for (j = 0; j < B.cols(); j++) {\n sum = 0;\n for (k = 0; k < A.cols(); k++) {\n sum += A.toArray()[i][k] * B.toArray()[k][j];\n }\n result[i][j] = sum;\n }\n }\n return jStat(result);\n }\n result = [];\n for (i = 0; i < A.rows(); i++) {\n result[i] = [];\n for (j = 0; j < B.cols(); j++) {\n sum = 0;\n for (k = 0; k < A.cols(); k++) {\n sum += A.toArray()[i][k] * B.toArray()[j];\n }\n result[i][j] = sum;\n }\n }\n return jStat(result);\n }\n },\n\n //regress and regresst to be fixed\n\n regress: function regress(jMatX,jMatY){\n //print(\"regressin!\");\n //print(jMatX.toArray());\n var innerinv = jStat.xtranspxinv(jMatX);\n //print(innerinv);\n var xtransp = jMatX.transpose();\n var next = jStat.matrixmult(jStat(innerinv),xtransp);\n return jStat.matrixmult(next,jMatY);\n\n },\n\n regresst: function regresst(jMatX,jMatY,sides){\n var beta = jStat.regress(jMatX,jMatY);\n\n var compile = {};\n compile.anova = {};\n var jMatYBar = jStat.jMatYBar(jMatX, beta);\n compile.yBar = jMatYBar;\n var yAverage = jMatY.mean();\n compile.anova.residuals = jStat.residuals(jMatY, jMatYBar);\n\n compile.anova.ssr = jStat.ssr(jMatYBar, yAverage);\n compile.anova.msr = compile.anova.ssr / (jMatX[0].length - 1);\n\n compile.anova.sse = jStat.sse(jMatY, jMatYBar);\n compile.anova.mse =\n compile.anova.sse / (jMatY.length - (jMatX[0].length - 1) - 1);\n\n compile.anova.sst = jStat.sst(jMatY, yAverage);\n compile.anova.mst = compile.anova.sst / (jMatY.length - 1);\n\n compile.anova.r2 = 1 - (compile.anova.sse / compile.anova.sst);\n if (compile.anova.r2 < 0) compile.anova.r2 = 0;\n\n compile.anova.fratio = compile.anova.msr / compile.anova.mse;\n compile.anova.pvalue =\n jStat.anovaftest(compile.anova.fratio,\n jMatX[0].length - 1,\n jMatY.length - (jMatX[0].length - 1) - 1);\n\n compile.anova.rmse = Math.sqrt(compile.anova.mse);\n\n compile.anova.r2adj = 1 - (compile.anova.mse / compile.anova.mst);\n if (compile.anova.r2adj < 0) compile.anova.r2adj = 0;\n\n compile.stats = new Array(jMatX[0].length);\n var covar = jStat.xtranspxinv(jMatX);\n var sds, ts, ps;\n\n for(var i=0; i<beta.length;i++){\n sds=Math.sqrt(compile.anova.mse * Math.abs(covar[i][i]));\n ts= Math.abs(beta[i] / sds);\n ps= jStat.ttest(ts, jMatY.length - jMatX[0].length - 1, sides);\n\n compile.stats[i]=[beta[i], sds, ts, ps];\n }\n\n compile.regress = beta;\n return compile;\n },\n\n xtranspx: function xtranspx(jMatX){\n return jStat.matrixmult(jMatX.transpose(),jMatX);\n },\n\n\n xtranspxinv: function xtranspxinv(jMatX){\n var inner = jStat.matrixmult(jMatX.transpose(),jMatX);\n var innerinv = jStat.inv(inner);\n return innerinv;\n },\n\n jMatYBar: function jMatYBar(jMatX, beta) {\n var yBar = jStat.matrixmult(jMatX, beta);\n return new jStat(yBar);\n },\n\n residuals: function residuals(jMatY, jMatYBar) {\n return jStat.matrixsubtract(jMatY, jMatYBar);\n },\n\n ssr: function ssr(jMatYBar, yAverage) {\n var ssr = 0;\n for(var i = 0; i < jMatYBar.length; i++) {\n ssr += Math.pow(jMatYBar[i] - yAverage, 2);\n }\n return ssr;\n },\n\n sse: function sse(jMatY, jMatYBar) {\n var sse = 0;\n for(var i = 0; i < jMatY.length; i++) {\n sse += Math.pow(jMatY[i] - jMatYBar[i], 2);\n }\n return sse;\n },\n\n sst: function sst(jMatY, yAverage) {\n var sst = 0;\n for(var i = 0; i < jMatY.length; i++) {\n sst += Math.pow(jMatY[i] - yAverage, 2);\n }\n return sst;\n },\n\n matrixsubtract: function matrixsubtract(A,B){\n var ans = new Array(A.length);\n for(var i=0;i<A.length;i++){\n ans[i] = new Array(A[i].length);\n for(var j=0;j<A[i].length;j++){\n ans[i][j]=A[i][j]-B[i][j];\n }\n }\n return jStat(ans);\n }\n});\n // Make it compatible with previous version.\n jStat.jStat = jStat;\n\n return jStat;\n});\n","/* bessel.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported BESSEL */\nvar BESSEL;\n(function (factory) {\n /*jshint ignore:start */\n if(typeof DO_NOT_EXPORT_BESSEL === 'undefined') {\n if('object' === typeof exports) {\n factory(exports);\n } else if ('function' === typeof define && define.amd) {\n define(function () {\n var module = {};\n factory(module);\n return module;\n });\n } else {\n factory(BESSEL = {});\n }\n } else {\n factory(BESSEL = {});\n }\n /*jshint ignore:end */\n}(function(BESSEL) {\nBESSEL.version = '1.0.2';\nvar M = Math;\n\nfunction _horner(arr, v) { for(var i = 0, z = 0; i < arr.length; ++i) z = v * z + arr[i]; return z; }\nfunction _bessel_iter(x, n, f0, f1, sign) {\n if(n === 0) return f0;\n if(n === 1) return f1;\n var tdx = 2 / x, f2 = f1;\n for(var o = 1; o < n; ++o) {\n f2 = f1 * o * tdx + sign * f0;\n f0 = f1; f1 = f2;\n }\n return f2;\n}\nfunction _bessel_wrap(bessel0, bessel1, name, nonzero, sign) {\n return function bessel(x,n) {\n if(nonzero) {\n if(x === 0) return (nonzero == 1 ? -Infinity : Infinity);\n else if(x < 0) return NaN;\n }\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(n < 0) return NaN;\n n|=0;\n var b0 = bessel0(x), b1 = bessel1(x);\n return _bessel_iter(x, n, b0, b1, sign);\n };\n}\nvar besselj = (function() {\n var W = 0.636619772; // 2 / Math.PI\n\n var b0_a1a = [57568490574.0, -13362590354.0, 651619640.7, -11214424.18, 77392.33017, -184.9052456].reverse();\n var b0_a2a = [57568490411.0, 1029532985.0, 9494680.718, 59272.64853, 267.8532712, 1.0].reverse();\n var b0_a1b = [1.0, -0.1098628627e-2, 0.2734510407e-4, -0.2073370639e-5, 0.2093887211e-6].reverse();\n var b0_a2b = [-0.1562499995e-1, 0.1430488765e-3, -0.6911147651e-5, 0.7621095161e-6, -0.934935152e-7].reverse();\n\n function bessel0(x) {\n var a=0, a1=0, a2=0, y = x * x;\n if(x < 8) {\n a1 = _horner(b0_a1a, y);\n a2 = _horner(b0_a2a, y);\n a = a1 / a2;\n } else {\n var xx = x - 0.785398164;\n y = 64 / y;\n a1 = _horner(b0_a1b, y);\n a2 = _horner(b0_a2b, y);\n a = M.sqrt(W/x)*(M.cos(xx)*a1-M.sin(xx)*a2*8/x);\n }\n return a;\n }\n\n var b1_a1a = [72362614232.0, -7895059235.0, 242396853.1, -2972611.439, 15704.48260, -30.16036606].reverse();\n var b1_a2a = [144725228442.0, 2300535178.0, 18583304.74, 99447.43394, 376.9991397, 1.0].reverse();\n var b1_a1b = [1.0, 0.183105e-2, -0.3516396496e-4, 0.2457520174e-5, -0.240337019e-6].reverse();\n var b1_a2b = [0.04687499995, -0.2002690873e-3, 0.8449199096e-5, -0.88228987e-6, 0.105787412e-6].reverse();\n\n function bessel1(x) {\n var a=0, a1=0, a2=0, y = x*x, xx = M.abs(x) - 2.356194491;\n if(Math.abs(x)< 8) {\n a1 = x*_horner(b1_a1a, y);\n a2 = _horner(b1_a2a, y);\n a = a1 / a2;\n } else {\n y = 64 / y;\n a1=_horner(b1_a1b, y);\n a2=_horner(b1_a2b, y);\n a=M.sqrt(W/M.abs(x))*(M.cos(xx)*a1-M.sin(xx)*a2*8/M.abs(x));\n if(x < 0) a = -a;\n }\n return a;\n }\n\n return function besselj(x, n) {\n n = Math.round(n);\n if(!isFinite(x)) return isNaN(x) ? x : 0;\n if(n < 0) return ((n%2)?-1:1)*besselj(x, -n);\n if(x < 0) return ((n%2)?-1:1)*besselj(-x, n);\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(x === 0) return 0;\n\n var ret=0.0;\n if(x > n) {\n ret = _bessel_iter(x, n, bessel0(x), bessel1(x),-1);\n } else {\n var m=2*M.floor((n+M.floor(M.sqrt(40*n)))/2);\n var jsum=false;\n var bjp=0.0, sum=0.0;\n var bj=1.0, bjm = 0.0;\n var tox = 2 / x;\n for (var j=m;j>0;j--) {\n bjm=j*tox*bj-bjp;\n bjp=bj;\n bj=bjm;\n if (M.abs(bj) > 1E10) {\n bj *= 1E-10;\n bjp *= 1E-10;\n ret *= 1E-10;\n sum *= 1E-10;\n }\n if (jsum) sum += bj;\n jsum=!jsum;\n if (j == n) ret=bjp;\n }\n sum=2.0*sum-bj;\n ret /= sum;\n }\n return ret;\n };\n})();\nvar bessely = (function() {\n var W = 0.636619772;\n\n var b0_a1a = [-2957821389.0, 7062834065.0, -512359803.6, 10879881.29, -86327.92757, 228.4622733].reverse();\n var b0_a2a = [40076544269.0, 745249964.8, 7189466.438, 47447.26470, 226.1030244, 1.0].reverse();\n var b0_a1b = [1.0, -0.1098628627e-2, 0.2734510407e-4, -0.2073370639e-5, 0.2093887211e-6].reverse();\n var b0_a2b = [-0.1562499995e-1, 0.1430488765e-3, -0.6911147651e-5, 0.7621095161e-6, -0.934945152e-7].reverse();\n\n function bessel0(x) {\n var a=0, a1=0, a2=0, y = x * x, xx = x - 0.785398164;\n if(x < 8) {\n a1 = _horner(b0_a1a, y);\n a2 = _horner(b0_a2a, y);\n a = a1/a2 + W * besselj(x,0) * M.log(x);\n } else {\n y = 64 / y;\n a1 = _horner(b0_a1b, y);\n a2 = _horner(b0_a2b, y);\n a = M.sqrt(W/x)*(M.sin(xx)*a1+M.cos(xx)*a2*8/x);\n }\n return a;\n }\n\n var b1_a1a = [-0.4900604943e13, 0.1275274390e13, -0.5153438139e11, 0.7349264551e9, -0.4237922726e7, 0.8511937935e4].reverse();\n var b1_a2a = [0.2499580570e14, 0.4244419664e12, 0.3733650367e10, 0.2245904002e8, 0.1020426050e6, 0.3549632885e3, 1].reverse();\n var b1_a1b = [1.0, 0.183105e-2, -0.3516396496e-4, 0.2457520174e-5, -0.240337019e-6].reverse();\n var b1_a2b = [0.04687499995, -0.2002690873e-3, 0.8449199096e-5, -0.88228987e-6, 0.105787412e-6].reverse();\n\n function bessel1(x) {\n var a=0, a1=0, a2=0, y = x*x, xx = x - 2.356194491;\n if(x < 8) {\n a1 = x*_horner(b1_a1a, y);\n a2 = _horner(b1_a2a, y);\n a = a1/a2 + W * (besselj(x,1) * M.log(x) - 1 / x);\n } else {\n y = 64 / y;\n a1=_horner(b1_a1b, y);\n a2=_horner(b1_a2b, y);\n a=M.sqrt(W/x)*(M.sin(xx)*a1+M.cos(xx)*a2*8/x);\n }\n return a;\n }\n\n return _bessel_wrap(bessel0, bessel1, 'BESSELY', 1, -1);\n})();\nvar besseli = (function() {\n var b0_a = [1.0, 3.5156229, 3.0899424, 1.2067492, 0.2659732, 0.360768e-1, 0.45813e-2].reverse();\n var b0_b = [0.39894228, 0.1328592e-1, 0.225319e-2, -0.157565e-2, 0.916281e-2, -0.2057706e-1, 0.2635537e-1, -0.1647633e-1, 0.392377e-2].reverse();\n\n function bessel0(x) {\n if(x <= 3.75) return _horner(b0_a, x*x/(3.75*3.75));\n return M.exp(M.abs(x))/M.sqrt(M.abs(x))*_horner(b0_b, 3.75/M.abs(x));\n }\n\n var b1_a = [0.5, 0.87890594, 0.51498869, 0.15084934, 0.2658733e-1, 0.301532e-2, 0.32411e-3].reverse();\n var b1_b = [0.39894228, -0.3988024e-1, -0.362018e-2, 0.163801e-2, -0.1031555e-1, 0.2282967e-1, -0.2895312e-1, 0.1787654e-1, -0.420059e-2].reverse();\n\n function bessel1(x) {\n if(x < 3.75) return x * _horner(b1_a, x*x/(3.75*3.75));\n return (x < 0 ? -1 : 1) * M.exp(M.abs(x))/M.sqrt(M.abs(x))*_horner(b1_b, 3.75/M.abs(x));\n }\n\n return function besseli(x, n) {\n n = Math.round(n);\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(n < 0) return NaN;\n if(M.abs(x) === 0) return 0;\n if(x == Infinity) return Infinity;\n\n var ret = 0.0, j, tox = 2 / M.abs(x), bip = 0.0, bi=1.0, bim=0.0;\n var m=2*M.round((n+M.round(M.sqrt(40*n)))/2);\n for (j=m;j>0;j--) {\n bim=j*tox*bi + bip;\n bip=bi; bi=bim;\n if (M.abs(bi) > 1E10) {\n bi *= 1E-10;\n bip *= 1E-10;\n ret *= 1E-10;\n }\n if(j == n) ret = bip;\n }\n ret *= besseli(x, 0) / bi;\n return x < 0 && (n%2) ? -ret : ret;\n };\n\n})();\n\nvar besselk = (function() {\n var b0_a = [-0.57721566, 0.42278420, 0.23069756, 0.3488590e-1, 0.262698e-2, 0.10750e-3, 0.74e-5].reverse();\n var b0_b = [1.25331414, -0.7832358e-1, 0.2189568e-1, -0.1062446e-1, 0.587872e-2, -0.251540e-2, 0.53208e-3].reverse();\n\n function bessel0(x) {\n if(x <= 2) return -M.log(x/2) * besseli(x,0) + _horner(b0_a, x*x/4);\n return M.exp(-x) / M.sqrt(x) * _horner(b0_b, 2/x);\n }\n\n var b1_a = [1.0, 0.15443144, -0.67278579, -0.18156897, -0.1919402e-1, -0.110404e-2, -0.4686e-4].reverse();\n var b1_b = [1.25331414, 0.23498619, -0.3655620e-1, 0.1504268e-1, -0.780353e-2, 0.325614e-2, -0.68245e-3].reverse();\n\n function bessel1(x) {\n if(x <= 2) return M.log(x/2) * besseli(x,1) + (1/x) * _horner(b1_a, x*x/4);\n return M.exp(-x)/M.sqrt(x)*_horner(b1_b, 2/x);\n }\n\n return _bessel_wrap(bessel0, bessel1, 'BESSELK', 2, 1);\n})();\nBESSEL.besselj = besselj;\nBESSEL.bessely = bessely;\nBESSEL.besseli = besseli;\nBESSEL.besselk = besselk;\n}));\n","import * as Y from 'yjs'\nimport type { Sheet } from '@speed-sheet/core'\nimport { SheetState, buildIdIndexes } from '@speed-sheet/core'\nimport { depKey } from '@speed-sheet/shared'\n\nexport interface FormulaContext {\n readonly activeSheetId: string\n resolveSheetId(nameOrId: string | undefined): string | null\n getSheetName(sheetId: string): string\n resolveCellIds(sheetId: string, r: number, c: number): { rowId: string; colId: string } | null\n idsToDisplay(sheetId: string, rowId: string, colId: string): { r: number; c: number } | null\n expandIdRange(\n sheetId: string,\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n ): Array<{ rowId: string; colId: string }>\n /** Scalar by stable ids (canonical for evaluation). */\n getScalarById(\n sheetId: string,\n rowId: string,\n colId: string,\n visiting: Set<string>,\n ): number | string | boolean | null\n /** Display-coordinate scalar (A1 boundary only). */\n getScalar(sheetId: string, r: number, c: number, visiting: Set<string>): number | string | boolean | null\n}\n\nfunction getSheetState(sheetsMap: Y.Map<unknown>, sheetId: string): SheetState | null {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) return null\n return new SheetState(ySheet)\n}\n\nexport function createFormulaContext(sheet: Sheet): FormulaContext {\n const ydoc = sheet.ydoc\n const sheetsMap = ydoc.getMap('sheets')\n\n return {\n activeSheetId: sheet.getActiveSheetId(),\n\n getSheetName(sheetId: string): string {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n return (ySheet?.get('name') as string) ?? sheetId\n },\n\n resolveSheetId(nameOrId: string | undefined): string | null {\n if (!nameOrId) return sheet.getActiveSheetId()\n if (sheetsMap.has(nameOrId)) return nameOrId\n for (const id of sheet.getSheetIds()) {\n const ySheet = sheetsMap.get(id) as Y.Map<unknown> | undefined\n const name = ySheet?.get('name') as string | undefined\n if (name === nameOrId) return id\n }\n return null\n },\n\n resolveCellIds(sheetId: string, r: number, c: number): { rowId: string; colId: string } | null {\n const state = getSheetState(sheetsMap, sheetId)\n return state?.resolveCellIds(r, c) ?? null\n },\n\n idsToDisplay(sheetId: string, rowId: string, colId: string): { r: number; c: number } | null {\n const state = getSheetState(sheetsMap, sheetId)\n if (!state) return null\n const { rowIndex, colIndex } = buildIdIndexes(state.rowOrder, state.colOrder)\n const r = rowIndex.get(rowId)\n const c = colIndex.get(colId)\n if (r === undefined || c === undefined) return null\n return { r, c }\n },\n\n expandIdRange(\n sheetId: string,\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n ): Array<{ rowId: string; colId: string }> {\n const state = getSheetState(sheetsMap, sheetId)\n if (!state) return []\n const { rowIndex, colIndex } = buildIdIndexes(state.rowOrder, state.colOrder)\n const r0 = rowIndex.get(rowId0)\n const c0 = colIndex.get(colId0)\n const r1 = rowIndex.get(rowId1)\n const c1 = colIndex.get(colId1)\n if (r0 === undefined || c0 === undefined || r1 === undefined || c1 === undefined) return []\n\n const out: Array<{ rowId: string; colId: string }> = []\n const ra = Math.min(r0, r1)\n const rb = Math.max(r0, r1)\n const ca = Math.min(c0, c1)\n const cb = Math.max(c0, c1)\n for (let r = ra; r <= rb; r++) {\n for (let c = ca; c <= cb; c++) {\n const rowId = state.rowOrder.get(r)\n const colId = state.colOrder.get(c)\n if (rowId && colId) out.push({ rowId, colId })\n }\n }\n return out\n },\n\n getScalarById(\n sheetId: string,\n rowId: string,\n colId: string,\n visiting: Set<string>,\n ): number | string | boolean | null {\n const visitKey = depKey(sheetId, rowId, colId)\n if (visiting.has(visitKey)) return null\n\n const state = getSheetState(sheetsMap, sheetId)\n if (!state) return null\n\n const { rowIndex, colIndex } = buildIdIndexes(state.rowOrder, state.colOrder)\n const r = rowIndex.get(rowId)\n const c = colIndex.get(colId)\n if (r === undefined || c === undefined) return null\n\n const data = state.getCellData(r, c)\n if (!data) return null\n const v = data.v\n if (v === null || v === undefined) return null\n return v\n },\n\n getScalar(\n sheetId: string,\n r: number,\n c: number,\n visiting: Set<string>,\n ): number | string | boolean | null {\n const ids = this.resolveCellIds(sheetId, r, c)\n if (!ids) return null\n return this.getScalarById(sheetId, ids.rowId, ids.colId, visiting)\n },\n }\n}\n\nexport function scalarToDisplay(v: number | string | boolean | null): string {\n if (v === null) return ''\n if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE'\n return String(v)\n}\n\nexport function coerceNumber(v: number | string | boolean | null): number {\n if (v === null || v === '') return 0\n if (typeof v === 'boolean') return v ? 1 : 0\n const n = Number(v)\n return Number.isFinite(n) ? n : 0\n}\n\nexport function collectRangeScalars(\n ctx: FormulaContext,\n sheetId: string,\n row: [number, number],\n column: [number, number],\n visiting: Set<string>,\n): number[] {\n const out: number[] = []\n for (let r = row[0]; r <= row[1]; r++) {\n for (let c = column[0]; c <= column[1]; c++) {\n out.push(coerceNumber(ctx.getScalar(sheetId, r, c, visiting)))\n }\n }\n return out\n}\n\nexport function collectIdRangeScalars(\n ctx: FormulaContext,\n sheetId: string,\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n visiting: Set<string>,\n): number[] {\n const cells = ctx.expandIdRange(sheetId, rowId0, colId0, rowId1, colId1)\n return cells.map(({ rowId, colId }) =>\n coerceNumber(ctx.getScalarById(sheetId, rowId, colId, visiting)),\n )\n}\n","/** Excel 风格公式错误(显示值 + 提示文案) */\n\nexport type FormulaErrorCode =\n | 'ERROR'\n | 'VALUE'\n | 'NAME'\n | 'REF'\n | 'DIV0'\n | 'NA'\n | 'NUM'\n | 'NULL'\n\nexport interface FormulaErrorDef {\n code: FormulaErrorCode\n /** 单元格显示,如 #VALUE! */\n display: string\n /** 悬停提示(中文) */\n message: string\n}\n\nexport const FORMULA_ERRORS: Record<FormulaErrorCode, FormulaErrorDef> = {\n ERROR: {\n code: 'ERROR',\n display: '#ERROR!',\n message: '公式解析错误',\n },\n VALUE: {\n code: 'VALUE',\n display: '#VALUE!',\n message: '值类型错误:运算或函数参数类型不匹配(例如数字与文本相加)',\n },\n NAME: {\n code: 'NAME',\n display: '#NAME?',\n message: '无法识别名称:函数名拼写错误、文本未加双引号,或工作表名引用不正确',\n },\n REF: {\n code: 'REF',\n display: '#REF!',\n message: '无效引用:引用的单元格、区域或工作表不存在',\n },\n DIV0: {\n code: 'DIV0',\n display: '#DIV/0!',\n message: '除数为零:公式中除以 0 或空单元格',\n },\n NA: {\n code: 'NA',\n display: '#N/A',\n message: '找不到匹配值:查找或匹配函数未找到对应数据',\n },\n NUM: {\n code: 'NUM',\n display: '#NUM!',\n message: '数值错误:结果超出可计算范围或数值不合法',\n },\n NULL: {\n code: 'NULL',\n display: '#NULL!',\n message: '空交集错误:区域引用之间使用了空格而非逗号或冒号',\n },\n}\n\nconst ERROR_DISPLAY_SET = new Set(\n Object.values(FORMULA_ERRORS).map((e) => e.display),\n)\n\nexport function formulaErrorResult(code: FormulaErrorCode): {\n value: null\n m: string\n error: FormulaErrorCode\n errorMessage: string\n} {\n const def = FORMULA_ERRORS[code]\n return {\n value: null,\n m: def.display,\n error: def.code,\n errorMessage: def.message,\n }\n}\n\nexport function isFormulaErrorDisplay(text: string): boolean {\n return ERROR_DISPLAY_SET.has(text.trim())\n}\n\nexport function getFormulaErrorMessage(\n code: string | undefined,\n fallback?: string,\n): string {\n if (code && code in FORMULA_ERRORS) {\n return FORMULA_ERRORS[code as FormulaErrorCode].message\n }\n return fallback ?? FORMULA_ERRORS.ERROR.message\n}\n","import { AXIS_ID_PATTERN } from '@speed-sheet/shared'\n\nconst ID = AXIS_ID_PATTERN\nconst INTERNAL_REF_FULL_RE = new RegExp(\n `#(?:@[^|#]+\\\\|)?${ID}:${ID}(?:~${ID}:${ID})?#`,\n 'g',\n)\n\n/** Ranges of `#r_…:c_…#` tokens — A1 scanners must not match inside these. */\nexport function getInternalRefRanges(formula: string): Array<{ start: number; end: number }> {\n const ranges: Array<{ start: number; end: number }> = []\n INTERNAL_REF_FULL_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = INTERNAL_REF_FULL_RE.exec(formula)) !== null) {\n ranges.push({ start: m.index, end: m.index + m[0].length })\n }\n return ranges\n}\n\nexport function overlapsInternalRef(formula: string, start: number, end: number): boolean {\n for (const r of getInternalRefRanges(formula)) {\n if (start < r.end && end > r.start) return true\n }\n return false\n}\n\nexport function hasInternalRefs(formula: string): boolean {\n INTERNAL_REF_FULL_RE.lastIndex = 0\n return INTERNAL_REF_FULL_RE.test(formula)\n}\n\nexport function extractInternalRefTokens(formula: string): string[] {\n const tokens: string[] = []\n INTERNAL_REF_FULL_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = INTERNAL_REF_FULL_RE.exec(formula)) !== null) {\n tokens.push(m[0])\n }\n return tokens\n}\n","/** A1 风格引用解析(与 Excel / Luckysheet 子集对齐) */\n\nexport interface CellAddress {\n r: number\n c: number\n}\n\nexport interface RangeAddress {\n row: [number, number]\n column: [number, number]\n}\n\nexport interface SheetRef {\n /** 工作表名(展示名)或 id */\n sheet?: string\n cell?: CellAddress\n range?: RangeAddress\n}\n\n/** 列字母 → 0-based 列号 */\nexport function letterToCol(letters: string): number {\n let n = 0\n const s = letters.toUpperCase()\n for (let i = 0; i < s.length; i++) {\n n = n * 26 + (s.charCodeAt(i) - 64)\n }\n return n - 1\n}\n\nexport function colToLetter(c: number): string {\n let s = ''\n let n = c\n do {\n s = String.fromCharCode(65 + (n % 26)) + s\n n = Math.floor(n / 26) - 1\n } while (n >= 0)\n return s\n}\n\nexport function formatA1(r: number, c: number): string {\n return `${colToLetter(c)}${r + 1}`\n}\n\n/** 解析 A1 或 A1:B10 */\nexport function parseRefToken(token: string): SheetRef | null {\n const trimmed = token.trim()\n if (!trimmed) return null\n\n let sheet: string | undefined\n let local = trimmed\n\n const bang = trimmed.indexOf('!')\n if (bang >= 0) {\n let sheetPart = trimmed.slice(0, bang)\n if (sheetPart.startsWith(\"'\") && sheetPart.endsWith(\"'\")) {\n sheetPart = sheetPart.slice(1, -1)\n }\n sheet = sheetPart\n local = trimmed.slice(bang + 1)\n }\n\n const rangeMatch = /^([A-Za-z]+)(\\d+):([A-Za-z]+)(\\d+)$/.exec(local)\n if (rangeMatch) {\n const r0 = Number(rangeMatch[2]) - 1\n const c0 = letterToCol(rangeMatch[1])\n const r1 = Number(rangeMatch[4]) - 1\n const c1 = letterToCol(rangeMatch[3])\n return {\n sheet,\n range: {\n row: [Math.min(r0, r1), Math.max(r0, r1)],\n column: [Math.min(c0, c1), Math.max(c0, c1)],\n },\n }\n }\n\n const cellMatch = /^([A-Za-z]+)(\\d+)$/.exec(local)\n if (cellMatch) {\n return {\n sheet,\n cell: {\n r: Number(cellMatch[2]) - 1,\n c: letterToCol(cellMatch[1]),\n },\n }\n }\n\n return null\n}\n\nimport { overlapsInternalRef } from './internal-ref-scan'\n\n/** 从公式文本中提取全部 A1 引用 token(跳过 `#r_…:c_…#` 内部区域) */\nexport function extractRefTokens(formula: string): string[] {\n const tokens: string[] = []\n const re =\n /(?:'[^']+'|[\\w\\u4e00-\\u9fff\\u3400-\\u9fff]+!)?[A-Za-z]{1,4}\\d+(?::[A-Za-z]{1,4}\\d+)?/g\n let m: RegExpExecArray | null\n while ((m = re.exec(formula)) !== null) {\n const start = m.index\n const end = start + m[0].length\n if (overlapsInternalRef(formula, start, end)) continue\n tokens.push(m[0])\n }\n return tokens\n}\n","/**\n * Formula semantic bindings: stable rowId/colId in storage, A1 for display only.\n *\n * Internal cell ref: #r_<nanoid>:c_<nanoid>#\n * Internal range: #r_<nanoid>:c_<nanoid>~r_<nanoid>:c_<nanoid>#\n * Cross-sheet cell: #@sheetId|r_<nanoid>:c_<nanoid>#\n */\nimport { AXIS_ID_PATTERN } from '@speed-sheet/shared'\nimport type { FormulaContext } from './context'\nimport {\n extractInternalRefTokens,\n hasInternalRefs,\n} from './internal-ref-scan'\nimport { extractRefTokens, formatA1, parseRefToken } from './refs'\n\nexport { extractInternalRefTokens, hasInternalRefs } from './internal-ref-scan'\n\nconst ID = AXIS_ID_PATTERN\n\nexport function formatInternalCellRef(rowId: string, colId: string, sheetId?: string): string {\n if (sheetId) return `#@${sheetId}|${rowId}:${colId}#`\n return `#${rowId}:${colId}#`\n}\n\nexport function formatInternalRangeRef(\n rowId0: string,\n colId0: string,\n rowId1: string,\n colId1: string,\n sheetId?: string,\n): string {\n if (sheetId) return `#@${sheetId}|${rowId0}:${colId0}~${rowId1}:${colId1}#`\n return `#${rowId0}:${colId0}~${rowId1}:${colId1}#`\n}\n\nexport interface InternalRef {\n sheetId?: string\n rowId: string\n colId: string\n endRowId?: string\n endColId?: string\n}\n\nexport function parseInternalRefToken(token: string): InternalRef | null {\n const range = new RegExp(`^#(?:@([^|#]+)\\\\|)?(${ID}):(${ID})~(${ID}):(${ID})#$`).exec(token)\n if (range) {\n return {\n sheetId: range[1],\n rowId: range[2]!,\n colId: range[3]!,\n endRowId: range[4]!,\n endColId: range[5]!,\n }\n }\n const cell = new RegExp(`^#(?:@([^|#]+)\\\\|)?(${ID}):(${ID})#$`).exec(token)\n if (cell) {\n return { sheetId: cell[1], rowId: cell[2]!, colId: cell[3]! }\n }\n return null\n}\n\nfunction resolveIdsForA1(\n ctx: FormulaContext,\n sheetId: string,\n r: number,\n c: number,\n): { rowId: string; colId: string } | null {\n return ctx.resolveCellIds(sheetId, r, c)\n}\n\nfunction a1RefToInternal(\n ctx: FormulaContext,\n defaultSheetId: string,\n token: string,\n): string | null {\n const ref = parseRefToken(token)\n if (!ref) return null\n\n const sheetResolved = ref.sheet ? ctx.resolveSheetId(ref.sheet) : defaultSheetId\n if (!sheetResolved) return null\n\n if (ref.range) {\n const a = resolveIdsForA1(ctx, sheetResolved, ref.range.row[0], ref.range.column[0])\n const b = resolveIdsForA1(ctx, sheetResolved, ref.range.row[1], ref.range.column[1])\n if (!a || !b) return null\n const cross = sheetResolved !== defaultSheetId ? sheetResolved : undefined\n return formatInternalRangeRef(a.rowId, a.colId, b.rowId, b.colId, cross)\n }\n\n if (ref.cell) {\n const ids = resolveIdsForA1(ctx, sheetResolved, ref.cell.r, ref.cell.c)\n if (!ids) return null\n const cross = sheetResolved !== defaultSheetId ? sheetResolved : undefined\n return formatInternalCellRef(ids.rowId, ids.colId, cross)\n }\n\n return null\n}\n\n/** User-facing A1 formula → canonical internal formula (stored in `f`). */\nexport function displayFormulaToInternal(\n displayFormula: string,\n ctx: FormulaContext,\n defaultSheetId: string,\n): string {\n const text = displayFormula.trim()\n if (!text.startsWith('=')) return text\n\n let out = text\n const tokens = [...extractRefTokens(text)].sort((a, b) => b.length - a.length)\n for (const token of tokens) {\n const internal = a1RefToInternal(ctx, defaultSheetId, token)\n if (internal) out = out.split(token).join(internal)\n }\n return out\n}\n\nfunction internalRefToA1(ctx: FormulaContext, ref: InternalRef, defaultSheetId: string): string | null {\n const sheetId = ref.sheetId ?? defaultSheetId\n\n const toA1 = (rowId: string, colId: string): string | null => {\n const pos = ctx.idsToDisplay(sheetId, rowId, colId)\n if (!pos) return null\n return formatA1(pos.r, pos.c)\n }\n\n if (ref.endRowId != null && ref.endColId != null) {\n const a = toA1(ref.rowId, ref.colId)\n const b = toA1(ref.endRowId, ref.endColId)\n if (!a || !b) return null\n const local = a === b ? a : `${a}:${b}`\n if (ref.sheetId && ref.sheetId !== defaultSheetId) {\n const name = ctx.getSheetName(ref.sheetId)\n return `'${name.replace(/'/g, \"''\")}'!${local}`\n }\n return local\n }\n\n const a = toA1(ref.rowId, ref.colId)\n if (!a) return null\n if (ref.sheetId && ref.sheetId !== defaultSheetId) {\n const name = ctx.getSheetName(ref.sheetId)\n return `'${name.replace(/'/g, \"''\")}'!${a}`\n }\n return a\n}\n\n/** Stored internal formula → formula-bar A1 display. */\nexport function internalFormulaToDisplay(\n internalFormula: string,\n ctx: FormulaContext,\n defaultSheetId: string,\n): string {\n const text = internalFormula.trim()\n if (!text.startsWith('=')) return text\n if (!hasInternalRefs(text)) return text\n\n let out = text\n const tokens = [...extractInternalRefTokens(text)].sort((a, b) => b.length - a.length)\n for (const token of tokens) {\n const ref = parseInternalRefToken(token)\n if (!ref) continue\n const a1 = internalRefToA1(ctx, ref, defaultSheetId)\n if (a1) out = out.split(token).join(a1)\n }\n return out\n}\n","import jStat from 'jstat';\nimport bessel from 'bessel';\n\nconst nil = new Error('#NULL!');\nconst div0 = new Error('#DIV/0!');\nconst value = new Error('#VALUE!');\nconst ref = new Error('#REF!');\nconst name = new Error('#NAME?');\nconst num = new Error('#NUM!');\nconst na = new Error('#N/A');\nconst error = new Error('#ERROR!');\nconst data = new Error('#GETTING_DATA');\nconst calc = new Error('#CALC!');\n\nvar errors = /*#__PURE__*/Object.freeze({\n __proto__: null,\n calc: calc,\n data: data,\n div0: div0,\n error: error,\n na: na,\n name: name,\n nil: nil,\n num: num,\n ref: ref,\n value: value\n});\n\nlet returnSerial = false;\n\nfunction useSerial() {\n returnSerial = true;\n}\n\nfunction useDate() {\n returnSerial = false;\n}\n\nfunction serialToDate(serial) {\n if (serial < 60) {\n serial += 1;\n }\n\n const utc_days = Math.floor(serial - 25569);\n const utc_value = utc_days * 86400;\n const date_info = new Date(utc_value * 1000);\n const fractional_day = serial - Math.floor(serial) + 0.0000001;\n\n let total_seconds = Math.floor(86400 * fractional_day);\n\n const seconds = total_seconds % 60;\n\n total_seconds -= seconds;\n\n const hours = Math.floor(total_seconds / (60 * 60));\n const minutes = Math.floor(total_seconds / 60) % 60;\n let days = date_info.getUTCDate();\n let month = date_info.getUTCMonth();\n\n if (serial >= 60 && serial < 61) {\n days = 29;\n month = 1;\n }\n\n return new Date(date_info.getUTCFullYear(), month, days, hours, minutes, seconds)\n}\n\nfunction dateToSerial(date) {\n const d1900 = new Date(1900, 0, 1);\n\n const addOn = date > -22038912e5 ? 2 : 1;\n\n return Math.ceil((date - d1900) / 86400000) + addOn\n}\n\nvar date = /*#__PURE__*/Object.freeze({\n __proto__: null,\n dateToSerial: dateToSerial,\n get returnSerial () { return returnSerial; },\n serialToDate: serialToDate,\n useDate: useDate,\n useSerial: useSerial\n});\n\nconst defaultOperator = '=';\nconst validSymbols = ['>', '>=', '<', '<=', '=', '<>'];\nconst _TOKEN_TYPE_OPERATOR = 'operator';\nconst _TOKEN_TYPE_LITERAL = 'literal';\nconst SUPPORTED_TOKENS = [_TOKEN_TYPE_OPERATOR, _TOKEN_TYPE_LITERAL];\n\nconst TOKEN_TYPE_OPERATOR = _TOKEN_TYPE_OPERATOR;\nconst TOKEN_TYPE_LITERAL = _TOKEN_TYPE_LITERAL;\n\n/**\n * Create token which describe passed symbol/value.\n *\n * @param {String} value Value/Symbol to describe.\n * @param {String} type Type of the token 'operator' or 'literal'.\n * @return {Object}\n */\nfunction createToken(value, type) {\n if (SUPPORTED_TOKENS.indexOf(type) === -1) {\n throw new Error('Unsupported token type: ' + type)\n }\n\n return {\n value: value,\n type: type\n }\n}\n\n/**\n * Tries to cast numeric values to their type passed as a string.\n *\n * @param {*} value\n * @return {*}\n */\nfunction castValueToCorrectType(value) {\n if (typeof value !== 'string') {\n return value\n }\n\n if (/^\\d+(\\.\\d+)?$/.test(value)) {\n value = value.indexOf('.') === -1 ? parseInt(value, 10) : parseFloat(value);\n }\n\n return value\n}\n\n/**\n * Generate stream of tokens from passed expression.\n *\n * @param {String} expression\n * @return {String[]}\n */\nfunction tokenizeExpression(expression) {\n const expressionLength = expression.length;\n const tokens = [];\n let cursorIndex = 0;\n let processedValue = '';\n let processedSymbol = '';\n\n while (cursorIndex < expressionLength) {\n const char = expression.charAt(cursorIndex);\n\n switch (char) {\n case '>':\n case '<':\n case '=':\n processedSymbol = processedSymbol + char;\n\n if (processedValue.length > 0) {\n tokens.push(processedValue);\n processedValue = '';\n }\n\n break\n default:\n if (processedSymbol.length > 0) {\n tokens.push(processedSymbol);\n processedSymbol = '';\n }\n\n processedValue = processedValue + char;\n break\n }\n\n cursorIndex++;\n }\n\n if (processedValue.length > 0) {\n tokens.push(processedValue);\n }\n\n if (processedSymbol.length > 0) {\n tokens.push(processedSymbol);\n }\n\n return tokens\n}\n\n/**\n * Analyze and convert tokens to an object which describes their meaning.\n *\n * @param {String[]} tokens\n * @return {Object[]}\n */\nfunction analyzeTokens(tokens) {\n let literalValue = '';\n const analyzedTokens = [];\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (i === 0 && validSymbols.indexOf(token) >= 0) {\n analyzedTokens.push(createToken(token, TOKEN_TYPE_OPERATOR));\n } else {\n literalValue += token;\n }\n }\n\n if (literalValue.length > 0) {\n analyzedTokens.push(createToken(castValueToCorrectType(literalValue), TOKEN_TYPE_LITERAL));\n }\n\n if (analyzedTokens.length > 0 && analyzedTokens[0].type !== TOKEN_TYPE_OPERATOR) {\n analyzedTokens.unshift(createToken(defaultOperator, TOKEN_TYPE_OPERATOR));\n }\n\n return analyzedTokens\n}\n\n/**\n * Compute/Evaluate an expression passed as an array of tokens.\n *\n * @param {Object[]} tokens\n * @return {Boolean}\n */\nfunction computeExpression(tokens) {\n const values = [];\n let operator;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n switch (token.type) {\n case TOKEN_TYPE_OPERATOR:\n operator = token.value;\n break\n case TOKEN_TYPE_LITERAL:\n values.push(token.value);\n break\n }\n }\n\n return evaluate(values, operator)\n}\n\n/**\n * Evaluate values based on passed math operator.\n *\n * @param {*} values\n * @param {String} operator\n * @return {Boolean}\n */\nfunction evaluate(values, operator) {\n let result = false;\n\n switch (operator) {\n case '>':\n result = values[0] > values[1];\n break\n case '>=':\n result = values[0] >= values[1];\n break\n case '<':\n result = values[0] < values[1];\n break\n case '<=':\n result = values[0] <= values[1];\n break\n case '=':\n result = values[0] == values[1];\n break\n case '<>':\n result = values[0] != values[1];\n break\n }\n\n return result\n}\n\nfunction parse(expression) {\n return analyzeTokens(tokenizeExpression(expression))\n}\n\nconst compute = computeExpression;\n\n// Arrays\nfunction argsToArray(args) {\n const result = [];\n\n arrayEach(args, (value) => {\n result.push(value);\n });\n\n return result\n}\n\nfunction arrayEach(array, iteratee) {\n let index = -1;\n const length = array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break\n }\n }\n\n return array\n}\n\nfunction arrayValuesToNumbers(arr) {\n let n = arr.length;\n let el;\n\n while (n--) {\n el = arr[n];\n\n if (typeof el === 'number') {\n continue\n }\n\n if (el === true) {\n arr[n] = 1;\n continue\n }\n\n if (el === false) {\n arr[n] = 0;\n continue\n }\n\n if (typeof el === 'string') {\n const number = parseNumber(el);\n\n arr[n] = number instanceof Error ? 0 : number;\n }\n }\n\n return arr\n}\n\n/**\n * @param {any[][]} array Matrix input as 2-dim array\n * @returns {[ number, number ]} Returns matrix size as [ rowCount, columnCount ]\n */\nfunction getMatrixSize(array) {\n const rowSize = array.length;\n const columnSize = array.reduce((maxColSize, row) => {\n return Math.max(maxColSize, row.length)\n }, 0);\n return [rowSize, columnSize]\n}\n\n/**\n * Create new 2-dim array filled with undefined values\n * @param {Number} rowSize\n * @param {Number} columnSize\n * @returns {undefined[][]}\n */\nfunction createMatrix(rowSize, columnSize) {\n const sizeArgs = [rowSize, columnSize];\n if (sizeArgs.some((size) => !isDefined(size))) return na\n if (sizeArgs.some((size) => size <= 0)) return value\n\n return Array.from({ length: rowSize }, () => Array.from({ length: columnSize }, () => undefined))\n}\n\nfunction fillMatrix(matrix, fill_value) {\n if (!matrix) {\n return value\n }\n\n if (!matrix.every((el) => Array.isArray(el)) || matrix.length === 0) {\n matrix = [[...matrix]];\n }\n\n matrix.map((arr, i) => {\n arr.map((a, j) => {\n if (!a) {\n matrix[i][j] = 0;\n }\n });\n });\n\n const longestArrayIndex = matrix.reduce((acc, arr, i) => (arr.length > matrix[acc].length ? i : acc), 0);\n const longestArrayLength = matrix[longestArrayIndex].length;\n\n return matrix.map((el) => [...el, ...Array(longestArrayLength - el.length).fill(0)])\n}\n\nfunction flatten() {\n let result;\n\n if (arguments.length === 1) {\n const argument = arguments[0];\n result = isArrayLike(argument) ? argsToArray.apply(null, arguments) : [argument];\n } else {\n result = Array.from(arguments);\n }\n\n while (!isFlat(result)) {\n result = flattenShallow(result);\n }\n\n return result\n}\n\nfunction flattenShallow(array) {\n if (!array || !array.reduce) {\n return [array]\n }\n\n return array.reduce((a, b) => {\n const aIsArray = Array.isArray(a);\n const bIsArray = Array.isArray(b);\n\n if (aIsArray && bIsArray) {\n return a.concat(b)\n }\n\n if (aIsArray) {\n a.push(b);\n\n return a\n }\n\n if (bIsArray) {\n return [a].concat(b)\n }\n\n return [a, b]\n })\n}\n\nfunction initial(array, idx) {\n idx = idx || 1;\n\n if (!array || typeof array.slice !== 'function') {\n return array\n }\n\n return array.slice(0, array.length - idx)\n}\n\nfunction isArrayLike(a) {\n return a != null && typeof a.length === 'number' && typeof a !== 'string'\n}\n\nfunction isFlat(array) {\n if (!array) {\n return false\n }\n\n for (let i = 0; i < array.length; ++i) {\n if (Array.isArray(array[i])) {\n return false\n }\n }\n\n return true\n}\n\nfunction rest(array, idx) {\n idx = idx || 1;\n\n if (!array || typeof array.slice !== 'function') {\n return array\n }\n\n return array.slice(idx)\n}\n\nfunction transpose(matrix) {\n if (!matrix) {\n return value\n }\n\n return matrix[0].map((col, i) => matrix.map((row) => row[i]))\n}\n\n// Databases\nfunction findField(database, title) {\n let index = null;\n\n arrayEach(database, (value, i) => {\n if (value[0] === title) {\n index = i;\n\n return false\n }\n });\n\n // Return error if the input field title is incorrect\n if (index == null) {\n return value\n }\n\n return index\n}\n\n// Errors\nfunction anyError() {\n for (let n = 0; n < arguments.length; n++) {\n if (arguments[n] instanceof Error) {\n return arguments[n]\n }\n }\n\n return undefined\n}\n\nfunction anyIsError() {\n let n = arguments.length;\n\n while (n--) {\n if (arguments[n] instanceof Error) {\n return true\n }\n }\n\n return false\n}\n\n// Numbers\nfunction cleanFloat(number) {\n const power = 1e14;\n\n return Math.round(number * power) / power\n}\n\nfunction numbers() {\n const possibleNumbers = flatten.apply(null, arguments);\n\n return possibleNumbers.filter((el) => typeof el === 'number')\n}\n\n// Parsers\nfunction parseBool(bool) {\n if (typeof bool === 'boolean') {\n return bool\n }\n\n if (bool instanceof Error) {\n return bool\n }\n\n if (typeof bool === 'number') {\n return bool !== 0\n }\n\n if (typeof bool === 'string') {\n const up = bool.toUpperCase();\n\n if (up === 'TRUE') {\n return true\n }\n\n if (up === 'FALSE') {\n return false\n }\n }\n\n if (bool instanceof Date && !isNaN(bool)) {\n return true\n }\n\n return value\n}\n\nfunction parseDate(date) {\n if (!isNaN(date)) {\n if (date instanceof Date) {\n return new Date(date)\n }\n\n const d = parseFloat(date);\n\n if (d < 0 || d >= 2958466) {\n return num\n }\n\n return serialToDate(d)\n }\n\n if (typeof date === 'string') {\n date = /(\\d{4})-(\\d\\d?)-(\\d\\d?)$/.test(date) ? new Date(date + 'T00:00:00.000') : new Date(date);\n\n if (!isNaN(date)) {\n return date\n }\n }\n\n return value\n}\n\nfunction parseDateArray(arr) {\n let len = arr.length;\n let parsed;\n\n while (len--) {\n parsed = parseDate(arr[len]);\n\n if (parsed === value) {\n return parsed\n }\n\n arr[len] = parsed;\n }\n\n return arr\n}\n\nfunction parseNumber(string) {\n if (string instanceof Error) {\n return string\n }\n\n if (string === undefined || string === null) {\n return 0\n }\n\n if (typeof string === 'boolean') {\n string = +string;\n }\n\n if (!isNaN(string) && string !== '') {\n return parseFloat(string)\n }\n\n return value\n}\n\nfunction parseNumberArray(arr) {\n let len;\n\n if (!arr || (len = arr.length) === 0) {\n return value\n }\n\n let parsed;\n\n while (len--) {\n if (arr[len] instanceof Error) {\n return arr[len]\n }\n\n parsed = parseNumber(arr[len]);\n\n if (parsed instanceof Error) {\n return parsed\n }\n\n arr[len] = parsed;\n }\n\n return arr\n}\n\nfunction parseString(string) {\n if (string instanceof Error) {\n return string\n }\n\n if (string === undefined || string === null) {\n return ''\n }\n\n return string.toString()\n}\n\n// Strings\nfunction anyIsString() {\n let n = arguments.length;\n\n while (n--) {\n if (typeof arguments[n] === 'string') {\n return true\n }\n }\n\n return false\n}\n\n// Misc\n//Filters values from a given range based on multiple criteria.\n//Returns an array containing the values that satisfy all the specified criteria.\nfunction applyCriteria() {\n const args = argsToArray(arguments);\n const range = parseNumberArray(flatten(args.shift()));\n if (range instanceof Error) {\n return range\n }\n\n const criterias = args;\n const criteriaLength = criterias.length / 2;\n\n for (let i = 0; i < criteriaLength; i++) {\n criterias[i * 2] = flatten(criterias[i * 2]);\n }\n\n let values = [];\n\n for (let i = 0; i < range.length; i++) {\n let isMetCondition = false;\n\n for (let j = 0; j < criteriaLength; j++) {\n const valueToTest = criterias[j * 2][i];\n const criteria = criterias[j * 2 + 1];\n const isWildcard = criteria === void 0 || criteria === '*';\n let computedResult = false;\n\n if (isWildcard) {\n computedResult = true;\n } else {\n const tokenizedCriteria = parse(criteria + '');\n const tokens = [createToken(valueToTest, TOKEN_TYPE_LITERAL)].concat(\n tokenizedCriteria\n );\n\n computedResult = compute(tokens);\n }\n\n // Criterias are calculated as AND so any `false` breaks the loop as unmeet condition\n if (!computedResult) {\n isMetCondition = false;\n break\n }\n\n isMetCondition = true;\n }\n\n if (isMetCondition) {\n values.push(range[i]);\n }\n }\n return values\n}\n\nfunction isDefined(arg) {\n return arg !== undefined && arg !== null\n}\n\nconst ERROR = {};\n\nERROR.TYPE = (error_val) => {\n switch (error_val) {\n case nil:\n return 1\n case div0:\n return 2\n case value:\n return 3\n case ref:\n return 4\n case name:\n return 5\n case num:\n return 6\n case na:\n return 7\n case data:\n return 8\n }\n\n return na\n};\n\n/**\n * Returns TRUE if the value is blank.\n *\n * Category: Information\n *\n * @param {*} value The value that you want tested. The value argument can be a blank (empty value), error, logical value, text, number, or reference value, or a name referring to any of these.\n * @returns\n */\nfunction ISBLANK(value) {\n return value === null\n}\n\n/**\n * Returns TRUE if the value is any error value except #N/A.\n *\n * Category: Information\n *\n * @param {*} value The value that you want tested. The value argument can be a blank (empty value), error, logical value, text, number, or reference value, or a name referring to any of these.\n * @returns\n */\nfunction ISERR(value$1) {\n return (\n [value, ref, div0, num, name, nil].indexOf(value$1) >= 0 ||\n (typeof value$1 === 'number' && (isNaN(value$1) || !isFinite(value$1)))\n )\n}\n\n/**\n * Returns TRUE if the value is any error value.\n *\n * Category: Information\n *\n * @param {*} value The value that you want tested. The value argument can be a blank (empty value), error, logical value, text, number, or reference value, or a name referring to any of these.\n * @returns\n */\nfunction ISERROR(value) {\n return ISERR(value) || value === na\n}\n\n/**\n * Returns TRUE if the number is even.\n *\n * Category: Information\n *\n * @param {*} number The value to test. If number is not an integer, it is truncated.\n * @returns\n */\nfunction ISEVEN(number) {\n return !(Math.floor(Math.abs(number)) & 1)\n}\n\n/**\n * Returns TRUE if the value is a logical value.\n *\n * Category: Information\n *\n * @param {*} value The value that you want tested. The value argument can be a blank (empty value), error, logical value, text, number, or reference value, or a name referring to any of these.\n * @returns\n */\nfunction ISLOGICAL(value) {\n return value === true || value === false\n}\n\n/**\n * Returns TRUE if the value is the #N/A error value.\n *\n * Category: Information\n *\n * @param {*} value The value that you want tested. The value argument can be a blank (empty value), error, logical value, text, number, or reference value, or a name referring to any of these.\n * @returns\n */\nfunction ISNA(value) {\n return value === na\n}\n\n/**\n * Returns TRUE if the value is not text.\n *\n * Category: Information\n *\n * @param {*} value The value that you want tested. The value argument can be a blank (empty value), error, logical value, text, number, or reference value, or a name referring to any of these.\n * @returns\n */\nfunction ISNONTEXT(value) {\n return typeof value !== 'string'\n}\n\n/**\n * Returns TRUE if the value is a number.\n *\n * Category: Information\n *\n * @param {*} value The value that you want tested. The value argument can be a blank (empty value), error, logical value, text, number, or reference value, or a name referring to any of these.\n * @returns\n */\nfunction ISNUMBER(value) {\n return typeof value === 'number' && !isNaN(value) && isFinite(value)\n}\n\n/**\n * Returns TRUE if the number is odd.\n *\n * Category: Information\n *\n * @param {*} value The value that you want tested. The value argument can be a blank (empty value), error, logical value, text, number, or reference value, or a name referring to any of these.\n * @returns\n */\nfunction ISODD(value) {\n return !!(Math.floor(Math.abs(value)) & 1)\n}\n\n/**\n * Returns TRUE if the value is text.\n *\n * Category: Information\n *\n * @param {*} value The value that you want tested. The value argument can be a blank (empty value), error, logical value, text, number, or reference value, or a name referring to any of these.\n * @returns\n */\nfunction ISTEXT(value) {\n return typeof value === 'string'\n}\n\n/**\n * Returns a value converted to a number.\n *\n * Category: Information\n *\n * @param {*} value The value you want converted. N converts values listed in the following table.\n * @returns\n */\nfunction N(value) {\n if (ISNUMBER(value)) {\n return value\n }\n\n if (value instanceof Date) {\n return value.getTime()\n }\n\n if (value === true) {\n return 1\n }\n\n if (value === false) {\n return 0\n }\n\n if (ISERROR(value)) {\n return value\n }\n\n return 0\n}\n\n/**\n * Returns the error value #N/A.\n *\n * Category: Information\n *\n * @returns\n */\nfunction NA() {\n return na\n}\n\n/**\n * Returns a number indicating the data type of a value.\n *\n * Category: Information\n *\n * @param {*} value Can be any Microsoft Excel value, such as a number, text, logical value, and so on.\n * @returns\n */\nfunction TYPE(value) {\n if (ISNUMBER(value)) {\n return 1\n }\n\n if (ISTEXT(value)) {\n return 2\n }\n\n if (ISLOGICAL(value)) {\n return 4\n }\n\n if (ISERROR(value)) {\n return 16\n }\n\n if (Array.isArray(value)) {\n return 64\n }\n}\n\n/**\n * Chooses a value from a list of values.\n *\n * Category: Lookup and reference\n *\n * @param {*} index_num Specifies which value argument is selected. Index_num must be a number between 1 and 254, or a formula or reference to a value containing a number between 1 and 254. If index_num is 1, CHOOSE returns value1; if it is 2, CHOOSE returns value2; and so on. If index_num is less than 1 or greater than the number of the last value in the list, CHOOSE returns the #VALUE! error value. If index_num is a fraction, it is truncated to the lowest integer before being used.\n - If index_num is 1, CHOOSE returns value1; if it is 2, CHOOSE returns value2; and so on.\n - If index_num is less than 1 or greater than the number of the last value in the list, CHOOSE returns the #VALUE! error value.\n - If index_num is a fraction, it is truncated to the lowest integer before being used.\n * @param {*} args value1, value2, ... Value 1 is required, subsequent values are optional. 1 to 254 value arguments from which CHOOSE selects a value or an action to perform based on index_num. The arguments can be numbers, value references, defined names, formulas, functions, or text.\n * @returns\n */\nfunction CHOOSE() {\n if (arguments.length < 2) {\n return na\n }\n\n const index = arguments[0];\n\n if (index < 1 || index > 254) {\n return value\n }\n\n if (arguments.length < index + 1) {\n return value\n }\n\n return arguments[index]\n}\n\n/**\n * Returns the specified columns from an array.\n *\n * Category: Lookup and reference\n *\n * @param {*} array range of values or an array constant.\n * @param {*} col_num1 required column index\n * @param {*} col_nums additionnal column indexes\n * @returns\n */\nfunction CHOOSECOLS(array, col_num1, ...col_nums) {\n if (!Array.isArray(array)) return value\n\n const colArgs = flatten([col_num1, ...col_nums]);\n const [rowsSize, colsSize] = getMatrixSize(array);\n const notInRange = colArgs.some((col_num) => {\n if (!isDefined(col_num)) return true\n\n const absColNum = Math.abs(col_num);\n return !(0 < absColNum && absColNum <= colsSize)\n });\n if (notInRange) return value\n\n const targetColNums = colArgs.map((col_num) => {\n return col_num < 0 ? col_num + colsSize + 1 : col_num\n });\n\n const arrayResult = new Array(rowsSize);\n for (let iRow = 0; iRow < rowsSize; iRow++) {\n arrayResult[iRow] = new Array(targetColNums.length);\n for (let iCol = 0; iCol < targetColNums.length; iCol++) {\n arrayResult[iRow][iCol] = array[iRow][targetColNums[iCol] - 1] ?? 0;\n }\n }\n return arrayResult\n}\n\n/**\n * Returns the specified rows from an array.\n *\n * Category: Lookup and reference\n *\n * @param {*} array array range of values or an array constant.\n * @param {*} row_num1 required row index\n * @param {*} row_nums additionnal row indexes\n * @returns\n */\nfunction CHOOSEROWS(array, row_num1, ...row_nums) {\n if (!Array.isArray(array)) return value\n\n const rowArgs = flatten([row_num1, ...row_nums]);\n const notInRange = rowArgs.some((row_num) => {\n if (!isDefined(row_num)) return true\n\n const absRowNum = Math.abs(row_num);\n return !(0 < absRowNum && absRowNum <= array.length)\n });\n\n if (notInRange) return value\n\n const targetRowNums = rowArgs.map((row_num) => {\n return row_num < 0 ? row_num + array.length + 1 : row_num\n });\n\n return targetRowNums.reduce((selectedRows, row_num_selection) => {\n const clonedRow = [...array[--row_num_selection]].map((value) => {\n return isDefined(value) ? value : 0\n });\n\n selectedRows.push(clonedRow);\n return selectedRows\n }, [])\n}\n\n/**\n * Returns the column number of a reference.\n *\n * Category: Lookup and reference\n *\n * @param {*} reference the value or range of values for which you want to return the column number.\n * @param {*} index\n * @returns\n */\nfunction COLUMN(reference, index) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (index < 0) {\n return num\n }\n\n if (!(reference instanceof Array) || typeof index !== 'number') {\n return value\n }\n\n if (reference.length === 0) {\n return undefined\n }\n\n return jStat.col(reference, index)\n}\n\n/**\n * Returns the number of columns in a reference.\n *\n * Category: Lookup and reference\n *\n * @param {*} array An array or array formula, or a reference to a range of values for which you want the number of columns.\n * @returns\n */\nfunction COLUMNS(array) {\n if (arguments.length !== 1) {\n return na\n }\n\n if (!(array instanceof Array)) {\n return value\n }\n\n if (array.length === 0) {\n return 0\n }\n\n return jStat.cols(array)\n}\n\n/**\n * Excludes a specified number of rows or columns from the start or end of an array.\n *\n * Category: Lookup and reference\n *\n * @param {*} array The array from which to drop rows or columns.\n * @param {*} rows The number of rows to drop. A negative value drops from the end of the array. Optionnal when columns provided\n * @param {*} columns The number of columns to exclude. A negative value drops from the end of the array. Optionnal when rows provided\n * @returns\n */\nfunction DROP(array, rows, columns) {\n if (anyIsError(array, rows, columns)) {\n return anyError(array, rows, columns)\n }\n\n if (!(array instanceof Array)) {\n return value\n }\n\n const dropResult = [];\n const [rowsSize, colsSize] = getMatrixSize(array);\n\n let iRowStart = 0,\n iRowEnd = rowsSize;\n if (typeof rows === 'number') {\n const absRowsArg = Math.abs(rows);\n if (absRowsArg > rowsSize) {\n return calc\n }\n\n if (rows > 0) {\n iRowStart = rows;\n } else if (rows < 0) {\n iRowEnd += rows;\n }\n }\n\n let iColStart = 0,\n iColEnd = colsSize;\n if (typeof columns === 'number') {\n const absColumnsArg = Math.abs(columns);\n if (absColumnsArg > colsSize) {\n return calc\n }\n\n if (columns > 0) {\n iColStart = columns;\n } else if (columns < 0) {\n iColEnd += columns;\n }\n }\n\n for (let iRow = iRowStart; iRow < iRowEnd; iRow++) {\n const shallowClonedRow = [...array[iRow].slice(iColStart, iColEnd).map((value) => value ?? 0)];\n dropResult.push(shallowClonedRow);\n }\n\n return dropResult\n}\n\n/**\n * Expands or pads an array to specified row and column dimensions.\n *\n * Category: Lookup and reference\n *\n * @param {*} array The array to expand.\n * @param {*} rows The number of rows in the expanded array. If missing, rows will not be expanded.\n * @param {*} columns The number of columns in the expanded array. If missing, columns will not be expanded.\n * @param {*} pad_with The value with which to pad. If missing, #N/A will be used.\n */\nfunction EXPAND(array, rows, columns, pad_with) {\n const [rowSizeOriginal, columnSizeOriginal] = getMatrixSize(array);\n\n if (!isDefined(rows)) rows = rowSizeOriginal;\n if (!isDefined(columns)) columns = columnSizeOriginal;\n\n if (rows < rowSizeOriginal) return value\n if (columns < columnSizeOriginal) return value\n\n const result = createMatrix(rows, columns);\n for (let iRow = 0; iRow < rows; iRow++) {\n for (let iCol = 0; iCol < columns; iCol++) {\n let value = array[iRow]?.[iCol];\n if (!isDefined(value))\n value = iRow < rowSizeOriginal && iCol < columnSizeOriginal ? 0 : (pad_with ?? na);\n\n result[iRow][iCol] = value;\n }\n }\n\n return result\n}\n\n/**\n * Looks in the top row of an array and returns the value of the indicated value.\n *\n * Category: Lookup and reference\n *\n * @param {*} lookup_value The value to be found in the first row of the table. Lookup_value can be a value, a reference, or a text string.\n * @param {*} table_array A table of information in which data is looked up. Use a reference to a range or a range name.\n * @param {*} row_index_num The row number in table_array from which the matching value will be returned. A row_index_num of 1 returns the first row value in table_array, a row_index_num of 2 returns the second row value in table_array, and so on. If row_index_num is less than 1, HLOOKUP returns the #VALUE! error value; if row_index_num is greater than the number of rows on table_array, HLOOKUP returns the #REF! error value.\n * @param {*} [range_lookup] Optional. A logical value that specifies whether you want HLOOKUP to find an exact match or an approximate match. If TRUE or omitted, an approximate match is returned. In other words, if an exact match is not found, the next largest value that is less than lookup_value is returned. If FALSE, HLOOKUP will find an exact match. If one is not found, the error value #N/A is returned.\n * @returns\n */\nfunction HLOOKUP(lookup_value, table_array, row_index_num, range_lookup) {\n return VLOOKUP(lookup_value, transpose(table_array), row_index_num, range_lookup)\n}\n\n/**\n * Uses an index to choose a value from a reference or array.\n *\n * Category: Lookup and reference\n *\n * @param {*} array A range of values or an array constant.\n - If array contains only one row or column, the corresponding row_num or column_num argument is optional.\n - If array has more than one row and more than one column, and only row_num or column_num is used, INDEX returns an array of the entire row or column in array.\n * @param {*} row_num Required, unless column_num is present. Selects the row in array from which to return a value. If row_num is omitted, column_num is required.\n * @param {*} [column_num] Optional. Selects the column in array from which to return a value. If column_num is omitted, row_num is required.\n * @returns\n */\nfunction INDEX(array, row_num, column_num) {\n const someError = anyError(array, row_num, column_num);\n\n if (someError) {\n return someError\n }\n\n if (!Array.isArray(array)) {\n return value\n }\n\n const isOneDimensionRange = array.length > 0 && !Array.isArray(array[0]);\n\n if (isOneDimensionRange && !column_num) {\n column_num = row_num;\n row_num = 1;\n } else {\n column_num = column_num || 1;\n row_num = row_num || 1;\n }\n\n if (column_num < 0 || row_num < 0) {\n return value\n }\n\n if (isOneDimensionRange && row_num === 1 && column_num <= array.length) {\n return array[column_num - 1]\n } else if (row_num <= array.length && column_num <= array[row_num - 1].length) {\n return array[row_num - 1][column_num - 1]\n }\n\n return ref\n}\n\n/**\n * Looks up values in a vector or array.\n *\n * Category: Lookup and reference\n *\n * @param {*} lookup_value A value that LOOKUP searches for in an array. The lookup_value argument can be a number, text, a logical value, or a name or reference that refers to a value.\n - If LOOKUP can't find the value of lookup_value, it uses the largest value in the array that is less than or equal to lookup_value.\n - If the value of lookup_value is smaller than the smallest value in the first row or column (depending on the array dimensions), LOOKUP returns the #N/A error value.\n * @param {*} array A range of values that contains text, numbers, or logical values that you want to compare with lookup_value. The array form of LOOKUP is very similar to the HLOOKUP and VLOOKUP functions. The difference is that HLOOKUP searches for the value of lookup_value in the first row, VLOOKUP searches in the first column, and LOOKUP searches according to the dimensions of array.\n* @param {*} [result_array] Optional. A range that contains only one row or column. The result_array argument must be the same size as lookup_value. It has to be the same size.\n * @returns\n */\nfunction LOOKUP(lookup_value, array, result_array) {\n array = flatten(array);\n result_array = result_array ? flatten(result_array) : array;\n\n const isNumberLookup = typeof lookup_value === 'number';\n let result = na;\n\n for (let i = 0; i < array.length; i++) {\n if (array[i] === lookup_value) {\n return result_array[i]\n } else if (\n (isNumberLookup && array[i] <= lookup_value) ||\n (typeof array[i] === 'string' && array[i].localeCompare(lookup_value) < 0)\n ) {\n result = result_array[i];\n } else if (isNumberLookup && array[i] > lookup_value) {\n return result\n }\n }\n\n return result\n}\n\n/**\n * Looks up values in a reference or array.\n *\n * Category: Lookup and reference\n *\n * @param {*} lookup_value The value that you want to match in lookup_array. For example, when you look up someone's number in a telephone book, you are using the person's name as the lookup value, but the telephone number is the value you want.The lookup_value argument can be a value (number, text, or logical value) or a value reference to a number, text, or logical value.\n * @param {*} lookup_array The range of values being searched.\n * @param {*} [match_type] Optional. The number -1, 0, or 1. The match_type argument specifies how Excel matches lookup_value with values in lookup_array. The default value for this argument is 1.\n * @returns\n */\nfunction MATCH(lookup_value, lookup_array, match_type) {\n if ((!lookup_value && lookup_value !== 0) || !lookup_array) {\n return na\n }\n\n if (arguments.length === 2) {\n match_type = 1;\n }\n\n lookup_array = flatten(lookup_array);\n\n if (!(lookup_array instanceof Array)) {\n return na\n }\n\n if (match_type !== -1 && match_type !== 0 && match_type !== 1) {\n return na\n }\n\n let index;\n let indexValue;\n\n for (let idx = 0; idx < lookup_array.length; idx++) {\n if (match_type === 1) {\n if (lookup_array[idx] === lookup_value) {\n return idx + 1\n } else if (lookup_array[idx] < lookup_value) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = lookup_array[idx];\n } else if (lookup_array[idx] > indexValue) {\n index = idx + 1;\n indexValue = lookup_array[idx];\n }\n }\n } else if (match_type === 0) {\n if (typeof lookup_value === 'string' && typeof lookup_array[idx] === 'string') {\n const lookupValueStr = lookup_value\n .toLowerCase()\n .replace(/\\?/g, '.')\n .replace(/\\*/g, '.*')\n .replace(/~/g, '\\\\')\n .replace(/\\+/g, '\\\\+')\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/\\[/g, '\\\\[')\n .replace(/\\]/g, '\\\\]');\n\n const regex = new RegExp('^' + lookupValueStr + '$');\n\n if (regex.test(lookup_array[idx].toLowerCase())) {\n return idx + 1\n }\n } else {\n if (lookup_array[idx] === lookup_value) {\n return idx + 1\n }\n }\n } else if (match_type === -1) {\n if (lookup_array[idx] === lookup_value) {\n return idx + 1\n } else if (lookup_array[idx] > lookup_value) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = lookup_array[idx];\n } else if (lookup_array[idx] < indexValue) {\n index = idx + 1;\n indexValue = lookup_array[idx];\n }\n }\n }\n }\n\n return index || na\n}\n\n/**\n * Returns the number of rows in a reference.\n *\n * Category: Lookup and reference\n *\n * @param {*} array An array, an array formula, or a reference to a range of values for which you want the number of rows.\n * @returns\n */\nfunction ROWS(array) {\n if (arguments.length !== 1) {\n return na\n }\n\n if (!(array instanceof Array)) {\n return value\n }\n\n if (array.length === 0) {\n return 0\n }\n\n return jStat.rows(array)\n}\n/**\n * Returns a sorted array of the elements in an array. The returned array is the same shape as the provided array argument.\n *\n * Category: Lookup and reference\n *\n * @param {*} array Array to sort\n * @param {*} [sort_index] Optional. A number indicating the row or column to sort by\n * @param {*} [sort_order] Optional. A number indicating the desired sort order; 1 for ascending order (default), -1 for descending order\n * @param {*} [by_col] Optional. A logical value indicating the desired sort direction; FALSE to sort by row (default), TRUE to sort by column\n * @returns\n */\nfunction SORT(array, sort_index = 1, sort_order = 1, by_col = false) {\n if (!array || !Array.isArray(array)) {\n return na\n }\n\n if (array.length === 0) {\n return 0\n }\n\n sort_index = parseNumber(sort_index);\n if (!sort_index || sort_index < 1) {\n return value\n }\n\n sort_order = parseNumber(sort_order);\n if (sort_order !== 1 && sort_order !== -1) {\n return value\n }\n\n by_col = parseBool(by_col);\n if (typeof by_col !== 'boolean') {\n return name\n }\n\n const sortArray = (arr) =>\n arr.sort((a, b) => {\n a = parseString(a[sort_index - 1]);\n b = parseString(b[sort_index - 1]);\n\n return sort_order === 1 ? (a < b ? sort_order * -1 : sort_order) : a > b ? sort_order : sort_order * -1\n });\n\n const matrix = fillMatrix(array);\n const result = by_col ? transpose(matrix) : matrix;\n\n return sort_index >= 1 && sort_index <= result[0].length\n ? by_col\n ? transpose(sortArray(result))\n : sortArray(result)\n : value\n}\n\n/**\n * Returns the transpose of an array.\n *\n * Category: Lookup and reference\n *\n * @param {*} array An array or range of values on a worksheet that you want to transpose. The transpose of an array is created by using the first row of the array as the first column of the new array, the second row of the array as the second column of the new array, and so on. If you're not sure of how to enter an array formula, see Create an array formula.\n * @returns\n */\nfunction TRANSPOSE(array) {\n if (!array) {\n return na\n }\n\n const matrix = fillMatrix(array);\n\n return transpose(matrix)\n}\n\n/**\n * Returns a list of unique values in a list or range.\n *\n * Category: Lookup and reference\n *\n * @returns\n */\nfunction UNIQUE() {\n const result = [];\n\n for (let i = 0; i < arguments.length; ++i) {\n let hasElement = false;\n const element = arguments[i];\n\n // Check if we've already seen this element.\n\n for (let j = 0; j < result.length; ++j) {\n hasElement = result[j] === element;\n\n if (hasElement) {\n break\n }\n }\n\n // If we did not find it, add it to the result.\n if (!hasElement) {\n result.push(element);\n }\n }\n\n return result\n}\n\n/**\n * Looks in the first column of an array and moves across the row to return the value of a value.\n *\n * Category: Lookup and reference\n *\n * @param {*} lookup_value The value to be found in the first row of the table. Lookup_value can be a value, a reference, or a text string.\n * @param {*} table_array A table of information in which data is looked up. Use a reference to a range or a range name.\n * @param {*} col_index_num The row number in table_array from which the matching value will be returned. A row_index_num of 1 returns the first row value in table_array, a row_index_num of 2 returns the second row value in table_array, and so on. If row_index_num is less than 1, HLOOKUP returns the #VALUE! error value; if row_index_num is greater than the number of rows on table_array, HLOOKUP returns the #REF! error value.\n * @param {*} [range_lookup] Optional. A logical value that specifies whether you want HLOOKUP to find an exact match or an approximate match. If TRUE or omitted, an approximate match is returned. In other words, if an exact match is not found, the next largest value that is less than lookup_value is returned. If FALSE, HLOOKUP will find an exact match. If one is not found, the error value #N/A is returned.\n * @returns\n */\nfunction VLOOKUP(lookup_value, table_array, col_index_num, range_lookup) {\n if (!table_array || !col_index_num) {\n return na\n }\n\n range_lookup = !(range_lookup === 0 || range_lookup === false);\n\n let result = na;\n let exactMatchOnly = false;\n\n const isNumberLookup = typeof lookup_value === 'number';\n const lookupValue = typeof lookup_value === 'string' ? lookup_value.toLowerCase() : lookup_value;\n\n for (let i = 0; i < table_array.length; i++) {\n const row = table_array[i];\n const rowValue = typeof row[0] === 'string' ? row[0].toLowerCase() : row[0];\n\n if (rowValue === lookupValue) {\n result = col_index_num < row.length + 1 ? row[col_index_num - 1] : ref;\n break\n } else if (\n !exactMatchOnly &&\n ((isNumberLookup && range_lookup && rowValue <= lookup_value) ||\n (range_lookup && typeof rowValue === 'string' && rowValue.localeCompare(lookup_value) < 0))\n ) {\n result = col_index_num < row.length + 1 ? row[col_index_num - 1] : ref;\n }\n\n if (isNumberLookup && rowValue > lookup_value) {\n exactMatchOnly = true;\n }\n }\n\n return result\n}\n\n/**\n * Appends arrays horizontally and in sequence to return a larger array.\n *\n * Category: Lookup and reference\n *\n * @param {*} array\n * @param {...*} otherArrays\n * @returns\n */\nfunction HSTACK(array, ...otherArrays) {\n const arrays = [array, ...otherArrays];\n\n let maxRowCount = 0;\n let totalColCount = 0;\n const colsPerArray = [];\n for (const currentArray of arrays) {\n const [rowSize, colSize] = getMatrixSize(currentArray);\n maxRowCount = Math.max(maxRowCount, rowSize);\n totalColCount += colSize;\n colsPerArray.push(colSize);\n }\n\n const arrayResult = Array.from({ length: maxRowCount }, () => new Array(totalColCount));\n\n let iColResult = 0;\n for (let iArr = 0; iArr < arrays.length; iArr++) {\n const currentArray = arrays[iArr];\n const currentArrayColCount = colsPerArray[iArr];\n for (let iCol = 0; iCol < currentArrayColCount; iCol++) {\n for (let iRow = 0; iRow < maxRowCount; iRow++) {\n arrayResult[iRow][iColResult] = currentArray[iRow]?.[iCol] ?? (iRow < currentArray.length ? 0 : na);\n }\n iColResult++;\n }\n }\n\n return arrayResult\n}\n\n/**\n * Appends arrays vertically and in sequence to return a larger array.\n *\n * Category: Lookup and reference\n *\n * @param {*} array\n * @param {...*} otherArrays\n * @returns\n */\nfunction VSTACK(array, ...otherArrays) {\n const arrays = [array, ...otherArrays];\n\n let maxColCount = 0;\n let totalRowCount = 0;\n for (const currentArray of arrays) {\n const [rowSize, colSize] = getMatrixSize(currentArray);\n maxColCount = Math.max(maxColCount, colSize);\n totalRowCount += rowSize;\n }\n\n const arrayResult = new Array(totalRowCount);\n let currentArray;\n let iRowResult = -1;\n while ((currentArray = arrays.shift()) !== undefined) {\n for (let iRow = 0; iRow < currentArray.length; iRow++) {\n arrayResult[++iRowResult] = new Array(maxColCount);\n for (let iCol = 0; iCol < maxColCount; iCol++) {\n arrayResult[iRowResult][iCol] = currentArray[iRow][iCol] ?? (iCol < currentArray[iRow].length ? 0 : na);\n }\n }\n }\n\n return arrayResult\n}\n\n/**\n * Returns the character specified by the code number.\n *\n * Category: Text\n *\n * @param {*} number A number between 1 and 255 specifying which character you want. The character is from the character set used by your computer. Note: Excel for the web supports only CHAR(9), CHAR(10), CHAR(13), and CHAR(32) and above.\n * @returns\n */\nfunction CHAR(number) {\n number = parseNumber(number);\n\n if (number === 0) {\n return value\n }\n\n if (number instanceof Error) {\n return number\n }\n\n return String.fromCharCode(number)\n}\n\n/**\n * Removes all nonprintable characters from text.\n *\n * Category: Text\n *\n * @param {*} text Any worksheet information from which you want to remove nonprintable characters.\n * @returns\n */\nfunction CLEAN(text) {\n if (anyIsError(text)) {\n return text\n }\n\n text = text || '';\n const re = /[\\0-\\x1F]/g;\n\n return text.replace(re, '')\n}\n\n/**\n * Returns a numeric code for the first character in a text string.\n *\n * Category: Text\n *\n * @param {*} text The text for which you want the code of the first character.\n * @returns\n */\nfunction CODE(text) {\n if (anyIsError(text)) {\n return text\n }\n\n text = text || '';\n let result = text.charCodeAt(0);\n\n if (isNaN(result)) {\n result = value;\n }\n\n return result\n}\n\n/**\n * Joins several text items into one text item.\n *\n * Category: Text\n *\n * @returns\n */\nfunction CONCATENATE() {\n const args = flatten(arguments);\n const someError = anyError.apply(undefined, args);\n\n if (someError) {\n return someError\n }\n\n let trueFound = 0;\n\n while ((trueFound = args.indexOf(true)) > -1) {\n args[trueFound] = 'TRUE';\n }\n\n let falseFound = 0;\n\n while ((falseFound = args.indexOf(false)) > -1) {\n args[falseFound] = 'FALSE';\n }\n\n return args.join('')\n}\n\nconst CONCAT = CONCATENATE;\n\n/**\n * Converts a number to text, using the $ (dollar) currency format.\n *\n * Category: Text\n *\n * @param {*} number A number, a reference to a value containing a number, or a formula that evaluates to a number.\n * @param {*} [decimals] Optional. The number of digits to the right of the decimal point. If this is negative, the number is rounded to the left of the decimal point. If you omit decimals, it is assumed to be 2.\n * @returns\n */\nfunction DOLLAR(number, decimals = 2) {\n number = parseNumber(number);\n if (isNaN(number)) {\n return value\n }\n\n number = ROUND(number, decimals);\n\n const options = {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: decimals >= 0 ? decimals : 0,\n maximumFractionDigits: decimals >= 0 ? decimals : 0\n };\n\n const formattedNumber = number.toLocaleString('en-US', options);\n\n if (number < 0) {\n return '$(' + formattedNumber.slice(2) + ')'\n }\n\n return formattedNumber\n}\n\n/**\n * Checks to see if two text values are identical.\n *\n * Category: Text\n *\n * @param {*} text1 The first text string.\n * @param {*} text2 The second text string.\n * @returns\n */\nfunction EXACT(text1, text2) {\n if (arguments.length !== 2) {\n return na\n }\n\n const someError = anyError(text1, text2);\n\n if (someError) {\n return someError\n }\n\n text1 = parseString(text1);\n text2 = parseString(text2);\n\n return text1 === text2\n}\n\n/**\n * Locate one text string within a second text string, and return the number of the starting position of the first text string from the first character of the second text string.\n *\n * Category: Text\n *\n * @param {*} find_text The text you want to find.\n * @param {*} within_text The text containing the text you want to find.\n * @param {*} [start_num] Optional. Specifies the character at which to start the search. The first character in within_text is character number 1. If you omit start_num, it is assumed to be 1.\n * @returns\n */\nfunction FIND(find_text, within_text, start_num) {\n if (arguments.length < 2) {\n return na\n }\n\n find_text = parseString(find_text);\n within_text = parseString(within_text);\n start_num = start_num === undefined ? 0 : start_num;\n const found_index = within_text.indexOf(find_text, start_num - 1);\n\n if (found_index === -1) {\n return value\n }\n\n return found_index + 1\n}\n\n/**\n * Formats a number as text with a fixed number of decimals.\n *\n * Category: Text\n *\n * @param {*} number The number you want to round and convert to text.\n * @param {*} [decimals] Optional. The number of digits to the right of the decimal point.\n * @param {*} [no_commas] Optional. A logical value that, if TRUE, prevents FIXED from including commas in the returned text.\n * @returns\n */\nfunction FIXED(number, decimals = 2, no_commas = false) {\n number = parseNumber(number);\n if (isNaN(number)) {\n return value\n }\n\n decimals = parseNumber(decimals);\n if (isNaN(decimals)) {\n return value\n }\n\n if (decimals < 0) {\n const factor = Math.pow(10, -decimals);\n number = Math.round(number / factor) * factor;\n } else {\n number = number.toFixed(decimals);\n }\n\n if (no_commas) {\n number = number.toString().replace(/,/g, '');\n } else {\n const parts = number.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+$)/g, ',');\n number = parts.join('.');\n }\n\n return number\n}\n\n/**\n * Returns the leftmost characters from a text value.\n *\n * Category: Text\n *\n * @param {*} text The text string that contains the characters you want to extract.\n * @param {*} [num_chars] Optional. Specifies the number of characters you want LEFT to extract.\n * @returns\n */\nfunction LEFT(text, num_chars) {\n const someError = anyError(text, num_chars);\n\n if (someError) {\n return someError\n }\n\n text = parseString(text);\n num_chars = num_chars === undefined ? 1 : num_chars;\n num_chars = parseNumber(num_chars);\n\n if (num_chars instanceof Error || typeof text !== 'string') {\n return value\n }\n\n return text.substring(0, num_chars)\n}\n\n/**\n * Returns the number of characters in a text string\n *\n * Category: Text\n *\n * @param {*} text The text whose length you want to find. Spaces count as characters.\n * @returns\n */\nfunction LEN(text) {\n if (arguments.length === 0) {\n return error\n }\n\n if (text instanceof Error) {\n return text\n }\n\n if (Array.isArray(text)) {\n return value\n }\n\n const textAsString = parseString(text);\n\n return textAsString.length\n}\n\n/**\n * Converts text to lowercase.\n *\n * Category: Text\n *\n * @param {*} text The text you want to convert to lowercase. LOWER does not change characters in text that are not letters.\n * @returns\n */\nfunction LOWER(text) {\n if (arguments.length !== 1) {\n return value\n }\n\n text = parseString(text);\n\n if (anyIsError(text)) {\n return text\n }\n\n return text.toLowerCase()\n}\n\n/**\n * Returns a specific number of characters from a text string starting at the position you specify\n *\n * Category: Text\n *\n * @param {*} text The text string containing the characters you want to extract.\n * @param {*} start_num The position of the first character you want to extract in text. The first character in text has start_num 1, and so on.\n * @param {*} num_chars Specifies the number of characters you want MID to return from text.\n * @returns\n */\nfunction MID(text, start_num, num_chars) {\n if (anyIsError(text, start_num, num_chars)) {\n return anyError(text, start_num, num_chars)\n }\n\n const numArgs = [start_num, num_chars].map((num) => parseNumber(num));\n const validNumArgs = numArgs.every((numArg) => {\n return !(numArg instanceof Error) && numArg > 0\n });\n if (!validNumArgs) return value\n\n if (!isDefined(text)) {\n text = '';\n } else if (typeof text !== 'string') {\n text = String(text);\n }\n[start_num, num_chars] = numArgs;\n\n const begin = start_num - 1;\n const end = begin + num_chars;\n\n return text.substring(begin, end)\n}\n\n// TODO\n/**\n * Converts text to number in a locale-independent manner.\n *\n * Category: Text\n *\n * @param {*} text The text to convert to a number.\n * @param {*} [decimal_separator] Optional. The character used to separate the integer and fractional part of the result.\n * @param {*} [group_separator] Optional. The character used to separate groupings of numbers, such as thousands from hundreds and millions from thousands.\n * @returns\n */\nfunction NUMBERVALUE(text, decimal_separator, group_separator) {\n text = isDefined(text) ? text : '';\n\n if (typeof text === 'number') {\n return text\n }\n\n if (typeof text !== 'string') {\n return na\n }\n\n decimal_separator = typeof decimal_separator === 'undefined' ? '.' : decimal_separator;\n group_separator = typeof group_separator === 'undefined' ? ',' : group_separator;\n\n return Number(text.replace(decimal_separator, '.').replace(group_separator, ''))\n}\n\n/**\n * Capitalizes the first letter in each word of a text value.\n *\n * Category: Text\n *\n * @param {*} text Text enclosed in quotation marks, a formula that returns text, or a reference to a value containing the text you want to partially capitalize.\n * @returns\n */\nfunction PROPER(text) {\n if (anyIsError(text)) {\n return text\n }\n\n if (isNaN(text) && typeof text === 'number') {\n return value\n }\n\n text = parseString(text);\n\n return text.replace(/\\w\\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase())\n}\n\n/**\n * Replaces characters within text\n *\n * Category: Text\n *\n * @param {*} old_text Text in which you want to replace some characters.\n * @param {*} num_chars The number of characters in old_text that you want REPLACE to replace with new_text.\n * @param {*} length he number of characters in old_text that you want REPLACEB to replace with new_text.\n * @param {*} new_text he text that will replace characters in old_text.\n * @returns\n */\nfunction REPLACE(old_text, num_chars, length, new_text) {\n num_chars = parseNumber(num_chars);\n length = parseNumber(length);\n\n if (anyIsError(num_chars, length) || typeof old_text !== 'string' || typeof new_text !== 'string') {\n return value\n }\n\n return old_text.substr(0, num_chars - 1) + new_text + old_text.substr(num_chars - 1 + length)\n}\n\n/**\n * Repeats text a given number of times.\n *\n * Category: Text\n *\n * @param {*} text The text you want to repeat.\n * @param {*} number_times A positive number specifying the number of times to repeat text.\n * @returns\n */\nfunction REPT(text, number_times) {\n const someError = anyError(text, number_times);\n\n if (someError) {\n return someError\n }\n\n text = parseString(text);\n number_times = parseNumber(number_times);\n\n if (number_times instanceof Error) {\n return number_times\n }\n\n return new Array(number_times + 1).join(text)\n}\n\n/**\n * Returns the rightmost characters from a text value\n *\n * Category: Text\n *\n * @param {*} text The text string containing the characters you want to extract.\n * @param {*} [num_chars] Optional. Specifies the number of characters you want RIGHT to extract.\n * @returns\n */\nfunction RIGHT(text, num_chars) {\n const someError = anyError(text, num_chars);\n\n if (someError) {\n return someError\n }\n\n text = parseString(text);\n num_chars = num_chars === undefined ? 1 : num_chars;\n num_chars = parseNumber(num_chars);\n\n if (num_chars instanceof Error) {\n return num_chars\n }\n\n return text.substring(text.length - num_chars)\n}\n\n/**\n * Finds one text value within another (not case-sensitive)\n *\n * Category: Text\n *\n * @param {*} find_text The text that you want to find.\n * @param {*} within_text The text in which you want to search for the value of the find_text argument.\n * @param {*} [start_num] Optional. The character number in the within_text argument at which you want to start searching.\n * @returns\n */\nfunction SEARCH(find_text, within_text, start_num) {\n let foundAt;\n\n if (typeof find_text !== 'string' || typeof within_text !== 'string') {\n return value\n }\n\n start_num = start_num === undefined ? 0 : start_num;\n foundAt = within_text.toLowerCase().indexOf(find_text.toLowerCase(), start_num - 1) + 1;\n\n return foundAt === 0 ? value : foundAt\n}\n\n/**\n * Substitutes new text for old text in a text string.\n *\n * Category: Text\n *\n * @param {*} text The text or the reference to a value containing text for which you want to substitute characters.\n * @param {*} old_text The text you want to replace.\n * @param {*} new_text The text you want to replace old_text with.\n * @param {*} [instance_num] Optional. Specifies which occurrence of old_text you want to replace with new_text. If you specify instance_num, only that instance of old_text is replaced. Otherwise, every occurrence of old_text in text is changed to new_text.\n * @returns\n */\nfunction SUBSTITUTE(text, old_text, new_text, instance_num) {\n if (arguments.length < 3) {\n return na\n }\n\n if (!text || !old_text) {\n return text\n } else if (instance_num === undefined) {\n return text.split(old_text).join(new_text)\n } else {\n instance_num = Math.floor(Number(instance_num));\n\n if (Number.isNaN(instance_num) || instance_num <= 0) {\n return value\n }\n\n let index = 0;\n let i = 0;\n\n while (index > -1 && text.indexOf(old_text, index) > -1) {\n index = text.indexOf(old_text, index + 1);\n i++;\n\n if (index > -1 && i === instance_num) {\n return text.substring(0, index) + new_text + text.substring(index + old_text.length)\n }\n }\n\n return text\n }\n}\n\n/**\n * Converts its arguments to text.\n *\n * Category: Text\n *\n * @param {*} value The value you want to test.\n * @returns\n */\nfunction T(value) {\n if (value instanceof Error) {\n return value\n }\n\n return typeof value === 'string' ? value : ''\n}\n\n/**\n * Formats a number and converts it to text.\n *\n * Category: Text\n *\n * @param {*} value A numeric value that you want to be converted into text.\n * @param {*} format_text A text string that defines the formatting that you want to be applied to the supplied value.\n * @returns\n */\nfunction TEXT(value$1, format_text) {\n if (value$1 === undefined || value$1 instanceof Error || format_text instanceof Error) {\n return na\n }\n\n if (value$1 instanceof Date) {\n return value$1.toISOString().slice(0, 10)\n }\n\n if (format_text === undefined || format_text === null) {\n return ''\n }\n\n if (typeof format_text === 'number') {\n return String(format_text)\n }\n\n if (typeof format_text !== 'string') {\n return value\n }\n\n const currencySymbol = format_text.startsWith('$') ? '$' : '';\n const isPercent = format_text.endsWith('%');\n format_text = format_text.replace(/%/g, '').replace(/\\$/g, '');\n\n // count all 0s after the decimal point\n const decimalPlaces = format_text.includes('.') ? format_text.split('.')[1].match(/0/g).length : 0;\n\n const noCommas = !format_text.includes(',');\n\n if (isPercent) {\n value$1 = value$1 * 100;\n }\n\n value$1 = FIXED(value$1, decimalPlaces, noCommas);\n\n if (value$1.startsWith('-')) {\n value$1 = value$1.replace('-', '');\n value$1 = '-' + currencySymbol + value$1;\n } else {\n value$1 = currencySymbol + value$1;\n }\n\n if (isPercent) {\n value$1 = value$1 + '%';\n }\n\n return value$1\n}\n\n/**\n * Combines the text from multiple ranges and/or strings.\n *\n * Category: Text\n * @param {*} delimiter A text string, either empty, or one or more characters enclosed by double quotes, or a reference to a valid text string. If a number is supplied, it will be treated as text.\n * @param {*} ignore_empty If TRUE, ignores empty values.\n * @param {*} args Text item to be joined. A text string, or array of strings, such as a range of values.\n * @returns\n */\nfunction TEXTJOIN(delimiter, ignore_empty, ...args) {\n if (typeof ignore_empty !== 'boolean') {\n ignore_empty = parseBool(ignore_empty);\n }\n\n if (arguments.length < 3) {\n return na\n }\n\n delimiter = delimiter !== null && delimiter !== undefined ? delimiter : '';\n\n let flatArgs = flatten(args);\n let textToJoin = ignore_empty ? flatArgs.filter((text) => text) : flatArgs;\n\n if (Array.isArray(delimiter)) {\n delimiter = flatten(delimiter);\n\n let chunks = textToJoin.map((item) => [item]);\n let index = 0;\n\n for (let i = 0; i < chunks.length - 1; i++) {\n chunks[i].push(delimiter[index]);\n index++;\n\n if (index === delimiter.length) {\n index = 0;\n }\n }\n\n textToJoin = flatten(chunks);\n\n return textToJoin.join('')\n }\n\n return textToJoin.join(delimiter)\n}\n\n/**\n * Removes spaces from text.\n *\n * Category: Text\n *\n * @param {*} text The text from which you want spaces removed.\n * @returns\n */\nfunction TRIM(text) {\n text = parseString(text);\n\n if (text instanceof Error) {\n return text\n }\n\n return text.replace(/\\s+/g, ' ').trim()\n}\n\nconst UNICHAR = CHAR;\n\nconst UNICODE = CODE;\n\n/**\n * Converts text to uppercase.\n *\n * Category: Text\n *\n * @param {*} text The text you want converted to uppercase. Text can be a reference or text string.\n * @returns\n */\nfunction UPPER(text) {\n text = parseString(text);\n\n if (text instanceof Error) {\n return text\n }\n\n return text.toUpperCase()\n}\n\n/**\n * Converts a text argument to a number.\n *\n * Category: Text\n *\n * @param {*} text The text enclosed in quotation marks or a reference to a value containing the text you want to convert.\n * @returns\n */\nfunction VALUE(text) {\n const anyError$1 = anyError(text);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (typeof text === 'number') {\n return text\n }\n\n if (!isDefined(text)) {\n text = '';\n }\n\n if (typeof text !== 'string') {\n return value\n }\n\n const isPercent = /(%)$/.test(text) || /^(%)/.test(text);\n text = text.replace(/^[^0-9-]{0,3}/, '');\n text = text.replace(/[^0-9]{0,3}$/, '');\n text = text.replace(/[ ,]/g, '');\n\n if (text === '') {\n return 0\n }\n\n let output = Number(text);\n\n if (isNaN(output)) {\n return value\n }\n\n output = output || 0;\n\n if (isPercent) {\n output = output * 0.01;\n }\n\n return output\n}\n\nconst SQRT2PI = 2.5066282746310002;\n\n/**\n * Returns the average of the absolute deviations of data points from their mean.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 arguments for which you want the average of the absolute deviations. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nfunction AVEDEV() {\n const flatArguments = flatten(arguments);\n const flatArgumentsDefined = flatArguments.filter(isDefined);\n\n if (flatArgumentsDefined.length === 0) {\n return num\n }\n\n const range = parseNumberArray(flatArgumentsDefined);\n\n if (range instanceof Error) {\n return range\n }\n\n return jStat.sum(jStat(range).subtract(jStat.mean(range)).abs()[0]) / range.length\n}\n\n/**\n * Returns the average of its arguments.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ...Numbers, value references or ranges for which you want the average.\n * @returns\n */\nfunction AVERAGE() {\n const flatArguments = flatten(arguments);\n const flatArgumentsDefined = flatArguments.filter(isDefined);\n\n if (flatArgumentsDefined.length === 0) {\n return div0\n }\n\n const someError = anyError.apply(undefined, flatArgumentsDefined);\n\n if (someError) {\n return someError\n }\n\n const range = numbers(flatArgumentsDefined);\n const n = range.length;\n\n let sum = 0;\n let count = 0;\n let result;\n\n for (let i = 0; i < n; i++) {\n sum += range[i];\n count += 1;\n }\n\n result = sum / count;\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n}\n\n/**\n * Returns the average of its arguments, including numbers, text, and logical values.\n *\n * Category: Statistical\n *\n * @param {*} args value1, value2, ... Value1 is required, subsequent values are optional. 1 to 255 values, ranges of values, or values for which you want the average.\n * @returns\n */\nfunction AVERAGEA() {\n const flatArguments = flatten(arguments);\n const flatArgumentsDefined = flatArguments.filter(isDefined);\n\n if (flatArgumentsDefined.length === 0) {\n return div0\n }\n\n const someError = anyError.apply(undefined, flatArgumentsDefined);\n\n if (someError) {\n return someError\n }\n\n const range = flatArgumentsDefined;\n const n = range.length;\n\n let sum = 0;\n let count = 0;\n let result;\n\n for (let i = 0; i < n; i++) {\n const el = range[i];\n\n if (typeof el === 'number') {\n sum += el;\n }\n\n if (el === true) {\n sum++;\n }\n\n if (el !== null) {\n count++;\n }\n }\n\n result = sum / count;\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n}\n\n/**\n * Returns the average (arithmetic mean) of all the values in a range that meet a given criteria.\n *\n * Category: Statistical\n *\n * @param {*} range One or more values to average, including numbers or names, arrays, or references that contain numbers.\n * @param {*} criteria The criteria in the form of a number, expression, value reference, or text that defines which values are averaged.\n * @param {*} [average_range] Optional. The actual set of values to average. If omitted, range is used.\n * @returns\n */\nfunction AVERAGEIF(range, criteria, average_range) {\n if (arguments.length <= 1) {\n return na\n }\n\n average_range = average_range || range;\n\n const flatAverageRange = flatten(average_range);\n const flatAverageRangeDefined = flatAverageRange.filter(isDefined);\n\n average_range = parseNumberArray(flatAverageRangeDefined);\n range = flatten(range);\n\n if (average_range instanceof Error) {\n return average_range\n }\n\n let average_count = 0;\n let result = 0;\n\n const isWildcard = criteria === void 0 || criteria === '*';\n const tokenizedCriteria = isWildcard ? null : parse(criteria + '');\n\n for (let i = 0; i < range.length; i++) {\n const value = range[i];\n\n if (isWildcard) {\n result += average_range[i];\n average_count++;\n } else {\n const tokens = [createToken(value, TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n if (compute(tokens)) {\n result += average_range[i];\n average_count++;\n }\n }\n }\n\n return result / average_count\n}\n\n/**\n * Returns the average (arithmetic mean) of all values that meet multiple criteria.\n *\n * Category: Statistical\n *\n * @param {*} args One or more values to average, including numbers or names, arrays, or references that contain numbers.\n * @returns\n */\nfunction AVERAGEIFS() {\n // Does not work with multi dimensional ranges yet!\n // http://office.microsoft.com/en-001/excel-help/averageifs-function-HA010047493.aspx\n const values = applyCriteria(...arguments);\n const result = values.reduce((acc, value) => acc + value, 0);\n const average = result / values.length;\n\n return isNaN(average) ? 0 : average\n}\n\nconst BETA = {};\n\n/**\n * Returns the beta cumulative distribution function.\n *\n * Category: Statistical\n *\n * @param {*} x The value between A and B at which to evaluate the function\n * @param {*} alpha A parameter of the distribution.\n * @param {*} beta A parameter of the distribution.\n * @param {*} cumulative A logical value that determines the form of the function. If cumulative is TRUE, BETA.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function.\n * @param {*} [a] Optional. A lower bound to the interval of x.\n * @param {*} [b] Optional. An upper bound to the interval of x.\n * @returns\n */\nBETA.DIST = function (x, alpha, beta, cumulative, a, b) {\n if (arguments.length < 4) {\n return value\n }\n\n a = a === undefined ? 0 : a;\n b = b === undefined ? 1 : b;\n\n x = parseNumber(x);\n alpha = parseNumber(alpha);\n beta = parseNumber(beta);\n a = parseNumber(a);\n b = parseNumber(b);\n\n if (anyIsError(x, alpha, beta, a, b)) {\n return value\n }\n\n x = (x - a) / (b - a);\n\n return cumulative ? jStat.beta.cdf(x, alpha, beta) : jStat.beta.pdf(x, alpha, beta)\n};\n\n/**\n * Returns the inverse of the cumulative distribution function for a specified beta distribution.\n *\n * Category: Statistical\n *\n * @param {*} probability A probability associated with the beta distribution.\n * @param {*} alpha A parameter of the distribution.\n * @param {*} beta A parameter the distribution.\n * @param {*} [a] Optional. A lower bound to the interval of x.\n * @param {*} [b] Optional. An upper bound to the interval of x.\n * @returns\n */\nBETA.INV = (probability, alpha, beta, a, b) => {\n a = a === undefined ? 0 : a;\n b = b === undefined ? 1 : b;\n probability = parseNumber(probability);\n alpha = parseNumber(alpha);\n beta = parseNumber(beta);\n a = parseNumber(a);\n b = parseNumber(b);\n\n if (anyIsError(probability, alpha, beta, a, b)) {\n return value\n }\n\n return jStat.beta.inv(probability, alpha, beta) * (b - a) + a\n};\n\nconst BINOM = {};\n\n/**\n * Returns the individual term binomial distribution probability.\n *\n * Category: Statistical\n *\n * @param {*} number_s The number of successes in trials.\n * @param {*} trials The number of independent trials.\n * @param {*} probability_s The probability of success on each trial.\n * @param {*} cumulative A logical value that determines the form of the function. If cumulative is TRUE, then BINOM.DIST returns the cumulative distribution function, which is the probability that there are at most number_s successes; if FALSE, it returns the probability mass function, which is the probability that there are number_s successes.\n * @returns\n */\nBINOM.DIST = (number_s, trials, probability_s, cumulative) => {\n number_s = parseNumber(number_s);\n trials = parseNumber(trials);\n probability_s = parseNumber(probability_s);\n cumulative = parseNumber(cumulative);\n\n if (anyIsError(number_s, trials, probability_s, cumulative)) {\n return value\n }\n\n return cumulative\n ? jStat.binomial.cdf(number_s, trials, probability_s)\n : jStat.binomial.pdf(number_s, trials, probability_s)\n};\n\n/**\n * Returns the probability of a trial result using a binomial distribution.\n *\n * Category: Statistical\n *\n * @param {*} trials The number of independent trials. Must be greater than or equal to 0.\n * @param {*} probability_s The probability of success in each trial. Must be greater than or equal to 0 and less than or equal to 1.\n * @param {*} number_s The number of successes in trials. Must be greater than or equal to 0 and less than or equal to Trials.\n * @param {*} [number_s2] Optional. If provided, returns the probability that the number of successful trials will fall between Number_s and number_s2. Must be greater than or equal to Number_s and less than or equal to Trials.\n * @returns\n */\nBINOM.DIST.RANGE = (trials, probability_s, number_s, number_s2) => {\n number_s2 = number_s2 === undefined ? number_s : number_s2;\n\n trials = parseNumber(trials);\n probability_s = parseNumber(probability_s);\n number_s = parseNumber(number_s);\n number_s2 = parseNumber(number_s2);\n\n if (anyIsError(trials, probability_s, number_s, number_s2)) {\n return value\n }\n\n let result = 0;\n\n for (let i = number_s; i <= number_s2; i++) {\n result += COMBIN(trials, i) * Math.pow(probability_s, i) * Math.pow(1 - probability_s, trials - i);\n }\n\n return result\n};\n\n/**\n * Returns the smallest value for which the cumulative binomial distribution is less than or equal to a criterion value.\n *\n * Category: Statistical\n *\n * @param {*} trials The number of Bernoulli trials.\n * @param {*} probability_s The probability of a success on each trial.\n * @param {*} alpha The criterion value.\n * @returns\n */\nBINOM.INV = (trials, probability_s, alpha) => {\n trials = parseNumber(trials);\n probability_s = parseNumber(probability_s);\n alpha = parseNumber(alpha);\n\n if (anyIsError(trials, probability_s, alpha)) {\n return value\n }\n\n let x = 0;\n\n while (x <= trials) {\n if (jStat.binomial.cdf(x, trials, probability_s) >= alpha) {\n return x\n }\n\n x++;\n }\n};\n\nconst CHISQ = {};\n\n/**\n * Returns the cumulative beta probability density function.\n *\n * Category: Statistical\n *\n * @param {*} x The value at which you want to evaluate the distribution.\n * @param {*} deg_freedom The number of degrees of freedom.\n * @param {*} cumulative A logical value that determines the form of the function. If cumulative is TRUE, CHISQ.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function.\n * @returns\n */\nCHISQ.DIST = (x, deg_freedom, cumulative) => {\n x = parseNumber(x);\n deg_freedom = parseNumber(deg_freedom);\n\n if (anyIsError(x, deg_freedom)) {\n return value\n }\n\n return cumulative ? jStat.chisquare.cdf(x, deg_freedom) : jStat.chisquare.pdf(x, deg_freedom)\n};\n\n/**\n * Returns the one-tailed probability of the chi-squared distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The value at which you want to evaluate the distribution.\n * @param {*} deg_freedom The number of degrees of freedom.\n * @returns\n */\nCHISQ.DIST.RT = (x, deg_freedom) => {\n if (!x | !deg_freedom) {\n return na\n }\n\n if (x < 1 || deg_freedom > Math.pow(10, 10)) {\n return num\n }\n\n if (typeof x !== 'number' || typeof deg_freedom !== 'number') {\n return value\n }\n\n return 1 - jStat.chisquare.cdf(x, deg_freedom)\n};\n\n/**\n * Returns the cumulative beta probability density function.\n *\n * Category: Statistical\n *\n * @param {*} probability A probability associated with the chi-squared distribution.\n * @param {*} deg_freedom The number of degrees of freedom.\n * @returns\n */\nCHISQ.INV = (probability, deg_freedom) => {\n probability = parseNumber(probability);\n deg_freedom = parseNumber(deg_freedom);\n\n if (anyIsError(probability, deg_freedom)) {\n return value\n }\n\n return jStat.chisquare.inv(probability, deg_freedom)\n};\n\n/**\n * Returns the inverse of the one-tailed probability of the chi-squared distribution.\n *\n * Category: Statistical\n *\n * @param {*} probability A probability associated with the chi-squared distribution.\n * @param {*} deg_freedom The number of degrees of freedom.\n * @returns\n */\nCHISQ.INV.RT = (probability, deg_freedom) => {\n if (!probability | !deg_freedom) {\n return na\n }\n\n if (probability < 0 || probability > 1 || deg_freedom < 1 || deg_freedom > Math.pow(10, 10)) {\n return num\n }\n\n if (typeof probability !== 'number' || typeof deg_freedom !== 'number') {\n return value\n }\n\n return jStat.chisquare.inv(1.0 - probability, deg_freedom)\n};\n\n/**\n * Returns the test for independence.\n *\n * Category: Statistical\n *\n * @param {*} actual_range The range of data that contains observations to test against expected values.\n * @param {*} expected_range The range of data that contains the ratio of the product of row totals and column totals to the grand total.\n * @returns\n */\nCHISQ.TEST = function (actual_range, expected_range) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (!(actual_range instanceof Array) || !(expected_range instanceof Array)) {\n return value\n }\n\n if (actual_range.length !== expected_range.length) {\n return value\n }\n\n if (actual_range[0] && expected_range[0] && actual_range[0].length !== expected_range[0].length) {\n return value\n }\n\n const row = actual_range.length;\n\n let tmp, i, j;\n\n // Convert single-dimension array into two-dimension array\n\n for (i = 0; i < row; i++) {\n if (!(actual_range[i] instanceof Array)) {\n tmp = actual_range[i];\n\n actual_range[i] = [];\n actual_range[i].push(tmp);\n }\n\n if (!(expected_range[i] instanceof Array)) {\n tmp = expected_range[i];\n\n expected_range[i] = [];\n expected_range[i].push(tmp);\n }\n }\n\n const col = actual_range[0].length;\n const dof = col === 1 ? row - 1 : (row - 1) * (col - 1);\n\n let xsqr = 0;\n\n const Pi = Math.PI;\n\n for (i = 0; i < row; i++) {\n for (j = 0; j < col; j++) {\n xsqr += Math.pow(actual_range[i][j] - expected_range[i][j], 2) / expected_range[i][j];\n }\n }\n\n // Get independency by X square and its degree of freedom\n function ChiSq(xsqr, dof) {\n let p = Math.exp(-0.5 * xsqr);\n\n if (dof % 2 === 1) {\n p = p * Math.sqrt((2 * xsqr) / Pi);\n }\n\n let k = dof;\n\n while (k >= 2) {\n p = (p * xsqr) / k;\n k = k - 2;\n }\n\n let t = p;\n let a = dof;\n\n while (t > 0.0000000001 * p) {\n a = a + 2;\n t = (t * xsqr) / a;\n p = p + t;\n }\n\n return 1 - p\n }\n\n return Math.round(ChiSq(xsqr, dof) * 1000000) / 1000000\n};\n\nconst CONFIDENCE = {};\n\n/**\n * Returns the confidence interval for a population mean.\n *\n * Category: Statistical\n *\n * @param {*} alpha The significance level used to compute the confidence level. The confidence level equals 100*(1 - alpha)%, or in other words, an alpha of 0.05 indicates a 95 percent confidence level.\n * @param {*} standard_dev The population standard deviation for the data range and is assumed to be known.\n * @param {*} size The sample size.\n * @returns\n */\nCONFIDENCE.NORM = (alpha, standard_dev, size) => {\n alpha = parseNumber(alpha);\n standard_dev = parseNumber(standard_dev);\n size = parseNumber(size);\n\n if (anyIsError(alpha, standard_dev, size)) {\n return value\n }\n\n return jStat.normalci(1, alpha, standard_dev, size)[1] - 1\n};\n\n/**\n * Returns the confidence interval for a population mean, using a Student's t distribution.\n *\n * Category: Statistical\n *\n * @param {*} alpha The significance level used to compute the confidence level. The confidence level equals 100*(1 - alpha)%, or in other words, an alpha of 0.05 indicates a 95 percent confidence level.\n * @param {*} standard_dev The population standard deviation for the data range and is assumed to be known.\n * @param {*} size The sample size.\n * @returns\n */\nCONFIDENCE.T = (alpha, standard_dev, size) => {\n alpha = parseNumber(alpha);\n standard_dev = parseNumber(standard_dev);\n size = parseNumber(size);\n\n if (anyIsError(alpha, standard_dev, size)) {\n return value\n }\n\n return jStat.tci(1, alpha, standard_dev, size)[1] - 1\n};\n\n/**\n * Returns the correlation coefficient between two data sets.\n *\n * Category: Statistical\n *\n * @param {*} array1 A range of value values.\n * @param {*} array2 A second range of value values.\n * @returns\n */\nfunction CORREL(array1, array2) {\n array1 = parseNumberArray(flatten(array1));\n array2 = parseNumberArray(flatten(array2));\n\n if (anyIsError(array1, array2)) {\n return value\n }\n\n return jStat.corrcoeff(array1, array2)\n}\n\n/**\n * Counts how many numbers are in the list of arguments.\n *\n * Category: Statistical\n *\n * @param {*} args Cell reference, or range within which you want to count numbers.count numbers.\n * @returns\n */\nfunction COUNT() {\n const flatArguments = flatten(arguments);\n\n return numbers(flatArguments).length\n}\n\n/**\n * Counts how many values are in the list of arguments.\n *\n * Category: Statistical\n *\n * @param {*} args Arguments representing the values that you want to count.\n * @returns\n */\nfunction COUNTA() {\n const flatArguments = flatten(arguments);\n\n return flatArguments.length - COUNTBLANK(flatArguments)\n}\n\n/**\n * Counts the number of blank values within a range.\n *\n * Category: Statistical\n *\n * @param {*} args The range from which you want to count the blank values.\n * @returns\n */\nfunction COUNTBLANK() {\n const range = flatten(arguments);\n\n let blanks = 0;\n let element;\n\n for (let i = 0; i < range.length; i++) {\n element = range[i];\n\n if (element === undefined || element === null || element === '') {\n blanks++;\n }\n }\n\n return blanks\n}\n\n/**\n * Counts the number of values within a range that meet the given criteria.\n *\n * Category: Statistical\n *\n * @returns\n */\nfunction COUNTIF(range, criteria) {\n range = flatten(range);\n\n const isWildcard = criteria === void 0 || criteria === '*';\n\n if (isWildcard) {\n return range.length\n }\n\n let matches = 0;\n\n const tokenizedCriteria = parse(criteria + '');\n\n for (let i = 0; i < range.length; i++) {\n const value = range[i];\n const tokens = [createToken(value, TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n if (compute(tokens)) {\n matches++;\n }\n }\n\n return matches\n}\n\n/**\n * Counts the number of values within a range that meet multiple criteria.\n *\n * Category: Statistical\n *\n * @param {*} args Range in which to evaluate the associated criteria.\n * @returns\n */\nfunction COUNTIFS() {\n const args = argsToArray(arguments);\n const results = new Array(flatten(args[0]).length);\n\n for (let i = 0; i < results.length; i++) {\n results[i] = true;\n }\n\n for (let i = 0; i < args.length; i += 2) {\n const range = flatten(args[i]);\n const criteria = args[i + 1];\n const isWildcard = criteria === void 0 || criteria === '*';\n\n if (!isWildcard) {\n const tokenizedCriteria = parse(criteria + '');\n\n for (let j = 0; j < range.length; j++) {\n const value = range[j];\n const tokens = [createToken(value, TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n results[j] = results[j] && compute(tokens);\n }\n }\n }\n\n let result = 0;\n\n for (let i = 0; i < results.length; i++) {\n if (results[i]) {\n result++;\n }\n }\n\n return result\n}\n\nconst COVARIANCE = {};\n\n/**\n * Returns covariance, the average of the products of paired deviations.\n *\n * Category: Statistical\n *\n * @param {*} array1 The first value range of integers.\n * @param {*} array2 The second value range of integers.\n * @returns\n */\nCOVARIANCE.P = (array1, array2) => {\n array1 = parseNumberArray(flatten(array1));\n array2 = parseNumberArray(flatten(array2));\n\n if (anyIsError(array1, array2)) {\n return value\n }\n\n const mean1 = jStat.mean(array1);\n const mean2 = jStat.mean(array2);\n\n let result = 0;\n\n const n = array1.length;\n\n for (let i = 0; i < n; i++) {\n result += (array1[i] - mean1) * (array2[i] - mean2);\n }\n\n return result / n\n};\n\n/**\n * Returns the sample covariance, the average of the products deviations for each data point pair in two data sets.\n *\n * Category: Statistical\n *\n * @param {*} array1 The first value range of integers.\n * @param {*} array2 The second value range of integers.\n * @returns\n */\nCOVARIANCE.S = (array1, array2) => {\n array1 = parseNumberArray(flatten(array1));\n array2 = parseNumberArray(flatten(array2));\n\n if (anyIsError(array1, array2)) {\n return value\n }\n\n return jStat.covariance(array1, array2)\n};\n\n/**\n * Returns the sum of squares of deviations.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 arguments for which you want to calculate the sum of squared deviations. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nfunction DEVSQ() {\n const range = parseNumberArray(flatten(arguments));\n\n if (range instanceof Error) {\n return range\n }\n\n const mean = jStat.mean(range);\n\n let result = 0;\n\n for (let i = 0; i < range.length; i++) {\n result += Math.pow(range[i] - mean, 2);\n }\n\n return result\n}\n\nconst EXPON = {};\n\n/**\n * Returns the exponential distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The value of the function.\n * @param {*} lambda The parameter value.\n * @param {*} cumulative A logical value that indicates which form of the exponential function to provide. If cumulative is TRUE, EXPON.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function.\n * @returns\n */\nEXPON.DIST = (x, lambda, cumulative) => {\n x = parseNumber(x);\n lambda = parseNumber(lambda);\n\n if (anyIsError(x, lambda)) {\n return value\n }\n\n return cumulative ? jStat.exponential.cdf(x, lambda) : jStat.exponential.pdf(x, lambda)\n};\n\nconst F = {};\n\n/**\n * Returns the F probability distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The value at which to evaluate the function.\n * @param {*} deg_freedom1 The numerator degrees of freedom.\n * @param {*} deg_freedom2 The denominator degrees of freedom.\n * @param {*} cumulative A logical value that determines the form of the function. If cumulative is TRUE, F.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function.\n * @returns\n */\nF.DIST = (x, deg_freedom1, deg_freedom2, cumulative) => {\n x = parseNumber(x);\n deg_freedom1 = parseNumber(deg_freedom1);\n deg_freedom2 = parseNumber(deg_freedom2);\n\n if (anyIsError(x, deg_freedom1, deg_freedom2)) {\n return value\n }\n\n return cumulative\n ? jStat.centralF.cdf(x, deg_freedom1, deg_freedom2)\n : jStat.centralF.pdf(x, deg_freedom1, deg_freedom2)\n};\n\n/**\n * Returns the F probability distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The value at which to evaluate the function.\n * @param {*} deg_freedom1 The numerator degrees of freedom.\n * @param {*} deg_freedom2 The denominator degrees of freedom.\n * @returns\n */\nF.DIST.RT = function (x, deg_freedom1, deg_freedom2) {\n if (arguments.length !== 3) {\n return na\n }\n\n if (x < 0 || deg_freedom1 < 1 || deg_freedom2 < 1) {\n return num\n }\n\n if (typeof x !== 'number' || typeof deg_freedom1 !== 'number' || typeof deg_freedom2 !== 'number') {\n return value\n }\n\n return 1 - jStat.centralF.cdf(x, deg_freedom1, deg_freedom2)\n};\n\n/**\n * Returns the inverse of the F probability distribution.\n *\n * Category: Statistical\n *\n * @param {*} probability A probability associated with the F cumulative distribution.\n * @param {*} deg_freedom1 The numerator degrees of freedom.\n * @param {*} deg_freedom2 The denominator degrees of freedom.\n * @returns\n */\nF.INV = (probability, deg_freedom1, deg_freedom2) => {\n probability = parseNumber(probability);\n deg_freedom1 = parseNumber(deg_freedom1);\n deg_freedom2 = parseNumber(deg_freedom2);\n\n if (anyIsError(probability, deg_freedom1, deg_freedom2)) {\n return value\n }\n\n if (probability <= 0.0 || probability > 1.0) {\n return num\n }\n\n return jStat.centralF.inv(probability, deg_freedom1, deg_freedom2)\n};\n\n/**\n * Returns the inverse of the F probability distribution.\n *\n * Category: Statistical\n *\n * @param {*} probability A probability associated with the F cumulative distribution.\n * @param {*} deg_freedom1 The numerator degrees of freedom.\n * @param {*} deg_freedom2 The denominator degrees of freedom.\n * @returns\n */\nF.INV.RT = function (probability, deg_freedom1, deg_freedom2) {\n if (arguments.length !== 3) {\n return na\n }\n\n if (\n probability < 0 ||\n probability > 1 ||\n deg_freedom1 < 1 ||\n deg_freedom1 > Math.pow(10, 10) ||\n deg_freedom2 < 1 ||\n deg_freedom2 > Math.pow(10, 10)\n ) {\n return num\n }\n\n if (typeof probability !== 'number' || typeof deg_freedom1 !== 'number' || typeof deg_freedom2 !== 'number') {\n return value\n }\n\n return jStat.centralF.inv(1.0 - probability, deg_freedom1, deg_freedom2)\n};\n\n/**\n * Returns the result of an F-test.\n *\n * Category: Statistical\n *\n * @param {*} array1 The first array or range of data.\n * @param {*} array2 The second array or range of data.\n * @returns\n */\nF.TEST = (array1, array2) => {\n if (!array1 || !array2) {\n return na\n }\n\n if (!(array1 instanceof Array) || !(array2 instanceof Array)) {\n return na\n }\n\n if (array1.length < 2 || array2.length < 2) {\n return div0\n }\n\n const sumOfSquares = (values, x1) => {\n let sum = 0;\n\n for (let i = 0; i < values.length; i++) {\n sum += Math.pow(values[i] - x1, 2);\n }\n\n return sum\n };\n\n const x1 = SUM(array1) / array1.length;\n const x2 = SUM(array2) / array2.length;\n const sum1 = sumOfSquares(array1, x1) / (array1.length - 1);\n const sum2 = sumOfSquares(array2, x2) / (array2.length - 1);\n\n return sum1 / sum2\n};\n\n/**\n * Returns the Fisher transformation.\n *\n * Category: Statistical\n *\n * @param {*} x A numeric value for which you want the transformation.\n * @returns\n */\nfunction FISHER(x) {\n x = parseNumber(x);\n\n if (x instanceof Error) {\n return x\n }\n\n return Math.log((1 + x) / (1 - x)) / 2\n}\n\n/**\n * Returns the inverse of the Fisher transformation.\n *\n * Category: Statistical\n *\n * @param {*} y The value for which you want to perform the inverse of the transformation.\n * @returns\n */\nfunction FISHERINV(y) {\n y = parseNumber(y);\n\n if (y instanceof Error) {\n return y\n }\n\n const e2y = Math.exp(2 * y);\n\n return (e2y - 1) / (e2y + 1)\n}\n\n/**\n * Returns a value along a linear trend.\n *\n * Category: Statistical\n *\n * @param {*} x The data point for which you want to predict a value.\n * @param {*} known_ys The dependent array or range of data.\n * @param {*} known_xs The independent array or range of data.\n * @returns\n */\nfunction FORECAST(x, known_ys, known_xs) {\n x = parseNumber(x);\n known_ys = parseNumberArray(flatten(known_ys));\n known_xs = parseNumberArray(flatten(known_xs));\n\n if (anyIsError(x, known_ys, known_xs)) {\n return value\n }\n\n const xmean = jStat.mean(known_xs);\n const ymean = jStat.mean(known_ys);\n\n const n = known_xs.length;\n\n let num = 0;\n let den = 0;\n\n for (let i = 0; i < n; i++) {\n num += (known_xs[i] - xmean) * (known_ys[i] - ymean);\n den += Math.pow(known_xs[i] - xmean, 2);\n }\n\n const b = num / den;\n const a = ymean - b * xmean;\n\n return a + b * x\n}\n\n/**\n * Returns a frequency distribution as a vertical array.\n *\n * Category: Statistical\n *\n * @param {*} data_array An array of or reference to a set of values for which you want to count frequencies. If data_array contains no values, FREQUENCY returns an array of zeros.\n * @param {*} bins_array An array of or reference to intervals into which you want to group the values in data_array. If bins_array contains no values, FREQUENCY returns the number of elements in data_array.\n * @returns\n */\nfunction FREQUENCY(data_array, bins_array) {\n data_array = parseNumberArray(flatten(data_array));\n bins_array = parseNumberArray(flatten(bins_array));\n\n if (anyIsError(data_array, bins_array)) {\n return value\n }\n\n const n = data_array.length;\n const b = bins_array.length;\n const r = [];\n\n for (let i = 0; i <= b; i++) {\n r[i] = 0;\n\n for (let j = 0; j < n; j++) {\n if (i === 0) {\n if (data_array[j] <= bins_array[0]) {\n r[0] += 1;\n }\n } else if (i < b) {\n if (data_array[j] > bins_array[i - 1] && data_array[j] <= bins_array[i]) {\n r[i] += 1;\n }\n } else if (i === b) {\n if (data_array[j] > bins_array[b - 1]) {\n r[b] += 1;\n }\n }\n }\n }\n\n return r\n}\n\n/**\n * Returns the Gamma function value.\n *\n * Category: Statistical\n *\n * @param {*} number Returns a number.\n * @returns\n */\nfunction GAMMA(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n if (number === 0) {\n return num\n }\n\n if (parseInt(number, 10) === number && number < 0) {\n return num\n }\n\n return jStat.gammafn(number)\n}\n\n/**\n * Returns the gamma distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The value at which you want to evaluate the distribution.\n * @param {*} alpha A parameter to the distribution.\n * @param {*} beta A parameter to the distribution. If beta = 1, GAMMA.DIST returns the standard gamma distribution.\n * @param {*} cumulative A logical value that determines the form of the function. If cumulative is TRUE, GAMMA.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function.\n * @returns\n */\nGAMMA.DIST = function (value$1, alpha, beta, cumulative) {\n if (arguments.length !== 4) {\n return na\n }\n\n if (value$1 < 0 || alpha <= 0 || beta <= 0) {\n return value\n }\n\n if (typeof value$1 !== 'number' || typeof alpha !== 'number' || typeof beta !== 'number') {\n return value\n }\n\n return cumulative ? jStat.gamma.cdf(value$1, alpha, beta, true) : jStat.gamma.pdf(value$1, alpha, beta, false)\n};\n\n/**\n * Returns the inverse of the gamma cumulative distribution.\n *\n * Category: Statistical\n *\n * @param {*} probability The probability associated with the gamma distribution.\n * @param {*} alpha A parameter to the distribution.\n * @param {*} beta A parameter to the distribution. If beta = 1, GAMMA.INV returns the standard gamma distribution.\n * @returns\n */\nGAMMA.INV = function (probability, alpha, beta) {\n if (arguments.length !== 3) {\n return na\n }\n\n if (probability < 0 || probability > 1 || alpha <= 0 || beta <= 0) {\n return num\n }\n\n if (typeof probability !== 'number' || typeof alpha !== 'number' || typeof beta !== 'number') {\n return value\n }\n\n return jStat.gamma.inv(probability, alpha, beta)\n};\n\n/**\n * Returns the natural logarithm of the gamma function, Γ(x).\n *\n * Category: Statistical\n *\n * @param {*} x The value for which you want to calculate GAMMALN.\n * @returns\n */\nfunction GAMMALN(x) {\n x = parseNumber(x);\n\n if (x instanceof Error) {\n return x\n }\n\n return jStat.gammaln(x)\n}\n\n/**\n * Returns the natural logarithm of the gamma function, Γ(x).\n *\n * Category: Statistical\n *\n * @param {*} x The value for which you want to calculate GAMMALN.PRECISE.\n * @returns\n */\nGAMMALN.PRECISE = function (x) {\n if (arguments.length !== 1) {\n return na\n }\n\n if (x <= 0) {\n return num\n }\n\n if (typeof x !== 'number') {\n return value\n }\n\n return jStat.gammaln(x)\n};\n\n/**\n * Returns 0.5 less than the standard normal cumulative distribution.\n *\n * Category: Statistical\n *\n * @param {*} z Returns a number.\n * @returns\n */\nfunction GAUSS(z) {\n z = parseNumber(z);\n\n if (z instanceof Error) {\n return z\n }\n\n return jStat.normal.cdf(z, 0, 1) - 0.5\n}\n\n/**\n * Returns the geometric mean.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 arguments for which you want to calculate the mean. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nfunction GEOMEAN() {\n const args = parseNumberArray(flatten(arguments));\n\n if (args instanceof Error) {\n return args\n }\n\n return jStat.geomean(args)\n}\n\n/**\n * Returns values along an exponential trend.\n *\n * Category: Statistical\n *\n * @param {*} known_y The set of y-values you already know in the relationship y = b*m^x.\n - If the array known_y's is in a single column, then each column of known_x's is interpreted as a separate variable.\n - If the array known_y's is in a single row, then each row of known_x's is interpreted as a separate variable.\n - If any of the numbers in known_y's is 0 or negative, GROWTH returns the #NUM! error value.\n * @param {*} [known_x] Optional. An optional set of x-values that you may already know in the relationship y = b*m^x.\n - The array known_x's can include one or more sets of variables. If only one variable is used, known_y's and known_x's can be ranges of any shape, as long as they have equal dimensions. If more than one variable is used, known_y's must be a vector (that is, a range with a height of one row or a width of one column).\n - If known_x's is omitted, it is assumed to be the array {1,2,3,...} that is the same size as known_y's.\n * @param {*} [new_x] Optional. Are new x-values for which you want GROWTH to return corresponding y-values.\n - new_x's must include a column (or row) for each independent variable, just as known_x's does. So, if known_y's is in a single column, known_x's and new_x's must have the same number of columns. If known_y's is in a single row, known_x's and new_x's must have the same number of rows.\n - If new_x's is omitted, it is assumed to be the same as known_x's.\n - If both known_x's and new_x's are omitted, they are assumed to be the array {1,2,3,...} that is the same size as known_y's.\n * @param {*} [use_const] Optional. A logical value specifying whether to force the constant b to equal 1. If const is TRUE or omitted, b is calculated normally. If const is FALSE, b is set equal to 1 and the m-values are adjusted so that y = m^x.\n - If const is TRUE or omitted, b is calculated normally.\n - If const is FALSE, b is set equal to 1 and the m-values are adjusted so that y = m^x.\n * @returns\n */\nfunction GROWTH(known_y, known_x, new_x, use_const) {\n // Credits: Ilmari Karonen (http://stackoverflow.com/questions/14161990/how-to-implement-growth-function-in-javascript)\n known_y = parseNumberArray(flatten(known_y));\n\n if (known_y instanceof Error) {\n return known_y\n }\n\n // Default values for optional parameters:\n let i;\n\n if (known_x === undefined) {\n known_x = [];\n\n for (i = 1; i <= known_y.length; i++) {\n known_x.push(i);\n }\n }\n\n if (new_x === undefined) {\n new_x = known_x;\n }\n\n known_x = parseNumberArray(flatten(known_x));\n new_x = parseNumberArray(flatten(new_x));\n\n if (anyIsError(known_x, new_x)) {\n return value\n }\n\n if (use_const === undefined) {\n use_const = true;\n }\n\n // Calculate sums over the data:\n const n = known_y.length;\n\n let avg_x = 0;\n let avg_y = 0;\n let avg_xy = 0;\n let avg_xx = 0;\n\n for (i = 0; i < n; i++) {\n const x = known_x[i];\n const y = Math.log(known_y[i]);\n\n avg_x += x;\n avg_y += y;\n avg_xy += x * y;\n avg_xx += x * x;\n }\n\n avg_x /= n;\n avg_y /= n;\n avg_xy /= n;\n avg_xx /= n;\n\n // Compute linear regression coefficients:\n let beta;\n let alpha;\n\n if (use_const) {\n beta = (avg_xy - avg_x * avg_y) / (avg_xx - avg_x * avg_x);\n alpha = avg_y - beta * avg_x;\n } else {\n beta = avg_xy / avg_xx;\n alpha = 0;\n }\n\n // Compute and return result array:\n const new_y = [];\n\n for (i = 0; i < new_x.length; i++) {\n new_y.push(Math.exp(alpha + beta * new_x[i]));\n }\n\n return new_y\n}\n\n/**\n * Returns the harmonic mean.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 arguments for which you want to calculate the mean. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nfunction HARMEAN() {\n const range = parseNumberArray(flatten(arguments));\n\n if (range instanceof Error) {\n return range\n }\n\n const n = range.length;\n\n let den = 0;\n\n for (let i = 0; i < n; i++) {\n den += 1 / range[i];\n }\n\n return n / den\n}\n\nconst HYPGEOM = {};\n\n/**\n * Returns the hypergeometric distribution.\n *\n * Category: Statistical\n *\n * @param {*} sample_s The number of successes in the sample.\n * @param {*} number_sample The size of the sample.\n * @param {*} population_s The number of successes in the population.\n * @param {*} number_pop The population size.\n * @param {*} cumulative A logical value that determines the form of the function. If cumulative is TRUE, then HYPGEOM.DIST returns the cumulative distribution function; if FALSE, it returns the probability mass function.\n * @returns\n */\nHYPGEOM.DIST = (sample_s, number_sample, population_s, number_pop, cumulative) => {\n sample_s = parseNumber(sample_s);\n number_sample = parseNumber(number_sample);\n population_s = parseNumber(population_s);\n number_pop = parseNumber(number_pop);\n\n if (anyIsError(sample_s, number_sample, population_s, number_pop)) {\n return value\n }\n\n function pdf(x, n, M, N) {\n return (COMBIN(M, x) * COMBIN(N - M, n - x)) / COMBIN(N, n)\n }\n\n function cdf(x, n, M, N) {\n let result = 0;\n\n for (let i = 0; i <= x; i++) {\n result += pdf(i, n, M, N);\n }\n\n return result\n }\n\n return cumulative\n ? cdf(sample_s, number_sample, population_s, number_pop)\n : pdf(sample_s, number_sample, population_s, number_pop)\n};\n\n/**\n * Returns the intercept of the linear regression line.\n *\n * Category: Statistical\n *\n * @param {*} known_y The dependent set of observations or data.\n * @param {*} known_x The independent set of observations or data.\n * @returns\n */\nfunction INTERCEPT(known_y, known_x) {\n known_y = parseNumberArray(known_y);\n known_x = parseNumberArray(known_x);\n\n if (anyIsError(known_y, known_x)) {\n return value\n }\n\n if (known_y.length !== known_x.length) {\n return na\n }\n\n return FORECAST(0, known_y, known_x)\n}\n\n/**\n * Returns the kurtosis of a data set.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 arguments for which you want to calculate kurtosis. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nfunction KURT() {\n const range = parseNumberArray(flatten(arguments));\n\n if (range instanceof Error) {\n return range\n }\n\n const mean = jStat.mean(range);\n const n = range.length;\n\n let sigma = 0;\n\n for (let i = 0; i < n; i++) {\n sigma += Math.pow(range[i] - mean, 4);\n }\n\n sigma = sigma / Math.pow(jStat.stdev(range, true), 4);\n\n return ((n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) * sigma - (3 * (n - 1) * (n - 1)) / ((n - 2) * (n - 3))\n}\n\n/**\n * Returns the k-th largest value in a data set.\n *\n * Category: Statistical\n *\n * @param {*} array The array or range of data for which you want to determine the k-th largest value.\n * @param {*} k The position (from the largest) in the array or value range of data to return.\n * @returns\n */\nfunction LARGE(array, k) {\n const someError = anyError.apply(undefined, array);\n\n if (someError) {\n return someError\n }\n\n if (anyIsError(k)) {\n return k\n }\n\n array = numbers(flatten(array));\n k = parseNumber(k);\n\n if (k < 0 || array.length < k) {\n return value\n }\n\n return array.sort((a, b) => b - a)[k - 1]\n}\n\n/**\n * Returns the parameters of a linear trend.\n *\n * Category: Statistical\n *\n * @param {*} known_y The set of y-values that you already know in the relationship y = mx + b.\n - If the range of known_y's is in a single column, each column of known_x's is interpreted as a separate variable.\n - If the range of known_y's is contained in a single row, each row of known_x's is interpreted as a separate variable.\n * @param {*} [known_x] Optional. A set of x-values that you may already know in the relationship y = mx + b.\n - The range of known_x's can include one or more sets of variables. If only one variable is used, known_y's and known_x's can be ranges of any shape, as long as they have equal dimensions. If more than one variable is used, known_y's must be a vector (that is, a range with a height of one row or a width of one column).\n - If known_x's is omitted, it is assumed to be the array {1,2,3,...} that is the same size as known_y's.\n * @returns\n */\nfunction LINEST(known_y, known_x) {\n known_y = parseNumberArray(flatten(known_y));\n known_x = parseNumberArray(flatten(known_x));\n\n if (anyIsError(known_y, known_x)) {\n return value\n }\n\n const ymean = jStat.mean(known_y);\n const xmean = jStat.mean(known_x);\n const n = known_x.length;\n\n let num = 0;\n let den = 0;\n\n for (let i = 0; i < n; i++) {\n num += (known_x[i] - xmean) * (known_y[i] - ymean);\n den += Math.pow(known_x[i] - xmean, 2);\n }\n\n const m = num / den;\n const b = ymean - m * xmean;\n\n return [m, b]\n}\n\n// According to Microsoft:\n// http://office.microsoft.com/en-us/starter-help/logest-function-HP010342665.aspx\n// LOGEST returns are based on the following linear model:\n// ln y = x1 ln m1 + ... + xn ln mn + ln b\n/**\n * Returns the parameters of an exponential trend.\n *\n * Category: Statistical\n *\n * @param {*} known_y The set of y-values you already know in the relationship y = b*m^x.\n - If the array known_y's is in a single column, then each column of known_x's is interpreted as a separate variable.\n - If the array known_y's is in a single row, then each row of known_x's is interpreted as a separate variable.\n * @param {*} [known_x] Optional. An optional set of x-values that you may already know in the relationship y = b*m^x.\n - The array known_x's can include one or more sets of variables. If only one variable is used, known_y's and known_x's can be ranges of any shape, as long as they have equal dimensions. If more than one variable is used, known_y's must be a range of values with a height of one row or a width of one column (which is also known as a vector).\n - If known_x's is omitted, it is assumed to be the array {1,2,3,...} that is the same size as known_y's.\n * @returns\n */\nfunction LOGEST(known_y, known_x) {\n known_y = parseNumberArray(flatten(known_y));\n known_x = parseNumberArray(flatten(known_x));\n\n if (anyIsError(known_y, known_x)) {\n return value\n }\n\n if (known_y.length !== known_x.length) {\n return value\n }\n\n for (let i = 0; i < known_y.length; i++) {\n known_y[i] = Math.log(known_y[i]);\n }\n\n const result = LINEST(known_y, known_x);\n\n result[0] = Math.round(Math.exp(result[0]) * 1000000) / 1000000;\n result[1] = Math.round(Math.exp(result[1]) * 1000000) / 1000000;\n\n return result\n}\n\nconst LOGNORM = {};\n\n/**\n * Returns the cumulative lognormal distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The value at which to evaluate the function.\n * @param {*} mean The mean of ln(x).\n * @param {*} standard_dev The standard deviation of ln(x).\n * @param {*} cumulative A logical value that determines the form of the function. If cumulative is TRUE, LOGNORM.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function.\n * @returns\n */\nLOGNORM.DIST = (x, mean, standard_dev, cumulative) => {\n x = parseNumber(x);\n mean = parseNumber(mean);\n standard_dev = parseNumber(standard_dev);\n\n if (anyIsError(x, mean, standard_dev)) {\n return value\n }\n\n return cumulative ? jStat.lognormal.cdf(x, mean, standard_dev) : jStat.lognormal.pdf(x, mean, standard_dev)\n};\n\n/**\n * Returns the inverse of the lognormal cumulative distribution.\n *\n * Category: Statistical\n *\n * @param {*} probability A probability associated with the lognormal distribution.\n * @param {*} mean The mean of ln(x).\n * @param {*} standard_dev The standard deviation of ln(x).\n * @returns\n */\nLOGNORM.INV = (probability, mean, standard_dev) => {\n probability = parseNumber(probability);\n mean = parseNumber(mean);\n standard_dev = parseNumber(standard_dev);\n\n if (anyIsError(probability, mean, standard_dev)) {\n return value\n }\n\n return jStat.lognormal.inv(probability, mean, standard_dev)\n};\n\n/**\n * Returns the maximum value in a list of arguments.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 numbers for which you want to find the maximum value.\n * @returns\n */\nfunction MAX() {\n const flatArguments = flatten(arguments);\n const someError = anyError.apply(undefined, flatArguments);\n\n if (someError) {\n return someError\n }\n\n const range = numbers(flatArguments);\n\n return range.length === 0 ? 0 : Math.max.apply(Math, range)\n}\n\n/**\n * Returns the maximum value in a list of arguments, including numbers, text, and logical values.\n *\n * Category: Statistical\n *\n * @param {*} args value1, value2,... Number arguments 2 to 255 for which you want to find the largest value.\n * @returns\n */\nfunction MAXA() {\n const flatArguments = flatten(arguments);\n const someError = anyError.apply(undefined, flatArguments);\n\n if (someError) {\n return someError\n }\n\n let range = arrayValuesToNumbers(flatArguments);\n\n range = range.map((value) => (value === undefined || value === null ? 0 : value));\n\n return range.length === 0 ? 0 : Math.max.apply(Math, range)\n}\n\n/**\n * Returns the maximum of all values in a range that meet multiple criteria.\n *\n * Category: Statistical\n *\n * @returns\n */\nfunction MAXIFS() {\n const values = applyCriteria(...arguments);\n\n return values.length === 0 ? 0 : Math.max.apply(Math, values)\n}\n\n/**\n * Returns the median of the given numbers.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 numbers for which you want the median.\n * @returns\n */\nfunction MEDIAN() {\n const flatArguments = flatten(arguments);\n const someError = anyError.apply(undefined, flatArguments);\n\n if (someError) {\n return someError\n }\n\n const range = arrayValuesToNumbers(flatArguments);\n\n let result = jStat.median(range);\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n}\n\n/**\n * Returns the minimum value in a list of arguments.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number1 is optional, subsequent numbers are optional. 1 to 255 numbers for which you want to find the minimum value.\n * @returns\n */\nfunction MIN() {\n const flatArguments = flatten(arguments);\n const someError = anyError.apply(undefined, flatArguments);\n\n if (someError) {\n return someError\n }\n\n const range = numbers(flatArguments);\n\n return range.length === 0 ? 0 : Math.min.apply(Math, range)\n}\n\n/**\n * Returns the smallest value in a list of arguments, including numbers, text, and logical values.\n *\n * Category: Statistical\n *\n * @param {*} args value1, value2, ... Value1 is required, subsequent values are optional. 1 to 255 values for which you want to find the smallest value.\n * @returns\n */\nfunction MINA() {\n const flatArguments = flatten(arguments);\n const someError = anyError.apply(undefined, flatArguments);\n\n if (someError) {\n return someError\n }\n\n let range = arrayValuesToNumbers(flatArguments);\n\n range = range.map((value) => (value === undefined || value === null ? 0 : value));\n\n return range.length === 0 ? 0 : Math.min.apply(Math, range)\n}\n\n/**\n * Returns the minimum of all values in a range that meet multiple criteria.\n *\n * Category: Statistical\n *\n * @returns\n */\nfunction MINIFS() {\n const values = applyCriteria(...arguments);\n\n return values.length === 0 ? 0 : Math.min.apply(Math, values)\n}\n\nconst MODE = {};\n\n/**\n * Returns a vertical array of the most frequently occurring, or repetitive values in an array or range of data.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number arguments 2 to 254 for which you want to calculate the mode. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nMODE.MULT = function () {\n // Credits: Roönaän\n const range = parseNumberArray(flatten(arguments));\n\n if (range instanceof Error) {\n return range\n }\n\n const n = range.length;\n const count = {};\n\n let maxItems = [];\n let max = 0;\n let currentItem;\n\n for (let i = 0; i < n; i++) {\n currentItem = range[i];\n count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1;\n\n if (count[currentItem] > max) {\n max = count[currentItem];\n maxItems = [];\n }\n\n if (count[currentItem] === max) {\n maxItems[maxItems.length] = currentItem;\n }\n }\n\n return maxItems\n};\n\n/**\n * Returns the most common value in a data set.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Arguments 2 to 254 for which you want to calculate the mode. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nMODE.SNGL = function () {\n const range = parseNumberArray(flatten(arguments));\n\n if (range instanceof Error) {\n return range\n }\n\n return MODE.MULT(range).sort((a, b) => a - b)[0]\n};\n\nconst NEGBINOM = {};\n\n/**\n * Returns the negative binomial distribution.\n *\n * Category: Statistical\n *\n * @param {*} number_f The number of failures.\n * @param {*} number_s The threshold number of successes.\n * @param {*} probability_s The probability of a success.\n * @param {*} cumulative A logical value that determines the form of the function. If cumulative is TRUE, NEGBINOM.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function.\n * @returns\n */\nNEGBINOM.DIST = (number_f, number_s, probability_s, cumulative) => {\n number_f = parseNumber(number_f);\n number_s = parseNumber(number_s);\n probability_s = parseNumber(probability_s);\n\n if (anyIsError(number_f, number_s, probability_s)) {\n return value\n }\n\n return cumulative\n ? jStat.negbin.cdf(number_f, number_s, probability_s)\n : jStat.negbin.pdf(number_f, number_s, probability_s)\n};\n\nconst NORM = {};\n\n/**\n * Returns the normal cumulative distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The value for which you want the distribution.\n * @param {*} mean The arithmetic mean of the distribution.\n * @param {*} standard_dev The standard deviation of the distribution.\n * @param {*} cumulative A logical value that determines the form of the function. If cumulative is TRUE, NORM.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function.\n * @returns\n */\nNORM.DIST = (x, mean, standard_dev, cumulative) => {\n x = parseNumber(x);\n mean = parseNumber(mean);\n standard_dev = parseNumber(standard_dev);\n\n if (anyIsError(x, mean, standard_dev)) {\n return value\n }\n\n if (standard_dev <= 0) {\n return num\n }\n\n // Return normal distribution computed by jStat [http://jstat.org]\n return cumulative ? jStat.normal.cdf(x, mean, standard_dev) : jStat.normal.pdf(x, mean, standard_dev)\n};\n\n/**\n * Returns the inverse of the normal cumulative distribution.\n *\n * Category: Statistical\n *\n * @param {*} probability A probability corresponding to the normal distribution.\n * @param {*} mean The arithmetic mean of the distribution.\n * @param {*} standard_dev The standard deviation of the distribution.\n * @returns\n */\nNORM.INV = (probability, mean, standard_dev) => {\n probability = parseNumber(probability);\n mean = parseNumber(mean);\n standard_dev = parseNumber(standard_dev);\n\n if (anyIsError(probability, mean, standard_dev)) {\n return value\n }\n\n return jStat.normal.inv(probability, mean, standard_dev)\n};\n\nNORM.S = {};\n\n/**\n * Returns the standard normal cumulative distribution.\n *\n * Category: Statistical\n *\n * @param {*} z The value for which you want the distribution.\n * @param {*} cumulative Cumulative is a logical value that determines the form of the function. If cumulative is TRUE, NORMS.DIST returns the cumulative distribution function; if FALSE, it returns the probability mass function.\n * @returns\n */\nNORM.S.DIST = (z, cumulative) => {\n z = parseNumber(z);\n\n if (z instanceof Error) {\n return value\n }\n\n return cumulative ? jStat.normal.cdf(z, 0, 1) : jStat.normal.pdf(z, 0, 1)\n};\n\n/**\n * Returns the inverse of the standard normal cumulative distribution.\n *\n * Category: Statistical\n *\n * @param {*} probability A probability corresponding to the normal distribution.\n * @returns\n */\nNORM.S.INV = (probability) => {\n probability = parseNumber(probability);\n\n if (probability instanceof Error) {\n return value\n }\n\n return jStat.normal.inv(probability, 0, 1)\n};\n\n/**\n * Returns the Pearson product moment correlation coefficient.\n *\n * Category: Statistical\n *\n * @param {*} array1 A set of independent values.\n * @param {*} array2 A set of dependent values.\n * @returns\n */\nfunction PEARSON(array1, array2) {\n array2 = parseNumberArray(flatten(array2));\n array1 = parseNumberArray(flatten(array1));\n\n if (anyIsError(array2, array1)) {\n return value\n }\n\n const xmean = jStat.mean(array1);\n const ymean = jStat.mean(array2);\n const n = array1.length;\n\n let num = 0;\n let den1 = 0;\n let den2 = 0;\n\n for (let i = 0; i < n; i++) {\n num += (array1[i] - xmean) * (array2[i] - ymean);\n den1 += Math.pow(array1[i] - xmean, 2);\n den2 += Math.pow(array2[i] - ymean, 2);\n }\n\n return num / Math.sqrt(den1 * den2)\n}\n\nconst PERCENTILE = {};\n\n/**\n * Returns the k-th percentile of values in a range, where k is in the range 0..1, exclusive.\n *\n * Category: Statistical\n *\n * @returns\n */\nPERCENTILE.EXC = (array, k) => {\n array = parseNumberArray(flatten(array));\n k = parseNumber(k);\n\n if (anyIsError(array, k)) {\n return value\n }\n\n array = array.sort((a, b) => a - b);\n\n const n = array.length;\n\n if (k < 1 / (n + 1) || k > 1 - 1 / (n + 1)) {\n return num\n }\n\n const l = k * (n + 1) - 1;\n const fl = Math.floor(l);\n\n return cleanFloat(l === fl ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]))\n};\n\n/**\n * Returns the k-th percentile of values in a range.\n *\n * Category: Statistical\n *\n * @param {*} array The array or range of data that defines relative standing.\n * @param {*} k The percentile value in the range 0..1, inclusive.\n * @returns\n */\nPERCENTILE.INC = (array, k) => {\n array = parseNumberArray(flatten(array));\n k = parseNumber(k);\n\n if (anyIsError(array, k)) {\n return value\n }\n\n array = array.sort((a, b) => a - b);\n\n const n = array.length;\n const l = k * (n - 1);\n const fl = Math.floor(l);\n\n return cleanFloat(l === fl ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]))\n};\n\nconst PERCENTRANK = {};\n\n/**\n * Returns the rank of a value in a data set as a percentage (0..1, exclusive) of the data set.\n *\n * Category: Statistical\n *\n * @param {*} array The array or range of data with numeric values that defines relative standing\n * @param {*} x The value for which you want to know the rank.\n * @param {*} [significance] Optional. A value that identifies the number of significant digits for the returned percentage value. If omitted, PERCENTRANK.EXC uses three digits (0.xxx).\n * @returns\n */\nPERCENTRANK.EXC = (array, x, significance) => {\n significance = significance === undefined ? 3 : significance;\n array = parseNumberArray(flatten(array));\n x = parseNumber(x);\n significance = parseNumber(significance);\n\n if (anyIsError(array, x, significance)) {\n return value\n }\n\n array = array.sort((a, b) => a - b);\n\n const uniques = UNIQUE.apply(null, array);\n const n = array.length;\n const m = uniques.length;\n const power = Math.pow(10, significance);\n\n let result = 0;\n let match = false;\n let i = 0;\n\n while (!match && i < m) {\n if (x === uniques[i]) {\n result = (array.indexOf(uniques[i]) + 1) / (n + 1);\n match = true;\n } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {\n result = (array.indexOf(uniques[i]) + 1 + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n + 1);\n match = true;\n }\n\n i++;\n }\n\n return Math.floor(result * power) / power\n};\n\n/**\n * Returns the percentage rank of a value in a data set.\n *\n * Category: Statistical\n *\n * @param {*} array The array or range of data with numeric values that defines relative standing.\n * @param {*} x The value for which you want to know the rank.\n * @param {*} [significance] Optional. A value that identifies the number of significant digits for the returned percentage value. If omitted, PERCENTRANK.INC uses three digits (0.xxx).\n * @returns\n */\nPERCENTRANK.INC = (array, x, significance) => {\n significance = significance === undefined ? 3 : significance;\n array = parseNumberArray(flatten(array));\n x = parseNumber(x);\n significance = parseNumber(significance);\n\n if (anyIsError(array, x, significance)) {\n return value\n }\n\n array = array.sort((a, b) => a - b);\n\n const uniques = UNIQUE.apply(null, array);\n const n = array.length;\n const m = uniques.length;\n const power = Math.pow(10, significance);\n\n let result = 0;\n let match = false;\n let i = 0;\n\n while (!match && i < m) {\n if (x === uniques[i]) {\n result = array.indexOf(uniques[i]) / (n - 1);\n match = true;\n } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {\n result = (array.indexOf(uniques[i]) + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n - 1);\n match = true;\n }\n\n i++;\n }\n\n return Math.floor(result * power) / power\n};\n\n/**\n * Returns the number of permutations for a given number of objects.\n *\n * Category: Statistical\n *\n * @param {*} number An integer that describes the number of objects.\n * @param {*} number_chosen An integer that describes the number of objects in each permutation.\n * @returns\n */\nfunction PERMUT(number, number_chosen) {\n number = parseNumber(number);\n number_chosen = parseNumber(number_chosen);\n\n if (anyIsError(number, number_chosen)) {\n return value\n }\n\n return FACT(number) / FACT(number - number_chosen)\n}\n\n/**\n * Returns the number of permutations for a given number of objects (with repetitions) that can be selected from the total objects.\n *\n * Category: Statistical\n *\n * @param {*} number An integer that describes the total number of objects.\n * @param {*} number_chosen An integer that describes the number of objects in each permutation.\n * @returns\n */\nfunction PERMUTATIONA(number, number_chosen) {\n number = parseNumber(number);\n number_chosen = parseNumber(number_chosen);\n\n if (anyIsError(number, number_chosen)) {\n return value\n }\n\n return Math.pow(number, number_chosen)\n}\n\n/**\n * Returns the value of the density function for a standard normal distribution.\n *\n * Category: Statistical\n *\n * @param {*} x X is the number for which you want the density of the standard normal distribution.\n * @returns\n */\nfunction PHI(x) {\n x = parseNumber(x);\n\n if (x instanceof Error) {\n return value\n }\n\n return Math.exp(-0.5 * x * x) / SQRT2PI\n}\n\nconst POISSON = {};\n\n/**\n * Returns the Poisson distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The number of events.\n * @param {*} mean The expected numeric value.\n * @param {*} cumulative A logical value that determines the form of the probability distribution returned. If cumulative is TRUE, POISSON.DIST returns the cumulative Poisson probability that the number of random events occurring will be between zero and x inclusive; if FALSE, it returns the Poisson probability mass function that the number of events occurring will be exactly x.\n * @returns\n */\nPOISSON.DIST = (x, mean, cumulative) => {\n x = parseNumber(x);\n mean = parseNumber(mean);\n\n if (anyIsError(x, mean)) {\n return value\n }\n\n return cumulative ? jStat.poisson.cdf(x, mean) : jStat.poisson.pdf(x, mean)\n};\n\n/**\n * Returns the probability that values in a range are between two limits.\n *\n * Category: Statistical\n *\n * @param {*} x_range The range of numeric values of x with which there are associated probabilities.\n * @param {*} prob_range A set of probabilities associated with values in x_range.\n * @param {*} [lower_limit] Optional. The lower bound on the value for which you want a probability.\n * @param {*} [upper_limit] Optional. The optional upper bound on the value for which you want a probability.\n * @returns\n */\nfunction PROB(x_range, prob_range, lower_limit, upper_limit) {\n if (lower_limit === undefined) {\n return 0\n }\n\n upper_limit = upper_limit === undefined ? lower_limit : upper_limit;\n\n x_range = parseNumberArray(flatten(x_range));\n prob_range = parseNumberArray(flatten(prob_range));\n lower_limit = parseNumber(lower_limit);\n upper_limit = parseNumber(upper_limit);\n\n if (anyIsError(x_range, prob_range, lower_limit, upper_limit)) {\n return value\n }\n\n if (lower_limit === upper_limit) {\n return x_range.indexOf(lower_limit) >= 0 ? prob_range[x_range.indexOf(lower_limit)] : 0\n }\n\n const sorted = x_range.sort((a, b) => a - b);\n const n = sorted.length;\n\n let result = 0;\n\n for (let i = 0; i < n; i++) {\n if (sorted[i] >= lower_limit && sorted[i] <= upper_limit) {\n result += prob_range[x_range.indexOf(sorted[i])];\n }\n }\n\n return result\n}\n\nconst QUARTILE = {};\n\n/**\n * Returns the quartile of the data set, based on percentile values from 0..1, exclusive.\n *\n * Category: Statistical\n *\n * @param {*} array The array or value range of numeric values for which you want the quartile value.\n * @param {*} quart Indicates which value to return.\n * @returns\n */\nQUARTILE.EXC = (range, quart) => {\n range = parseNumberArray(numbers(flatten(range)));\n quart = parseNumber(quart);\n\n if (anyIsError(range, quart)) {\n return value\n }\n\n switch (quart) {\n case 1:\n return PERCENTILE.EXC(range, 0.25)\n case 2:\n return PERCENTILE.EXC(range, 0.5)\n case 3:\n return PERCENTILE.EXC(range, 0.75)\n default:\n return num\n }\n};\n\n/**\n * Returns the quartile of a data set.\n *\n * Category: Statistical\n *\n * @param {*} array The array or value range of numeric values for which you want the quartile value.\n * @param {*} quart Indicates which value to return.\n * @returns\n */\nQUARTILE.INC = (range, quart) => {\n range = parseNumberArray(numbers(flatten(range)));\n quart = parseNumber(quart);\n\n if (anyIsError(range, quart)) {\n return value\n }\n\n switch (quart) {\n case 1:\n return PERCENTILE.INC(range, 0.25)\n case 2:\n return PERCENTILE.INC(range, 0.5)\n case 3:\n return PERCENTILE.INC(range, 0.75)\n default:\n return num\n }\n};\n\nconst RANK = {};\n\n/**\n * Returns the rank of a number in a list of numbers.\n *\n * Category: Statistical\n *\n * @param {*} number The number whose rank you want to find.\n * @param {*} ref An array of, or a reference to, a list of numbers. Nonnumeric values in Ref are ignored.\n * @param {*} [order] Optional. A number specifying how to rank number.\n * @returns\n */\nRANK.AVG = (number, ref, order) => {\n number = parseNumber(number);\n ref = parseNumberArray(flatten(ref));\n\n if (anyIsError(number, ref)) {\n return value\n }\n\n ref = flatten(ref);\n order = order || false;\n\n const sort = order ? (a, b) => a - b : (a, b) => b - a;\n\n ref = ref.sort(sort);\n\n const length = ref.length;\n\n let count = 0;\n\n for (let i = 0; i < length; i++) {\n if (ref[i] === number) {\n count++;\n }\n }\n\n return count > 1 ? (2 * ref.indexOf(number) + count + 1) / 2 : ref.indexOf(number) + 1\n};\n\n/**\n * Returns the rank of a number in a list of numbers.\n *\n * Category: Statistical\n *\n * @param {*} number The number whose rank you want to find.\n * @param {*} ref An array of, or a reference to, a list of numbers. Non-numeric values in Ref are ignored.\n * @param {*} [order] Optional. A number specifying how to rank number.\n * @returns\n */\nRANK.EQ = (number, ref, order) => {\n number = parseNumber(number);\n ref = parseNumberArray(flatten(ref));\n\n if (anyIsError(number, ref)) {\n return value\n }\n\n order = order || false;\n\n const sort = order ? (a, b) => a - b : (a, b) => b - a;\n\n ref = ref.sort(sort);\n\n return ref.indexOf(number) + 1\n};\n\n/**\n * Returns the row number of a reference.\n *\n * Category: Lookup and reference\n *\n * @param {*} reference the value or range of values for which you want the row number.\n * @param {*} index\n * @returns\n */\nfunction ROW(reference, index) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (index < 0) {\n return num\n }\n\n if (!(reference instanceof Array) || typeof index !== 'number') {\n return value\n }\n\n if (reference.length === 0) {\n return undefined\n }\n\n return jStat.row(reference, index)\n}\n\n/**\n * Returns the square of the Pearson product moment correlation coefficient.\n *\n * Category: Statistical\n *\n * @param {*} known_y An array or range of data points.\n * @param {*} known_x An array or range of data points.\n * @returns\n */\nfunction RSQ(known_y, known_x) {\n // no need to flatten here, PEARSON will take care of that\n known_y = parseNumberArray(flatten(known_y));\n known_x = parseNumberArray(flatten(known_x));\n\n if (anyIsError(known_y, known_x)) {\n return value\n }\n\n return Math.pow(PEARSON(known_y, known_x), 2)\n}\n\n/**\n * Returns the skewness of a distribution.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 arguments for which you want to calculate skewness. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nfunction SKEW() {\n const range = parseNumberArray(flatten(arguments));\n\n if (range instanceof Error) {\n return range\n }\n\n const mean = jStat.mean(range);\n const n = range.length;\n\n let sigma = 0;\n\n for (let i = 0; i < n; i++) {\n sigma += Math.pow(range[i] - mean, 3);\n }\n\n return (n * sigma) / ((n - 1) * (n - 2) * Math.pow(jStat.stdev(range, true), 3))\n}\n\n/**\n * Returns the skewness of a distribution based on a population.\n *\n * Category: Statistical\n *\n * @returns\n */\nSKEW.P = function () {\n const range = parseNumberArray(flatten(arguments));\n\n if (range instanceof Error) {\n return range\n }\n\n const mean = jStat.mean(range);\n const n = range.length;\n\n let m2 = 0;\n let m3 = 0;\n\n for (let i = 0; i < n; i++) {\n m3 += Math.pow(range[i] - mean, 3);\n m2 += Math.pow(range[i] - mean, 2);\n }\n\n m3 = m3 / n;\n m2 = m2 / n;\n\n return m3 / Math.pow(m2, 3 / 2)\n};\n\n/**\n * Returns the slope of the linear regression line.\n *\n * Category: Statistical\n *\n * @param {*} known_y An array or value range of numeric dependent data points.\n * @param {*} known_x The set of independent data points.\n * @returns\n */\nfunction SLOPE(known_y, known_x) {\n known_y = parseNumberArray(flatten(known_y));\n known_x = parseNumberArray(flatten(known_x));\n\n if (anyIsError(known_y, known_x)) {\n return value\n }\n\n const xmean = jStat.mean(known_x);\n const ymean = jStat.mean(known_y);\n const n = known_x.length;\n\n let num = 0;\n let den = 0;\n\n for (let i = 0; i < n; i++) {\n num += (known_x[i] - xmean) * (known_y[i] - ymean);\n den += Math.pow(known_x[i] - xmean, 2);\n }\n\n return num / den\n}\n\n/**\n * Returns the k-th smallest value in a data set.\n *\n * Category: Statistical\n *\n * @param {*} array An array or range of numerical data for which you want to determine the k-th smallest value.\n * @param {*} k The position (from the smallest) in the array or range of data to return.\n * @returns\n */\nfunction SMALL(array, k) {\n array = parseNumberArray(flatten(array));\n k = parseNumber(k);\n\n if (anyIsError(array, k)) {\n return array\n }\n\n return array.sort((a, b) => a - b)[k - 1]\n}\n\n/**\n * Returns a normalized value.\n *\n * Category: Statistical\n *\n * @param {*} x The value you want to normalize.\n * @param {*} mean The arithmetic mean of the distribution.\n * @param {*} standard_dev The standard deviation of the distribution.\n * @returns\n */\nfunction STANDARDIZE(x, mean, standard_dev) {\n x = parseNumber(x);\n mean = parseNumber(mean);\n standard_dev = parseNumber(standard_dev);\n\n if (anyIsError(x, mean, standard_dev)) {\n return value\n }\n\n return (x - mean) / standard_dev\n}\n\nconst STDEV = {};\n\n/**\n * Calculates standard deviation based on the entire population.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number arguments 2 to 254 corresponding to a population. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nSTDEV.P = function () {\n const v = VAR.P.apply(this, arguments);\n\n let result = Math.sqrt(v);\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n};\n\n/**\n * Estimates standard deviation based on a sample.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number arguments 2 to 254 corresponding to a sample of a population. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nSTDEV.S = function () {\n const v = VAR.S.apply(this, arguments);\n const result = Math.sqrt(v);\n\n return result\n};\n\n/**\n * Estimates standard deviation based on a sample, including numbers, text, and logical values.\n *\n * Category: Statistical\n *\n * @param {*} args value1, value2, ... Value1 is required, subsequent values are optional. 1 to 255 values corresponding to a sample of a population. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nfunction STDEVA() {\n const v = VARA.apply(this, arguments);\n const result = Math.sqrt(v);\n\n return result\n}\n\n/**\n * Calculates standard deviation based on the entire population, including numbers, text, and logical values.\n *\n * Category: Statistical\n *\n * @param {*} args value1, value2, ... Value1 is required, subsequent values are optional. 1 to 255 values corresponding to a population. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nfunction STDEVPA() {\n const v = VARPA.apply(this, arguments);\n\n let result = Math.sqrt(v);\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n}\n\n/**\n * Returns the standard error of the predicted y-value for each x in the regression.\n *\n * Category: Statistical\n *\n * @param {*} known_y An array or range of dependent data points.\n * @param {*} known_x An array or range of independent data points.\n * @returns\n */\nfunction STEYX(known_y, known_x) {\n known_y = parseNumberArray(flatten(known_y));\n known_x = parseNumberArray(flatten(known_x));\n\n if (anyIsError(known_y, known_x)) {\n return value\n }\n\n const xmean = jStat.mean(known_x);\n const ymean = jStat.mean(known_y);\n const n = known_x.length;\n\n let lft = 0;\n let num = 0;\n let den = 0;\n\n for (let i = 0; i < n; i++) {\n lft += Math.pow(known_y[i] - ymean, 2);\n num += (known_x[i] - xmean) * (known_y[i] - ymean);\n den += Math.pow(known_x[i] - xmean, 2);\n }\n\n return Math.sqrt((lft - (num * num) / den) / (n - 2))\n}\n\n/**\n * Returns the Percentage Points (probability) for the Student t-distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The numeric value at which to evaluate the distribution\n * @param {*} deg_freedom An integer indicating the number of degrees of freedom.\n * @param {*} cumulative A logical value that determines the form of the function. If cumulative is TRUE, T.DIST returns the cumulative distribution function; if FALSE, it returns the probability density function.\n * @returns\n */\nT.DIST = (x, deg_freedom, cumulative) => {\n if (cumulative !== 1 && cumulative !== 2) {\n return num\n }\n\n return cumulative === 1 ? T.DIST.RT(x, deg_freedom) : T.DIST['2T'](x, deg_freedom)\n};\n\n/**\n * Returns the Percentage Points (probability) for the Student t-distribution\n *\n * Category: Statistical\n *\n * @param {*} x The numeric value at which to evaluate the distribution.\n * @param {*} deg_freedom An integer indicating the number of degrees of freedom.\n * @returns\n */\nT.DIST['2T'] = function (x, deg_freedom) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (x < 0 || deg_freedom < 1) {\n return num\n }\n\n if (typeof x !== 'number' || typeof deg_freedom !== 'number') {\n return value\n }\n\n return (1 - jStat.studentt.cdf(x, deg_freedom)) * 2\n};\n\n/**\n * Returns the Student's t-distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The numeric value at which to evaluate the distribution.\n * @param {*} deg_freedom An integer indicating the number of degrees of freedom.\n * @returns\n */\nT.DIST.RT = function (x, deg_freedom) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (x < 0 || deg_freedom < 1) {\n return num\n }\n\n if (typeof x !== 'number' || typeof deg_freedom !== 'number') {\n return value\n }\n\n return 1 - jStat.studentt.cdf(x, deg_freedom)\n};\n\n/**\n * Returns the t-value of the Student's t-distribution as a function of the probability and the degrees of freedom.\n *\n * Category: Statistical\n *\n * @param {*} probability The probability associated with the Student's t-distribution.\n * @param {*} deg_freedom The number of degrees of freedom with which to characterize the distribution.\n * @returns\n */\nT.INV = (probability, deg_freedom) => {\n probability = parseNumber(probability);\n deg_freedom = parseNumber(deg_freedom);\n\n if (anyIsError(probability, deg_freedom)) {\n return value\n }\n\n return jStat.studentt.inv(probability, deg_freedom)\n};\n\n/**\n * Returns the inverse of the Student's t-distribution\n *\n * Category: Statistical\n *\n * @param {*} probability The probability associated with the Student's t-distribution.\n * @param {*} deg_freedom The number of degrees of freedom with which to characterize the distribution.\n * @returns\n */\nT.INV['2T'] = (probability, deg_freedom) => {\n probability = parseNumber(probability);\n deg_freedom = parseNumber(deg_freedom);\n\n if (probability <= 0 || probability > 1 || deg_freedom < 1) {\n return num\n }\n\n if (anyIsError(probability, deg_freedom)) {\n return value\n }\n\n return Math.abs(jStat.studentt.inv(probability / 2, deg_freedom))\n};\n\n// The algorithm can be found here:\n// http://www.chem.uoa.gr/applets/AppletTtest/Appl_Ttest2.html\n/**\n * Returns the probability associated with a Student's t-test.\n *\n * Category: Statistical\n *\n * @param {*} array1 The first data set.\n * @param {*} array2 The second data set.\n * @returns\n */\nT.TEST = (array1, array2) => {\n array1 = parseNumberArray(flatten(array1));\n array2 = parseNumberArray(flatten(array2));\n\n if (anyIsError(array1, array2)) {\n return value\n }\n\n const mean_x = jStat.mean(array1);\n const mean_y = jStat.mean(array2);\n\n let s_x = 0;\n let s_y = 0;\n let i;\n\n for (i = 0; i < array1.length; i++) {\n s_x += Math.pow(array1[i] - mean_x, 2);\n }\n\n for (i = 0; i < array2.length; i++) {\n s_y += Math.pow(array2[i] - mean_y, 2);\n }\n\n s_x = s_x / (array1.length - 1);\n s_y = s_y / (array2.length - 1);\n\n const t = Math.abs(mean_x - mean_y) / Math.sqrt(s_x / array1.length + s_y / array2.length);\n\n return T.DIST['2T'](t, array1.length + array2.length - 2)\n};\n\n/**\n * Returns values along a linear trend.\n *\n * Category: Statistical\n *\n * @param {*} known_ys The set of y-values you already know in the relationship y = mx + b\n * @param {*} known_xs An optional set of x-values that you may already know in the relationship y = mx + b\n * @param {*} [new_xs] Optional. New x-values for which you want TREND to return corresponding y-values.\n * @returns\n */\nfunction TREND(known_ys, known_xs, new_xs) {\n known_ys = parseNumberArray(flatten(known_ys));\n known_xs = parseNumberArray(flatten(known_xs));\n new_xs = parseNumberArray(flatten(new_xs));\n\n if (anyIsError(known_ys, known_xs, new_xs)) {\n return value\n }\n\n const linest = LINEST(known_ys, known_xs);\n const m = linest[0];\n const b = linest[1];\n const result = [];\n\n new_xs.forEach((x) => {\n result.push(m * x + b);\n });\n\n return result\n}\n\n/**\n * Returns the mean of the interior of a data set.\n *\n * Category: Statistical\n *\n * @param {*} array The array or range of values to trim and average.\n * @param {*} percent The fractional number of data points to exclude from the calculation. For example, if percent = 0.2, 4 points are trimmed from a data set of 20 points (20 x 0.2): 2 from the top and 2 from the bottom of the set.\n * @returns\n */\nfunction TRIMMEAN(range, percent) {\n range = parseNumberArray(flatten(range));\n percent = parseNumber(percent);\n\n if (anyIsError(range, percent)) {\n return value\n }\n\n const trim = FLOOR(range.length * percent, 2) / 2;\n\n return jStat.mean(\n initial(\n rest(\n range.sort((a, b) => a - b),\n trim\n ),\n trim\n )\n )\n}\n\nconst VAR = {};\n\n/**\n * Calculates variance based on the entire population.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number arguments 2 to 254 corresponding to a population.\n * @returns\n */\nVAR.P = function () {\n const range = numbers(flatten(arguments));\n const n = range.length;\n\n let sigma = 0;\n\n const mean = AVERAGE(range);\n\n let result;\n\n for (let i = 0; i < n; i++) {\n sigma += Math.pow(range[i] - mean, 2);\n }\n\n result = sigma / n;\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n};\n\n/**\n * Estimates variance based on a sample.\n *\n * Category: Statistical\n *\n * @param {*} args number1, number2, ... Number arguments 2 to 254 corresponding to a sample of a population.\n * @returns\n */\nVAR.S = function () {\n const range = numbers(flatten(arguments));\n const n = range.length;\n\n let sigma = 0;\n\n const mean = AVERAGE(range);\n\n for (let i = 0; i < n; i++) {\n sigma += Math.pow(range[i] - mean, 2);\n }\n\n return sigma / (n - 1)\n};\n\n/**\n * Estimates variance based on a sample, including numbers, text, and logical values.\n *\n * Category: Statistical\n *\n * @param {*} args value1, value2, ... Value1 is required, subsequent values are optional. 1 to 255 value arguments corresponding to a sample of a population.\n * @returns\n */\nfunction VARA() {\n const range = flatten(arguments);\n const n = range.length;\n\n let sigma = 0;\n let count = 0;\n\n const mean = AVERAGEA(range);\n\n for (let i = 0; i < n; i++) {\n const el = range[i];\n\n if (typeof el === 'number') {\n sigma += Math.pow(el - mean, 2);\n } else if (el === true) {\n sigma += Math.pow(1 - mean, 2);\n } else {\n sigma += Math.pow(0 - mean, 2);\n }\n\n if (el !== null) {\n count++;\n }\n }\n\n return sigma / (count - 1)\n}\n\n/**\n * Calculates variance based on the entire population, including numbers, text, and logical values.\n *\n * Category: Statistical\n *\n * @param {*} args value1, value2, ... Value1 is required, subsequent values are optional. 1 to 255 value arguments corresponding to a population.\n * @returns\n */\nfunction VARPA() {\n const range = flatten(arguments);\n const n = range.length;\n\n let sigma = 0;\n let count = 0;\n\n const mean = AVERAGEA(range);\n\n let result;\n\n for (let i = 0; i < n; i++) {\n const el = range[i];\n\n if (typeof el === 'number') {\n sigma += Math.pow(el - mean, 2);\n } else if (el === true) {\n sigma += Math.pow(1 - mean, 2);\n } else {\n sigma += Math.pow(0 - mean, 2);\n }\n\n if (el !== null) {\n count++;\n }\n }\n\n result = sigma / count;\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n}\n\nconst WEIBULL = {};\n\n/**\n * Returns the Weibull distribution.\n *\n * Category: Statistical\n *\n * @param {*} x The value at which to evaluate the function.\n * @param {*} alpha A parameter to the distribution.\n * @param {*} beta A parameter to the distribution.\n * @param {*} cumulative Determines the form of the function.\n * @returns\n */\nWEIBULL.DIST = (x, alpha, beta, cumulative) => {\n x = parseNumber(x);\n alpha = parseNumber(alpha);\n beta = parseNumber(beta);\n\n if (anyIsError(x, alpha, beta)) {\n return value\n }\n\n return cumulative\n ? 1 - Math.exp(-Math.pow(x / beta, alpha))\n : (Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha) / Math.pow(beta, alpha)\n};\n\nconst Z = {};\n\n/**\n * Returns the one-tailed probability-value of a z-test.\n *\n * Category: Statistical\n *\n * @param {*} array The array or range of data against which to test x.\n * @param {*} x The value to test.\n * @param {*} [sigma] Optional. The population (known) standard deviation. If omitted, the sample standard deviation is used.\n * @returns\n */\nZ.TEST = (array, x, sigma) => {\n array = parseNumberArray(flatten(array));\n x = parseNumber(x);\n\n if (anyIsError(array, x)) {\n return value\n }\n\n sigma = sigma || STDEV.S(array);\n\n const n = array.length;\n\n return 1 - NORM.S.DIST((AVERAGE(array) - x) / (sigma / Math.sqrt(n)), true)\n};\n\n/**\n * Returns the absolute value of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The real number of which you want the absolute value.\n * @returns\n */\nfunction ABS(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n const result = Math.abs(number);\n\n return result\n}\n\n/**\n * Returns the arccosine of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The cosine of the angle you want and must be from -1 to 1.\n * @returns\n */\nfunction ACOS(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n let result = Math.acos(number);\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n}\n\n/**\n * Returns the inverse hyperbolic cosine of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Any real number equal to or greater than 1.\n * @returns\n */\nfunction ACOSH(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n let result = Math.log(number + Math.sqrt(number * number - 1));\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n}\n\n/**\n * Returns the arccotangent of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Number is the cotangent of the angle you want. This must be a real number.\n * @returns\n */\nfunction ACOT(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n const result = Math.atan(1 / number);\n\n return result\n}\n\n/**\n * Returns the hyperbolic arccotangent of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The absolute value of Number must be greater than 1.\n * @returns\n */\nfunction ACOTH(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n let result = 0.5 * Math.log((number + 1) / (number - 1));\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n}\n\n// TODO: use options\n/**\n * Returns an aggregate in a list or database.\n *\n * Category: Math and trigonometry\n *\n * @param {*} function_num A number 1 to 19 that specifies which function to use.\n * @param {*} options A numerical value that determines which values to ignore in the evaluation range for the function. Note: The function will not ignore hidden rows, nested subtotals or nested aggregates if the array argument includes a calculation, for example: =AGGREGATE(14,3,A1:A100*(A1:A100>0),1)\n * @param {*} ref1 The first numeric argument for functions that take multiple numeric arguments for which you want the aggregate value.\n * @param {*} [ref2] Optional. Numeric arguments 2 to 253 for which you want the aggregate value. For functions that take an array, ref1 is an array, an array formula, or a reference to a range of values for which you want the aggregate value. Ref2 is a second argument that is required for certain functions.\n * @returns\n */\nfunction AGGREGATE(function_num, options, ref1, ref2) {\n function_num = parseNumber(function_num);\n options = parseNumber(function_num);\n\n if (anyIsError(function_num, options)) {\n return value\n }\n\n switch (function_num) {\n case 1:\n return AVERAGE(ref1)\n case 2:\n return COUNT(ref1)\n case 3:\n return COUNTA(ref1)\n case 4:\n return MAX(ref1)\n case 5:\n return MIN(ref1)\n case 6:\n return PRODUCT(ref1)\n case 7:\n return STDEV.S(ref1)\n case 8:\n return STDEV.P(ref1)\n case 9:\n return SUM(ref1)\n case 10:\n return VAR.S(ref1)\n case 11:\n return VAR.P(ref1)\n case 12:\n return MEDIAN(ref1)\n case 13:\n return MODE.SNGL(ref1)\n case 14:\n return LARGE(ref1, ref2)\n case 15:\n return SMALL(ref1, ref2)\n case 16:\n return PERCENTILE.INC(ref1, ref2)\n case 17:\n return QUARTILE.INC(ref1, ref2)\n case 18:\n return PERCENTILE.EXC(ref1, ref2)\n case 19:\n return QUARTILE.EXC(ref1, ref2)\n }\n}\n\n/**\n * Converts a Roman number to Arabic, as a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} text A string enclosed in quotation marks, an empty string (\"\"), or a reference to a value containing text.\n * @returns\n */\nfunction ARABIC(text) {\n if (text === undefined || text === null) {\n return 0\n }\n\n if (text instanceof Error) {\n return text\n }\n\n // Credits: Rafa? Kukawski\n if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) {\n return value\n }\n\n let r = 0;\n text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, (i) => {\n r += {\n M: 1000,\n CM: 900,\n D: 500,\n CD: 400,\n C: 100,\n XC: 90,\n L: 50,\n XL: 40,\n X: 10,\n IX: 9,\n V: 5,\n IV: 4,\n I: 1\n }[i];\n });\n\n return r\n}\n\n/**\n * Returns the arcsine of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The sine of the angle you want and must be from -1 to 1.\n * @returns\n */\nfunction ASIN(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n let result = Math.asin(number);\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n}\n\n/**\n * Returns the inverse hyperbolic sine of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Any real number.\n * @returns\n */\nfunction ASINH(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return Math.log(number + Math.sqrt(number * number + 1))\n}\n\n/**\n * Returns the arctangent of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The tangent of the angle you want.\n * @returns\n */\nfunction ATAN(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return Math.atan(number)\n}\n\n/**\n * Returns the arctangent from x- and y-coordinates.\n *\n * Category: Math and trigonometry\n *\n * @param {*} x_num The x-coordinate of the point.\n * @param {*} y_num The y-coordinate of the point.\n * @returns\n */\nfunction ATAN2(x_num, y_num) {\n x_num = parseNumber(x_num);\n y_num = parseNumber(y_num);\n const anyError$1 = anyError(x_num, y_num);\n\n if (anyError$1) {\n return anyError$1\n }\n\n return Math.atan2(x_num, y_num)\n}\n\n/**\n * Returns the inverse hyperbolic tangent of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Any real number between 1 and -1.\n * @returns\n */\nfunction ATANH(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n let result = Math.log((1 + number) / (1 - number)) / 2;\n\n if (isNaN(result)) {\n result = num;\n }\n\n return result\n}\n\n/**\n * Converts a number into a text representation with the given radix (base).\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The number that you want to convert. Must be an integer greater than or equal to 0 and less than 2^53.\n * @param {*} radix The base radix that you want to convert the number into. Must be an integer greater than or equal to 2 and less than or equal to 36.\n * @param {*} [min_length] Optional. The minimum length of the returned string. Must be an integer greater than or equal to 0.\n * @returns\n */\nfunction BASE(number, radix, min_length) {\n number = parseNumber(number);\n radix = parseNumber(radix);\n min_length = parseNumber(min_length);\n const anyError$1 = anyError(number, radix, min_length);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (radix === 0) {\n return num\n }\n\n const result = number.toString(radix);\n\n return new Array(Math.max(min_length + 1 - result.length, 0)).join('0') + result\n}\n\n/**\n * Rounds a number to the nearest integer or to the nearest multiple of significance.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The value you want to round.\n * @param {*} significance The multiple to which you want to round.\n * @param {*} [mode] Optional. For negative numbers, controls whether Number is rounded toward or away from zero.\n * @returns\n */\nfunction CEILING(number, significance) {\n number = parseNumber(number);\n significance = parseNumber(significance);\n\n const anyError$1 = anyError(number, significance);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (significance === 0) {\n return 0\n }\n\n if (number > 0 && significance < 0) {\n return num\n }\n\n return Math.ceil(number / significance) * significance\n}\n\n/**\n * Rounds a number up, to the nearest integer or to the nearest multiple of significance.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The value you want to round.\n * @param {*} [significance] Optional. This is the number of significant digits after the decimal point to which number is to be rounded.\n * @param {*} [mode] Optional. For negative numbers, controls whether Number is rounded toward or away from zero.\n * @returns\n */\nCEILING.MATH = (number, significance, mode = 0) => {\n if (significance === undefined) {\n significance = number > 0 ? 1 : -1;\n }\n\n number = parseNumber(number);\n significance = parseNumber(significance);\n mode = parseNumber(mode);\n\n const anyError$1 = anyError(number, significance, mode);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (significance === 0) {\n return 0\n }\n\n significance = Math.abs(significance);\n\n if (mode === 0) {\n return Math.ceil(number / significance) * significance\n } else {\n return number > 0\n ? Math.ceil(number / significance) * significance\n : Math.floor(number / significance) * significance\n }\n};\n\n/**\n * Rounds a number up, to the nearest integer or to the nearest multiple of significance.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The value you want to round.\n * @param {*} [significance] Optional. This is the number of significant digits after the decimal point to which number is to be rounded.\n * @returns\n */\nCEILING.PRECISE = (number, significance) => {\n return CEILING.MATH(number, significance)\n};\n\n/**\n * Returns the number of combinations for a given number of objects.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The number of items.\n * @param {*} number_chosen The number of items in each combination.\n * @returns\n */\nfunction COMBIN(number, number_chosen) {\n number = parseNumber(number);\n number_chosen = parseNumber(number_chosen);\n const anyError$1 = anyError(number, number_chosen);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (number < number_chosen) {\n return num\n }\n\n return FACT(number) / (FACT(number_chosen) * FACT(number - number_chosen))\n}\n\n/**\n * Returns the number of combinations with repetitions for a given number of items.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Must be greater than or equal to 0, and greater than or equal to Number_chosen. Non-integer values are truncated.\n * @param {*} number_chosen Must be greater than or equal to 0. Non-integer values are truncated.\n * @returns\n */\nfunction COMBINA(number, number_chosen) {\n number = parseNumber(number);\n number_chosen = parseNumber(number_chosen);\n const anyError$1 = anyError(number, number_chosen);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (number < number_chosen) {\n return num\n }\n\n return number === 0 && number_chosen === 0 ? 1 : COMBIN(number + number_chosen - 1, number - 1)\n}\n\n/**\n * Returns the cosine of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The angle in radians for which you want the cosine.\n * @returns\n */\nfunction COS(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return Math.cos(number)\n}\n\n/**\n * Returns the hyperbolic cosine of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Any real number for which you want to find the hyperbolic cosine.\n * @returns\n */\nfunction COSH(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return (Math.exp(number) + Math.exp(-number)) / 2\n}\n\n/**\n * Returns the hyperbolic cosine of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The angle in radians for which you want the cotangent.\n * @returns\n */\nfunction COT(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n if (number === 0) {\n return div0\n }\n\n return 1 / Math.tan(number)\n}\n\n/**\n * Returns the cotangent of an angle.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number\n * @returns\n */\nfunction COTH(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n if (number === 0) {\n return div0\n }\n\n const e2 = Math.exp(2 * number);\n\n return (e2 + 1) / (e2 - 1)\n}\n\n/**\n * Returns the cosecant of an angle.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number\n * @returns\n */\nfunction CSC(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n if (number === 0) {\n return div0\n }\n\n return 1 / Math.sin(number)\n}\n\n/**\n * Returns the hyperbolic cosecant of an angle.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number\n * @returns\n */\nfunction CSCH(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n if (number === 0) {\n return div0\n }\n\n return 2 / (Math.exp(number) - Math.exp(-number))\n}\n\n/**\n * Converts a text representation of a number in a given base into a decimal number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} text\n * @param {*} radix Radix must be an integer.\n * @returns\n */\nfunction DECIMAL(text, radix) {\n if (arguments.length < 2) {\n return na\n }\n\n text = text || '0';\n radix = parseNumber(radix);\n const anyError$1 = anyError(text, radix);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (radix === 0) {\n return num\n }\n\n const result = parseInt(text, radix);\n\n if (isNaN(result)) {\n return num\n }\n\n return result\n}\n\n/**\n * Converts radians to degrees.\n *\n * Category: Math and trigonometry\n *\n * @param {*} angle The angle in radians that you want to convert.\n * @returns\n */\nfunction DEGREES(angle) {\n angle = parseNumber(angle);\n\n if (angle instanceof Error) {\n return angle\n }\n\n return (angle * 180) / Math.PI\n}\n\n/**\n * Rounds a number up to the nearest even integer.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The value to round.\n * @returns\n */\nfunction EVEN(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return CEILING.MATH(number, -2, -1)\n}\n\n/**\n * Returns e raised to the power of a given number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The exponent applied to the base e.\n * @returns\n */\nfunction EXP(number) {\n if (arguments.length < 1) {\n return na\n }\n\n if (arguments.length > 1) {\n return error\n }\n\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n number = Math.exp(number);\n\n return number\n}\n\nconst MEMOIZED_FACT = [];\n/**\n * Returns the factorial of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The nonnegative number for which you want the factorial. If number is not an integer, it is truncated.\n * @returns\n */\nfunction FACT(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n const n = Math.floor(number);\n\n if (n === 0 || n === 1) {\n return 1\n } else if (MEMOIZED_FACT[n] > 0) {\n return MEMOIZED_FACT[n]\n } else {\n MEMOIZED_FACT[n] = FACT(n - 1) * n;\n\n return MEMOIZED_FACT[n]\n }\n}\n\n/**\n * Returns the double factorial of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The value for which to return the double factorial. If number is not an integer, it is truncated.\n * @returns\n */\nfunction FACTDOUBLE(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n const n = Math.floor(number);\n\n return n <= 0 ? 1 : n * FACTDOUBLE(n - 2)\n}\n\n/**\n * Rounds a number down, toward zero.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The numeric value you want to round.\n * @param {*} significance The multiple to which you want to round.\n * @returns\n */\nfunction FLOOR(number, significance) {\n number = parseNumber(number);\n significance = parseNumber(significance);\n\n const anyError$1 = anyError(number, significance);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (!significance) {\n return div0\n }\n\n if (number > 0 && significance < 0) {\n return num\n }\n\n return Math.floor(number / significance) * significance\n}\n\n// TODO: Verify\n\n/**\n * Rounds a number down, to the nearest integer or to the nearest multiple of significance.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The number to be rounded down.\n * @param {*} [significance] Optional. The multiple to which you want to round.\n * @param {*} [mode] Optional. The direction (toward or away from 0) to round negative numbers.\n * @returns\n */\nFLOOR.MATH = (number, significance = 1, mode = 0) => {\n number = parseNumber(number);\n significance = parseNumber(significance);\n mode = parseNumber(mode);\n\n const anyError$1 = anyError(number, significance, mode);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (significance === 0) {\n return 0\n }\n\n significance = Math.abs(significance);\n\n if (mode === 0) {\n return Math.floor(number / significance) * significance\n } else {\n return number > 0\n ? Math.floor(number / significance) * significance\n : Math.ceil(number / significance) * significance\n }\n};\n\n// Deprecated\n\n/**\n * Rounds a number the nearest integer or to the nearest multiple of significance. Regardless of the sign of the number, the number is rounded up.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The value to be rounded.\n * @param {*} [significance] Optional. The multiple to which number is to be rounded. If significance is omitted, its default value is 1.\n * @returns\n */\nFLOOR.PRECISE = (number, significance) => {\n return FLOOR.MATH(number, significance)\n};\n\n// adapted http://rosettacode.org/wiki/Greatest_common_divisor#JavaScript\n/**\n * Returns the greatest common divisor.\n *\n * Category: Math and trigonometry\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 values. If any value is not an integer, it is truncated.\n * @returns\n */\nfunction GCD() {\n const range = parseNumberArray(flatten(arguments));\n\n if (range instanceof Error) {\n return range\n }\n\n const n = range.length;\n const r0 = range[0];\n let x = r0 < 0 ? -r0 : r0;\n\n for (let i = 1; i < n; i++) {\n const ri = range[i];\n let y = ri < 0 ? -ri : ri;\n\n while (x && y) {\n if (x > y) {\n x %= y;\n } else {\n y %= x;\n }\n }\n\n x += y;\n }\n\n return x\n}\n\n/**\n * Rounds a number down to the nearest integer.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The real number you want to round down to an integer.\n * @returns\n */\nfunction INT(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return Math.floor(number)\n}\n\n// TODO: verify\nconst ISO = {\n CEILING: CEILING\n};\n\n/**\n * Returns the least common multiple.\n *\n * Category: Math and trigonometry\n *\n * @param {*} args number1, number2,... Number1 is required, subsequent numbers are optional. 1 to 255 values for which you want the least common multiple. If value is not an integer, it is truncated.\n * @returns\n */\nfunction LCM() {\n // Credits: Jonas Raoni Soares Silva\n const o = parseNumberArray(flatten(arguments));\n\n if (o instanceof Error) {\n return o\n }\n\n for (var i, j, n, d, r = 1; (n = o.pop()) !== undefined; ) {\n if (n === 0) {\n return 0\n }\n\n while (n > 1) {\n if (n % 2) {\n for (i = 3, j = Math.floor(Math.sqrt(n)); i <= j && n % i; i += 2) {\n // empty\n }\n\n d = i <= j ? i : n;\n } else {\n d = 2;\n }\n\n for (n /= d, r *= d, i = o.length; i; o[--i] % d === 0 && (o[i] /= d) === 1 && o.splice(i, 1)) {\n // empty\n }\n }\n }\n\n return r\n}\n\n/**\n * Returns the natural logarithm of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The positive real number for which you want the natural logarithm.\n * @returns\n */\nfunction LN(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n if (number === 0) {\n return num\n }\n\n return Math.log(number)\n}\n\n/**\n * Returns the logarithm of a number to a specified base.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The positive real number for which you want the logarithm.\n * @param {*} [base] Optional. The base of the logarithm. If base is omitted, it is assumed to be 10.\n * @returns\n */\nfunction LOG(number, base) {\n number = parseNumber(number);\n base = base ? parseNumber(base) : 10;\n const anyError$1 = anyError(number, base);\n if (anyError$1) {\n return anyError$1\n }\n\n if (number === 0 || base === 0) {\n return num\n }\n\n return Math.log(number) / Math.log(base)\n}\n\n/**\n * Returns the base-10 logarithm of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The positive real number for which you want the base-10 logarithm.\n * @returns\n */\nfunction LOG10(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n if (number === 0) {\n return num\n }\n\n return Math.log(number) / Math.log(10)\n}\n\n/**\n * Returns the matrix product of two arrays. The result is an array with the same number of rows as array1 and the same number of columns as array2.\n *\n * Category: Math and trigonometry\n *\n * @param {*} array1 Required. 1st array you want to multiply.\n * @param {*} array2 Required. 2nd array you want to multiply.\n * @returns\n */\nfunction MMULT(array1, array2) {\n if (\n //Arguments are not arrays\n !Array.isArray(array1) ||\n !Array.isArray(array2) ||\n // There are empty arrays\n array1.some((el) => !el.length) ||\n array2.some((el) => !el.length) ||\n // Not all array elements are numbers\n flattenShallow(array1).some((el) => typeof el !== 'number') ||\n flattenShallow(array2).some((el) => typeof el !== 'number') ||\n // Number of columns in array1 is different from the number of rows in array2\n array1[0].length !== array2.length\n ) {\n return value\n }\n\n const matrix = Array(array1.length)\n .fill(0)\n .map(() => Array(array2[0].length).fill(0));\n\n return matrix.map((row, i) => row.map((_, j) => array1[i].reduce((sum, el, k) => sum + el * array2[k][j], 0)))\n}\n\n/**\n * Returns the remainder from division.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The number for which you want to find the remainder.\n * @param {*} divisor The number by which you want to divide number.\n * @returns\n */\nfunction MOD(number, divisor) {\n number = parseNumber(number);\n divisor = parseNumber(divisor);\n const anyError$1 = anyError(number, divisor);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (divisor === 0) {\n return div0\n }\n\n let modulus = Math.abs(number % divisor);\n modulus = number < 0 ? divisor - modulus : modulus;\n\n return divisor > 0 ? modulus : -modulus\n}\n\n/**\n * Returns a number rounded to the desired multiple.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The value to round.\n * @param {*} multiple The multiple to which you want to round number.\n * @returns\n */\nfunction MROUND(number, multiple) {\n number = parseNumber(number);\n multiple = parseNumber(multiple);\n const anyError$1 = anyError(number, multiple);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (number * multiple === 0) {\n return 0\n }\n\n if (number * multiple < 0) {\n return num\n }\n\n return Math.round(number / multiple) * multiple\n}\n\n/**\n * Returns the multinomial of a set of numbers.\n *\n * Category: Math and trigonometry\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 values for which you want the multinomial.\n * @returns\n */\nfunction MULTINOMIAL() {\n const args = parseNumberArray(flatten(arguments));\n\n if (args instanceof Error) {\n return args\n }\n\n let sum = 0;\n let divisor = 1;\n\n for (let i = 0; i < args.length; i++) {\n sum += args[i];\n divisor *= FACT(args[i]);\n }\n\n return FACT(sum) / divisor\n}\n\n/**\n * Returns the unit matrix for the specified dimension.\n *\n * Category: Math and trigonometry\n *\n * @param {*} dimension Required. Dimension is an integer specifying the dimension of the unit matrix that you want to return. It returns an array. The dimension has to be greater than zero.\n * @returns\n */\nfunction MUNIT(dimension) {\n if (arguments.length > 1) {\n return na\n }\n\n dimension = parseInt(dimension);\n\n if (!dimension || dimension <= 0) {\n return value\n }\n\n return Array(dimension)\n .fill(0)\n .map(() => Array(dimension).fill(0))\n .map((el, i) => {\n el[i] = 1;\n return el\n })\n}\n\n/**\n * Rounds a number up to the nearest odd integer.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number: The value to round.\n * @returns\n */\nfunction ODD(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n let temp = Math.ceil(Math.abs(number));\n temp = temp & 1 ? temp : temp + 1;\n\n return number >= 0 ? temp : -temp\n}\n\n/**\n * Returns the value of pi.\n *\n * Category: Math and trigonometry\n *\n * @returns\n */\nfunction PI() {\n return Math.PI\n}\n\n/**\n * Returns the result of a number raised to a power.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The base number. It can be any real number.\n * @param {*} power The exponent to which the base number is raised.\n * @returns\n */\nfunction POWER(number, power) {\n number = parseNumber(number);\n power = parseNumber(power);\n const anyError$1 = anyError(number, power);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (number === 0 && power === 0) {\n return num\n }\n\n const result = Math.pow(number, power);\n\n if (isNaN(result)) {\n return num\n }\n\n return result\n}\n\n/**\n * Multiplies its arguments.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number1 The first number or range that you want to multiply.\n * @param {*} args number2, ... Optional. Additional numbers or ranges that you want to multiply, up to a maximum of 255 arguments.\n * @returns\n */\nfunction PRODUCT() {\n const flatArguments = flatten(arguments);\n const flatArgumentsDefined = flatArguments.filter((arg) => arg !== undefined && arg !== null);\n\n if (flatArgumentsDefined.length === 0) {\n return 0\n }\n\n const args = parseNumberArray(flatArgumentsDefined);\n\n if (args instanceof Error) {\n return args\n }\n\n let result = 1;\n\n for (let i = 0; i < args.length; i++) {\n result *= args[i];\n }\n\n return result\n}\n\n/**\n * Returns the integer portion of a division.\n *\n * Category: Math and trigonometry\n *\n * @param {*} numerator The dividend.\n * @param {*} denominator The divisor.\n * @returns\n */\nfunction QUOTIENT(numerator, denominator) {\n numerator = parseNumber(numerator);\n denominator = parseNumber(denominator);\n const anyError$1 = anyError(numerator, denominator);\n\n if (anyError$1) {\n return anyError$1\n }\n\n return parseInt(numerator / denominator, 10)\n}\n\n/**\n * Converts degrees to radians.\n *\n * Category: Math and trigonometry\n *\n * @param {*} angle An angle in degrees that you want to convert.\n * @returns\n */\nfunction RADIANS(angle) {\n angle = parseNumber(angle);\n\n if (angle instanceof Error) {\n return angle\n }\n\n return (angle * Math.PI) / 180\n}\n\n/**\n * Returns a random number between 0 and 1.\n *\n * Category: Math and trigonometry\n *\n * @returns\n */\nfunction RAND() {\n return Math.random()\n}\n\n/**\n * Returns a random number between the numbers you specify.\n *\n * Category: Math and trigonometry\n *\n * @param {*} bottom The smallest integer RANDBETWEEN will return.\n * @param {*} top The largest integer RANDBETWEEN will return.\n * @returns\n */\nfunction RANDBETWEEN(bottom, top) {\n bottom = parseNumber(bottom);\n top = parseNumber(top);\n const anyError$1 = anyError(bottom, top);\n\n if (anyError$1) {\n return anyError$1\n }\n // Creative Commons Attribution 3.0 License\n // Copyright (c) 2012 eqcode\n\n return bottom + Math.ceil((top - bottom + 1) * Math.random()) - 1\n}\n\n// TODO\n/**\n * Converts an arabic numeral to roman, as text.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The Arabic numeral you want converted.\n * @returns\n */\nfunction ROMAN(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n // The MIT License\n // Copyright (c) 2008 Steven Levithan\n const digits = String(number).split('');\n const key = [\n '',\n 'C',\n 'CC',\n 'CCC',\n 'CD',\n 'D',\n 'DC',\n 'DCC',\n 'DCCC',\n 'CM',\n '',\n 'X',\n 'XX',\n 'XXX',\n 'XL',\n 'L',\n 'LX',\n 'LXX',\n 'LXXX',\n 'XC',\n '',\n 'I',\n 'II',\n 'III',\n 'IV',\n 'V',\n 'VI',\n 'VII',\n 'VIII',\n 'IX'\n ];\n let roman = '';\n let i = 3;\n\n while (i--) {\n roman = (key[+digits.pop() + i * 10] || '') + roman;\n }\n\n return new Array(+digits.join('') + 1).join('M') + roman\n}\n\n/**\n * The core logic for all Excel rounding functions.\n * Applies the specific Math strategy (round/ceil/floor) to the absolute value.\n *\n * @param {*} number The number that you want to round.\n * @param {*} num_digits The number of digits to which you want to round the number argument.\n * @param {*} roundFn The specific rounding function to apply (Math.round, Math.ceil, Math.floor).\n * @returns\n */\nfunction roundBase(number, num_digits, roundFn) {\n number = parseNumber(number);\n num_digits = parseNumber(num_digits);\n\n const anyError$1 = anyError(number, num_digits);\n\n if (anyError$1) {\n return anyError$1\n }\n\n // Strip sign (Work with absolute value for symmetric behavior)\n const sign = number >= 0 ? 1 : -1;\n const val = Math.abs(number);\n\n // Shift the decimal point using scientific notation strings.\n // Use strings because standard math (e.g., 1.005 * 100) introduces\n // artifacts like 100.499999... which rounds incorrectly.\n let pair = (val + 'e' + num_digits).split('e');\n\n // Apply the specific rounding strategy (round, floor, or ceil)\n const shifted = roundFn(pair[0] + 'e' + pair[1]);\n\n // Shift back\n pair = (shifted + 'e' + -num_digits).split('e');\n const rounded = Number(pair[0] + 'e' + pair[1]);\n\n // Restore sign\n return rounded * sign\n}\n\n/**\n * Rounds a number to a specified number of digits.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The number that you want to round.\n * @param {*} num_digits The number of digits to which you want to round the number argument.\n * @returns\n */\nfunction ROUND(number, num_digits) {\n return roundBase(number, num_digits, Math.round)\n}\n\n/**\n * Rounds a number down, toward zero.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Any real number that you want rounded down.\n * @param {*} num_digits The number of digits to which you want to round number.\n * @returns\n */\nfunction ROUNDDOWN(number, num_digits) {\n return roundBase(number, num_digits, Math.floor)\n}\n\n/**\n * Rounds a number up, away from zero.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Any real number that you want rounded up.\n * @param {*} num_digits The number of digits to which you want to round number.\n * @returns\n */\nfunction ROUNDUP(number, num_digits) {\n return roundBase(number, num_digits, Math.ceil)\n}\n\n/**\n * Returns the secant of an angle.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The angle in radians for which you want the secant.\n * @returns\n */\nfunction SEC(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return 1 / Math.cos(number)\n}\n\n/**\n * Returns the hyperbolic secant of an angle.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The angle in radians for which you want the hyperbolic secant.\n * @returns\n */\nfunction SECH(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return 2 / (Math.exp(number) + Math.exp(-number))\n}\n\n/**\n * Returns the sum of a power series based on the formula.\n *\n * Category: Math and trigonometry\n *\n * @param {*} x The input value to the power series.\n * @param {*} n The initial power to which you want to raise x.\n * @param {*} m The step by which to increase n for each term in the series.\n * @param {*} coefficients A set of coefficients by which each successive power of x is multiplied. The number of values in coefficients determines the number of terms in the power series. For example, if there are three values in coefficients, then there will be three terms in the power series.\n * @returns\n */\nfunction SERIESSUM(x, n, m, coefficients) {\n x = parseNumber(x);\n n = parseNumber(n);\n m = parseNumber(m);\n coefficients = parseNumberArray(coefficients);\n\n if (anyIsError(x, n, m, coefficients)) {\n return value\n }\n\n let result = coefficients[0] * Math.pow(x, n);\n\n for (let i = 1; i < coefficients.length; i++) {\n result += coefficients[i] * Math.pow(x, n + i * m);\n }\n\n return result\n}\n\n/**\n * Returns the sign of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Any real number.\n * @returns\n */\nfunction SIGN(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n if (number < 0) {\n return -1\n } else if (number === 0) {\n return 0\n } else {\n return 1\n }\n}\n\n/**\n * Returns the sine of the given angle.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The angle in radians for which you want the sine.\n * @returns\n */\nfunction SIN(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return Math.sin(number)\n}\n\n/**\n * Returns the hyperbolic sine of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Any real number.\n * @returns\n */\nfunction SINH(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return (Math.exp(number) - Math.exp(-number)) / 2\n}\n\n/**\n * Returns a positive square root.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The number for which you want the square root.\n * @returns\n */\nfunction SQRT(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n if (number < 0) {\n return num\n }\n\n return Math.sqrt(number)\n}\n\n/**\n * Returns the square root of (number * pi).\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The number by which pi is multiplied.\n * @returns\n */\nfunction SQRTPI(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return Math.sqrt(number * Math.PI)\n}\n\n/**\n * Returns a subtotal in a list or database.\n *\n * Category: Math and trigonometry\n *\n * @param {*} function_num The number 1-11 or 101-111 that specifies the function to use for the subtotal. 1-11 includes manually-hidden rows, while 101-111 excludes them; filtered-out values are always excluded.\n * @param {*} ref1 The first named range or reference for which you want the subtotal.\n * @returns\n */\nfunction SUBTOTAL(function_num, ref1) {\n function_num = parseNumber(function_num);\n\n if (function_num instanceof Error) {\n return function_num\n }\n\n switch (function_num) {\n case 1:\n return AVERAGE(ref1)\n case 2:\n return COUNT(ref1)\n case 3:\n return COUNTA(ref1)\n case 4:\n return MAX(ref1)\n case 5:\n return MIN(ref1)\n case 6:\n return PRODUCT(ref1)\n case 7:\n return STDEV.S(ref1)\n case 8:\n return STDEV.P(ref1)\n case 9:\n return SUM(ref1)\n case 10:\n return VAR.S(ref1)\n case 11:\n return VAR.P(ref1)\n // no hidden values for us\n case 101:\n return AVERAGE(ref1)\n case 102:\n return COUNT(ref1)\n case 103:\n return COUNTA(ref1)\n case 104:\n return MAX(ref1)\n case 105:\n return MIN(ref1)\n case 106:\n return PRODUCT(ref1)\n case 107:\n return STDEV.S(ref1)\n case 108:\n return STDEV.P(ref1)\n case 109:\n return SUM(ref1)\n case 110:\n return VAR.S(ref1)\n case 111:\n return VAR.P(ref1)\n }\n}\n\n/**\n * Adds its arguments.\n *\n * Category: Math and trigonometry\n *\n * @returns\n */\nfunction SUM() {\n let result = 0;\n\n arrayEach(argsToArray(arguments), (value) => {\n if (result instanceof Error) {\n return false\n } else if (value instanceof Error) {\n result = value;\n } else if (typeof value === 'number') {\n result += value;\n } else if (typeof value === 'string') {\n const parsed = parseFloat(value);\n\n !isNaN(parsed) && (result += parsed);\n } else if (Array.isArray(value)) {\n const inner_result = SUM.apply(null, value);\n\n if (inner_result instanceof Error) {\n result = inner_result;\n } else {\n result += inner_result;\n }\n }\n });\n\n return result\n}\n\n/**\n * Adds the values specified by a given criteria.\n *\n * Category: Math and trigonometry\n *\n * @param {*} range The range of values that you want evaluated by criteria. Cells in each range must be numbers or names, arrays, or references that contain numbers. Blank and text values are ignored.\n * @param {*} criteria The criteria in the form of a number, expression, a value reference, text, or a function that defines which values will be added.\n * @param {*} [sum_range] Optional. The actual values to add, if you want to add values other than those specified in the range argument. If the sum_range argument is omitted, Excel adds the values that are specified in the range argument (the same values to which the criteria is applied). Sum_range should be the same size and shape as range. If it isn't, performance may suffer, and the formula will sum a range of values that starts with the first value in sum_range but has the same dimensions as range.\n * @returns\n */\nfunction SUMIF(range, criteria, sum_range) {\n range = flatten(range);\n\n sum_range = sum_range ? flatten(sum_range) : range;\n\n if (range instanceof Error) {\n return range\n }\n\n if (criteria === undefined || criteria === null || criteria instanceof Error) {\n return 0\n }\n\n let result = 0;\n const isWildcard = criteria === '*';\n const tokenizedCriteria = isWildcard ? null : parse(criteria + '');\n\n for (let i = 0; i < range.length; i++) {\n const value = range[i];\n const sumValue = sum_range[i];\n\n if (isWildcard) {\n result += value;\n } else {\n const tokens = [createToken(value, TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n result += compute(tokens) ? sumValue : 0;\n }\n }\n\n return result\n}\n\n/**\n * Adds the values in a range that meet multiple criteria.\n *\n * Category: Math and trigonometry\n *\n * @returns\n */\nfunction SUMIFS() {\n const values = applyCriteria(...arguments);\n return SUM(values)\n}\n\n/**\n * Returns the sum of the products of corresponding array components.\n *\n * Category: Math and trigonometry\n *\n * @returns\n */\nfunction SUMPRODUCT() {\n if (!arguments || arguments.length === 0) {\n return value\n }\n\n const arrays = arguments.length + 1;\n let result = 0;\n let product;\n let k;\n let _i;\n let _ij;\n\n for (let i = 0; i < arguments[0].length; i++) {\n if (!(arguments[0][i] instanceof Array)) {\n product = 1;\n\n for (k = 1; k < arrays; k++) {\n const _i_arg = arguments[k - 1][i];\n\n if (_i_arg instanceof Error) {\n return _i_arg\n }\n\n _i = parseNumber(_i_arg);\n\n if (_i instanceof Error) {\n return _i\n }\n\n product *= _i;\n }\n\n result += product;\n } else {\n for (let j = 0; j < arguments[0][i].length; j++) {\n product = 1;\n\n for (k = 1; k < arrays; k++) {\n const _ij_arg = arguments[k - 1][i][j];\n\n if (_ij_arg instanceof Error) {\n return _ij_arg\n }\n\n _ij = parseNumber(_ij_arg);\n\n if (_ij instanceof Error) {\n return _ij\n }\n\n product *= _ij;\n }\n\n result += product;\n }\n }\n }\n\n return result\n}\n\n/**\n * Returns the sum of the squares of the arguments.\n *\n * Category: Math and trigonometry\n *\n * @param {*} args number1, number2, ... Number1 is required, subsequent numbers are optional. 1 to 255 arguments for which you want the sum of the squares. You can also use a single array or a reference to an array instead of arguments separated by commas.\n * @returns\n */\nfunction SUMSQ() {\n const numbers = parseNumberArray(flatten(arguments));\n\n if (numbers instanceof Error) {\n return numbers\n }\n\n let result = 0;\n const length = numbers.length;\n\n for (let i = 0; i < length; i++) {\n result += ISNUMBER(numbers[i]) ? numbers[i] * numbers[i] : 0;\n }\n\n return result\n}\n\n/**\n * Returns the sum of the difference of squares of corresponding values in two arrays.\n *\n * Category: Math and trigonometry\n *\n * @param {*} array_x The first array or range of values.\n * @param {*} array_y The second array or range of values.\n * @returns\n */\nfunction SUMX2MY2(array_x, array_y) {\n array_x = parseNumberArray(flatten(array_x));\n array_y = parseNumberArray(flatten(array_y));\n\n if (anyIsError(array_x, array_y)) {\n return value\n }\n\n let result = 0;\n\n for (let i = 0; i < array_x.length; i++) {\n result += array_x[i] * array_x[i] - array_y[i] * array_y[i];\n }\n\n return result\n}\n\n/**\n * Returns the sum of the sum of squares of corresponding values in two arrays.\n *\n * Category: Math and trigonometry\n *\n * @param {*} array_x The first array or range of values.\n * @param {*} array_y The second array or range of values.\n * @returns\n */\nfunction SUMX2PY2(array_x, array_y) {\n array_x = parseNumberArray(flatten(array_x));\n array_y = parseNumberArray(flatten(array_y));\n\n if (anyIsError(array_x, array_y)) {\n return value\n }\n\n let result = 0;\n array_x = parseNumberArray(flatten(array_x));\n array_y = parseNumberArray(flatten(array_y));\n\n for (let i = 0; i < array_x.length; i++) {\n result += array_x[i] * array_x[i] + array_y[i] * array_y[i];\n }\n\n return result\n}\n\n/**\n * Returns the sum of squares of differences of corresponding values in two arrays.\n *\n * Category: Math and trigonometry\n *\n * @param {*} array_x The first array or range of values.\n * @param {*} array_y The second array or range of values.\n * @returns\n */\nfunction SUMXMY2(array_x, array_y) {\n array_x = parseNumberArray(flatten(array_x));\n array_y = parseNumberArray(flatten(array_y));\n\n if (anyIsError(array_x, array_y)) {\n return value\n }\n\n let result = 0;\n array_x = flatten(array_x);\n array_y = flatten(array_y);\n\n for (let i = 0; i < array_x.length; i++) {\n result += Math.pow(array_x[i] - array_y[i], 2);\n }\n\n return result\n}\n\n/**\n * Returns the tangent of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The angle in radians for which you want the tangent.\n * @returns\n */\nfunction TAN(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n return Math.tan(number)\n}\n\n/**\n * Returns the hyperbolic tangent of a number.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number Any real number.\n * @returns\n */\nfunction TANH(number) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n const e2 = Math.exp(2 * number);\n\n return (e2 - 1) / (e2 + 1)\n}\n\n/**\n * Truncates a number to an integer.\n *\n * Category: Math and trigonometry\n *\n * @param {*} number The number you want to truncate.\n * @param {*} [num_digits] Optional. A number specifying the precision of the truncation. The default value for num_digits is 0 (zero).\n * @returns\n */\nfunction TRUNC(number, num_digits) {\n number = parseNumber(number);\n num_digits = parseNumber(num_digits);\n const anyError$1 = anyError(number, num_digits);\n\n if (anyError$1) {\n return anyError$1\n }\n\n const sign = number > 0 ? 1 : -1;\n\n return (sign * Math.floor(Math.abs(number) * Math.pow(10, num_digits))) / Math.pow(10, num_digits)\n}\n\n/**\n * Following functions are part of Formula.js only and not found in Excel.\n * Purpose of these functions is to implement an Excel like behaviour for fundamental math symbols such as +, -, /, *, etc.\n */\n\n/**\n * Formula.js only.\n *\n * @param {*} num1\n * @param {*} num2\n * @returns\n */\nfunction ADD(num1, num2) {\n if (arguments.length !== 2) {\n return na\n }\n\n num1 = parseNumber(num1);\n num2 = parseNumber(num2);\n const anyError$1 = anyError(num1, num2);\n\n if (anyError$1) {\n return anyError$1\n }\n\n return num1 + num2\n}\n\n/**\n * Formula.js only\n *\n * @param {*} dividend\n * @param {*} divisor\n * @returns\n */\nfunction DIVIDE(dividend, divisor) {\n if (arguments.length !== 2) {\n return na\n }\n\n dividend = parseNumber(dividend);\n divisor = parseNumber(divisor);\n const anyError$1 = anyError(dividend, divisor);\n\n if (anyError$1) {\n return anyError$1\n }\n\n if (divisor === 0) {\n return div0\n }\n\n return dividend / divisor\n}\n\n/**\n * Formula.js only\n *\n * @param {*} value1\n * @param {*} value2\n * @returns\n */\nfunction EQ(value1, value2) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (value1 instanceof Error) {\n return value1\n }\n\n if (value2 instanceof Error) {\n return value2\n }\n\n if (value1 === null) {\n value1 = undefined;\n }\n\n if (value2 === null) {\n value2 = undefined;\n }\n\n return value1 === value2\n}\n\n/**\n * Formula.js only\n *\n * @param {*} num1\n * @param {*} num2\n * @returns\n */\nfunction GT(num1, num2) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (num1 instanceof Error) {\n return num1\n }\n\n if (num2 instanceof Error) {\n return num2\n }\n\n if (anyIsString(num1, num2)) {\n num1 = parseString(num1);\n num2 = parseString(num2);\n } else {\n num1 = parseNumber(num1);\n num2 = parseNumber(num2);\n }\n\n const anyError$1 = anyError(num1, num2);\n\n if (anyError$1) {\n return anyError$1\n }\n\n return num1 > num2\n}\n\n/**\n * Formula.js only\n *\n * @param {*} num1\n * @param {*} num2\n * @returns\n */\nfunction GTE(num1, num2) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (anyIsString(num1, num2)) {\n num1 = parseString(num1);\n num2 = parseString(num2);\n } else {\n num1 = parseNumber(num1);\n num2 = parseNumber(num2);\n }\n\n const anyError$1 = anyError(num1, num2);\n\n if (anyError$1) {\n return anyError$1\n }\n\n return num1 >= num2\n}\n\n/**\n * Formula.js only\n *\n * @param {*} num1\n * @param {*} num2\n * @returns\n */\nfunction LT(num1, num2) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (anyIsString(num1, num2)) {\n num1 = parseString(num1);\n num2 = parseString(num2);\n } else {\n num1 = parseNumber(num1);\n num2 = parseNumber(num2);\n }\n\n const anyError$1 = anyError(num1, num2);\n\n if (anyError$1) {\n return anyError$1\n }\n\n return num1 < num2\n}\n\n/**\n * Formula.js only\n *\n * @param {*} num1\n * @param {*} num2\n * @returns\n */\nfunction LTE(num1, num2) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (anyIsString(num1, num2)) {\n num1 = parseString(num1);\n num2 = parseString(num2);\n } else {\n num1 = parseNumber(num1);\n num2 = parseNumber(num2);\n }\n\n const anyError$1 = anyError(num1, num2);\n\n if (anyError$1) {\n return anyError$1\n }\n\n return num1 <= num2\n}\n\n/**\n * Formula.js only\n *\n * @param {*} num1\n * @param {*} num2\n * @returns\n */\nfunction MINUS(num1, num2) {\n if (arguments.length !== 2) {\n return na\n }\n\n num1 = parseNumber(num1);\n num2 = parseNumber(num2);\n const anyError$1 = anyError(num1, num2);\n\n if (anyError$1) {\n return anyError$1\n }\n\n return num1 - num2\n}\n\n/**\n * Formula.js only\n *\n * @param {*} factor1\n * @param {*} factor2\n * @returns\n */\nfunction MULTIPLY(factor1, factor2) {\n if (arguments.length !== 2) {\n return na\n }\n\n factor1 = parseNumber(factor1);\n factor2 = parseNumber(factor2);\n const anyError$1 = anyError(factor1, factor2);\n\n if (anyError$1) {\n return anyError$1\n }\n\n return factor1 * factor2\n}\n\n/**\n * Formula.js only\n *\n * @param {*} value1\n * @param {*} value2\n * @returns\n */\nfunction NE(value1, value2) {\n if (arguments.length !== 2) {\n return na\n }\n\n if (value1 instanceof Error) {\n return value1\n }\n\n if (value2 instanceof Error) {\n return value2\n }\n\n if (value1 === null) {\n value1 = undefined;\n }\n\n if (value2 === null) {\n value2 = undefined;\n }\n\n return value1 !== value2\n}\n\n/**\n * Formula.js only\n *\n * @param {*} base\n * @param {*} exponent\n * @returns\n */\nfunction POW(base, exponent) {\n if (arguments.length !== 2) {\n return na\n }\n\n return POWER(base, exponent)\n}\n\nvar symbols = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ADD: ADD,\n DIVIDE: DIVIDE,\n EQ: EQ,\n GT: GT,\n GTE: GTE,\n LT: LT,\n LTE: LTE,\n MINUS: MINUS,\n MULTIPLY: MULTIPLY,\n NE: NE,\n POW: POW\n});\n\nconst WEEK_STARTS = [\n undefined,\n 0,\n 1,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 0\n];\nconst WEEK_TYPES = [\n [],\n [1, 2, 3, 4, 5, 6, 7],\n [7, 1, 2, 3, 4, 5, 6],\n [6, 0, 1, 2, 3, 4, 5],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [7, 1, 2, 3, 4, 5, 6],\n [6, 7, 1, 2, 3, 4, 5],\n [5, 6, 7, 1, 2, 3, 4],\n [4, 5, 6, 7, 1, 2, 3],\n [3, 4, 5, 6, 7, 1, 2],\n [2, 3, 4, 5, 6, 7, 1],\n [1, 2, 3, 4, 5, 6, 7]\n];\nconst WEEKEND_TYPES = [\n [],\n [6, 0],\n [0, 1],\n [1, 2],\n [2, 3],\n [3, 4],\n [4, 5],\n [5, 6],\n undefined,\n undefined,\n undefined,\n [0, 0],\n [1, 1],\n [2, 2],\n [3, 3],\n [4, 4],\n [5, 5],\n [6, 6]\n];\n\n/**\n * Returns the serial number of a particular date.\n *\n * Category: Date and time\n *\n * @param {*} year Year\n * @param {*} month Month\n * @param {*} day Day\n * @returns\n */\nfunction DATE(year, month, day) {\n let result;\n\n year = parseNumber(year);\n month = parseNumber(month);\n day = parseNumber(day);\n\n if (anyIsError(year, month, day)) {\n result = value;\n } else {\n result = new Date(year, month - 1, day);\n\n if (result.getFullYear() < 0) {\n result = num;\n }\n }\n\n return returnSerial ? dateToSerial(result) : result\n}\n\n/**\n * Calculates the number of days, months, or years between two dates. This function is useful in formulas where you need to calculate an age.\n *\n * Category: Date and time\n *\n * @param {*} start_date A date that represents the first, or starting date of a given period.\n * @param {*} end_date A date that represents the last, or ending, date of the period.\n * @param {*} unit The type of information that you want returned, where:\n - \"Y\": The number of complete years in the period.\n - \"M\": The number of complete months in the period.\n - \"D\": The number of days in the period.\n - \"MD\": The difference between the days in start_date and end_date. The months and years of the dates are ignored.\n - \"YM\": The difference between the months in start_date and end_date. The days and years of the dates are ignored\n - \"YD\": The difference between the days of start_date and end_date. The years of the dates are ignored.\n * @returns\n */\nfunction DATEDIF(start_date, end_date, unit) {\n unit = unit.toUpperCase();\n start_date = parseDate(start_date);\n end_date = parseDate(end_date);\n\n const start_date_year = start_date.getFullYear();\n const start_date_month = start_date.getMonth();\n const start_date_day = start_date.getDate();\n const end_date_year = end_date.getFullYear();\n const end_date_month = end_date.getMonth();\n const end_date_day = end_date.getDate();\n\n let result;\n\n switch (unit) {\n case 'Y':\n result = Math.floor(YEARFRAC(start_date, end_date));\n break\n case 'D':\n result = DAYS(end_date, start_date);\n break\n case 'M':\n result = end_date_month - start_date_month + 12 * (end_date_year - start_date_year);\n\n if (end_date_day < start_date_day) {\n result--;\n }\n\n break\n case 'MD':\n if (start_date_day <= end_date_day) {\n result = end_date_day - start_date_day;\n } else {\n if (end_date_month === 0) {\n start_date.setFullYear(end_date_year - 1);\n start_date.setMonth(12);\n } else {\n start_date.setFullYear(end_date_year);\n start_date.setMonth(end_date_month - 1);\n }\n\n result = DAYS(end_date, start_date);\n }\n\n break\n case 'YM':\n result = end_date_month - start_date_month + 12 * (end_date_year - start_date_year);\n\n if (end_date_day < start_date_day) {\n result--;\n }\n\n result = result % 12;\n break\n case 'YD':\n if (end_date_month > start_date_month || (end_date_month === start_date_month && end_date_day < start_date_day)) {\n start_date.setFullYear(end_date_year);\n } else {\n start_date.setFullYear(end_date_year - 1);\n }\n\n result = DAYS(end_date, start_date);\n break\n }\n\n return result\n}\n\n/**\n * Converts a date in the form of text to a serial number.\n *\n * Category: Date and time\n *\n * @param {*} date_text Text that represents a date in an Excel date format, or a reference to a value that contains text that represents a date in an Excel date format.\n * @returns\n */\nfunction DATEVALUE(date_text) {\n if (typeof date_text !== 'string') {\n return value\n }\n\n const date = Date.parse(date_text);\n\n if (isNaN(date)) {\n return value\n }\n\n const dateValue = new Date(date_text);\n\n return returnSerial ? dateToSerial(dateValue) : dateValue\n}\n\n/**\n * Converts a serial number to a day of the month.\n *\n * Category: Date and time\n *\n * @param {*} serial_number The date of the day you are trying to find.\n * @returns\n */\nfunction DAY(serial_number) {\n const date = parseDate(serial_number);\n\n if (date instanceof Error) {\n return date\n }\n\n return date.getDate()\n}\n\nfunction startOfDay(date) {\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n\n return newDate\n}\n\n/**\n * Returns the number of days between two dates.\n *\n * Category: Date and time\n *\n * @param {*} end_date Start_date and End_date are the two dates between which you want to know the number of days.\n * @param {*} start_date Start_date and End_date are the two dates between which you want to know the number of days.\n * @returns\n */\nfunction DAYS(end_date, start_date) {\n end_date = parseDate(end_date);\n start_date = parseDate(start_date);\n\n if (end_date instanceof Error) {\n return end_date\n }\n\n if (start_date instanceof Error) {\n return start_date\n }\n\n return dateToSerial(startOfDay(end_date)) - dateToSerial(startOfDay(start_date))\n}\n\n/**\n * Calculates the number of days between two dates based on a 360-day year.\n *\n * Category: Date and time\n *\n * @param {*} start_date A date that represents the start date. If start_date occurs after end_date, the DAYS360 function returns a negative number.\n * @param {*} end_date A date that represents the end date.\n * @param {*} [method] Optional. A logical value that specifies whether to use the U.S. or European method in the calculation.\n * @returns\n */\nfunction DAYS360(start_date, end_date, method) {\n method = parseBool(method || 'false');\n start_date = parseDate(start_date);\n end_date = parseDate(end_date);\n\n if (start_date instanceof Error) {\n return start_date\n }\n\n if (end_date instanceof Error) {\n return end_date\n }\n\n if (method instanceof Error) {\n return method\n }\n\n const sm = start_date.getMonth();\n let em = end_date.getMonth();\n let sd, ed;\n\n if (method) {\n sd = start_date.getDate() === 31 ? 30 : start_date.getDate();\n ed = end_date.getDate() === 31 ? 30 : end_date.getDate();\n } else {\n const smd = new Date(start_date.getFullYear(), sm + 1, 0).getDate();\n const emd = new Date(end_date.getFullYear(), em + 1, 0).getDate();\n sd = start_date.getDate() === smd ? 30 : start_date.getDate();\n\n if (end_date.getDate() === emd) {\n if (sd < 30) {\n em++;\n ed = 1;\n } else {\n ed = 30;\n }\n } else {\n ed = end_date.getDate();\n }\n }\n\n return 360 * (end_date.getFullYear() - start_date.getFullYear()) + 30 * (em - sm) + (ed - sd)\n}\n\n/**\n * Returns the serial number of the date that is the indicated number of months before or after the start date.\n *\n * Category: Date and time\n *\n * @param {*} start_date A date that represents the start date.\n * @param {*} months The number of months before or after start_date. A positive value for months yields a future date; a negative value yields a past date.\n * @returns\n */\nfunction EDATE(start_date, months) {\n start_date = parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date\n }\n\n if (isNaN(months)) {\n return value\n }\n\n // store the day and temporarily set to 1, which is safe\n let storedDay = start_date.getDate();\n start_date.setDate(1);\n\n months = parseInt(months, 10);\n start_date.setMonth(start_date.getMonth() + months);\n\n let targetMonth = start_date.getMonth();\n\n // if storedDay > 28 then we need to check end-of-month scenarios\n if (storedDay > 28) {\n let daysInTargetMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][targetMonth];\n\n // if target month is February, check for a leap year\n let targetYear = start_date.getFullYear();\n if (targetMonth === 1 && ((targetYear % 4 === 0 && targetYear % 100 !== 0) || targetYear % 400 === 0)) {\n daysInTargetMonth = 29;\n }\n storedDay = Math.min(storedDay, daysInTargetMonth);\n }\n\n start_date.setDate(storedDay);\n\n return returnSerial ? dateToSerial(start_date) : start_date\n}\n\n/**\n * Returns the serial number of the last day of the month before or after a specified number of months.\n *\n * Category: Date and time\n *\n * @param {*} start_date A date that represents the starting date.\n * @param {*} months The number of months before or after start_date. A positive value for months yields a future date; a negative value yields a past date.\n * @returns\n */\nfunction EOMONTH(start_date, months) {\n start_date = parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date\n }\n\n if (isNaN(months)) {\n return value\n }\n\n months = parseInt(months, 10);\n\n const eoMonth = new Date(start_date.getFullYear(), start_date.getMonth() + months + 1, 0);\n\n return returnSerial ? dateToSerial(eoMonth) : eoMonth\n}\n\n/**\n * Converts a serial number to an hour.\n *\n * Category: Date and time\n *\n * @param {*} serial_number The time that contains the hour you want to find. Times may be entered as text strings within quotation marks (for example, \"6:45 PM\"), as decimal numbers (for example, 0.78125, which represents 6:45 PM), or as results of other formulas or functions (for example, TIMEVALUE(\"6:45 PM\")).\n * @returns\n */\nfunction HOUR(serial_number) {\n serial_number = parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number\n }\n\n return serial_number.getHours()\n}\n\n/**\n * Returns the number of the ISO week number of the year for a given date.\n *\n * Category: Date and time\n *\n * @param {*} date Date is the date-time code used by Excel for date and time calculation.\n * @returns\n */\nfunction ISOWEEKNUM(date) {\n date = parseDate(date);\n\n if (date instanceof Error) {\n return date\n }\n\n date = startOfDay(date);\n date.setDate(date.getDate() + 4 - (date.getDay() || 7));\n const yearStart = new Date(date.getFullYear(), 0, 1);\n\n return Math.ceil(((date - yearStart) / 86400000 + 1) / 7)\n}\n\n/**\n * Converts a serial number to a minute.\n *\n * Category: Date and time\n *\n * @param {*} serial_number The time that contains the minute you want to find. Times may be entered as text strings within quotation marks (for example, \"6:45 PM\"), as decimal numbers (for example, 0.78125, which represents 6:45 PM), or as results of other formulas or functions (for example, TIMEVALUE(\"6:45 PM\")).\n * @returns\n */\nfunction MINUTE(serial_number) {\n serial_number = parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number\n }\n\n return serial_number.getMinutes()\n}\n\n/**\n * Converts a serial number to a month.\n *\n * Category: Date and time\n *\n * @param {*} serial_number The date of the month you are trying to find.\n * @returns\n */\nfunction MONTH(serial_number) {\n serial_number = parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number\n }\n\n return serial_number.getMonth() + 1\n}\n\n/**\n * Returns the number of whole workdays between two dates.\n *\n * Category: Date and time\n *\n * @param {*} start_date A date that represents the start date.\n * @param {*} end_date A date that represents the end date.\n * @param {*} [holidays] Optional. An optional range of one or more dates to exclude from the working calendar, such as state and federal holidays and floating holidays. The list can be either a range of values that contains the dates or an array constant of the serial numbers that represent the dates.\n * @returns\n */\nfunction NETWORKDAYS(start_date, end_date, holidays) {\n return NETWORKDAYS.INTL(start_date, end_date, 1, holidays)\n}\n\n/**\n * Returns the number of whole workdays between two dates using parameters to indicate which and how many days are weekend days.\n *\n * Category: Date and time\n *\n * @param {*} start_date The date for from which the difference is to be computed. The start_date can be earlier than, the same as, or later than the end_date.\n * @param {*} end_date The date for to which the difference is to be computed.\n * @param {*} [weekend] Optional. Indicates the days of the week that are weekend days and are not included in the number of whole working days between start_date and end_date. Weekend is a weekend number or string that specifies when weekends occur. Weekend number values indicate the following weekend days:\n * @param {*} [holidays] Optional. An optional set of one or more dates that are to be excluded from the working day calendar. holidays shall be a range of values that contain the dates, or an array constant of the serial values that represent those dates. The ordering of dates or serial values in holidays can be arbitrary.\n * @returns\n */\nNETWORKDAYS.INTL = (start_date, end_date, weekend, holidays) => {\n start_date = parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date\n }\n\n end_date = parseDate(end_date);\n\n if (end_date instanceof Error) {\n return end_date\n }\n\n let isMask = false;\n const maskDays = [];\n const maskIndex = [1, 2, 3, 4, 5, 6, 0];\n const maskRegex = new RegExp('^[0|1]{7}$');\n\n if (weekend === undefined) {\n weekend = WEEKEND_TYPES[1];\n } else if (typeof weekend === 'string' && maskRegex.test(weekend)) {\n isMask = true;\n weekend = weekend.split('');\n\n for (let i = 0; i < weekend.length; i++) {\n if (weekend[i] === '1') {\n maskDays.push(maskIndex[i]);\n }\n }\n } else {\n weekend = WEEKEND_TYPES[weekend];\n }\n\n if (!(weekend instanceof Array)) {\n return value\n }\n\n if (holidays === undefined) {\n holidays = [];\n } else if (!(holidays instanceof Array)) {\n holidays = [holidays];\n }\n\n for (let i = 0; i < holidays.length; i++) {\n const h = parseDate(holidays[i]);\n\n if (h instanceof Error) {\n return h\n }\n\n holidays[i] = h;\n }\n\n const days = Math.round((end_date - start_date) / (1000 * 60 * 60 * 24)) + 1;\n let total = days;\n const day = start_date;\n\n for (let i = 0; i < days; i++) {\n const d = new Date().getTimezoneOffset() > 0 ? day.getUTCDay() : day.getDay();\n let dec = isMask ? maskDays.includes(d) : d === weekend[0] || d === weekend[1];\n\n for (let j = 0; j < holidays.length; j++) {\n const holiday = holidays[j];\n\n if (\n holiday.getDate() === day.getDate() &&\n holiday.getMonth() === day.getMonth() &&\n holiday.getFullYear() === day.getFullYear()\n ) {\n dec = true;\n break\n }\n }\n\n if (dec) {\n total--;\n }\n\n day.setDate(day.getDate() + 1);\n }\n\n return total\n};\n\n/**\n * Returns the serial number of the current date and time.\n *\n * Category: Date and time\n *\n * @returns\n */\nfunction NOW() {\n return returnSerial ? dateToSerial(new Date()) : new Date()\n}\n\n/**\n * Converts a serial number to a second.\n *\n * Category: Date and time\n *\n * @param {*} serial_number The time that contains the seconds you want to find. Times may be entered as text strings within quotation marks (for example, \"6:45 PM\"), as decimal numbers (for example, 0.78125, which represents 6:45 PM), or as results of other formulas or functions (for example, TIMEVALUE(\"6:45 PM\")).\n * @returns\n */\nfunction SECOND(serial_number) {\n serial_number = parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number\n }\n\n return serial_number.getSeconds()\n}\n\n/**\n * Returns the serial number of a particular time.\n *\n * Category: Date and time\n *\n * @param {*} hour A number from 0 (zero) to 32767 representing the hour. Any value greater than 23 will be divided by 24 and the remainder will be treated as the hour value. For example, TIME(27,0,0) = TIME(3,0,0) = .125 or 3:00 AM.\n * @param {*} minute A number from 0 to 32767 representing the minute. Any value greater than 59 will be converted to hours and minutes. For example, TIME(0,750,0) = TIME(12,30,0) = .520833 or 12:30 PM.\n * @param {*} second A number from 0 to 32767 representing the second. Any value greater than 59 will be converted to hours, minutes, and seconds. For example, TIME(0,0,2000) = TIME(0,33,22) = .023148 or 12:33:20 AM\n * @returns\n */\nfunction TIME(hour, minute, second) {\n hour = parseNumber(hour);\n minute = parseNumber(minute);\n second = parseNumber(second);\n\n if (anyIsError(hour, minute, second)) {\n return value\n }\n\n if (hour < 0 || minute < 0 || second < 0) {\n return num\n }\n\n return (3600 * hour + 60 * minute + second) / 86400\n}\n\n/**\n * Converts a time in the form of text to a serial number.\n *\n * Category: Date and time\n *\n * @param {*} time_text A text string that represents a time in any one of the Microsoft Excel time formats; for example, \"6:45 PM\" and \"18:45\" text strings within quotation marks that represent time.\n * @returns\n */\nfunction TIMEVALUE(time_text) {\n time_text = parseDate(time_text);\n\n if (time_text instanceof Error) {\n return time_text\n }\n\n return (3600 * time_text.getHours() + 60 * time_text.getMinutes() + time_text.getSeconds()) / 86400\n}\n\n/**\n * Returns the serial number of today's date.\n *\n * Category: Date and time\n *\n * @returns\n */\nfunction TODAY() {\n const today = startOfDay(new Date());\n return returnSerial ? dateToSerial(today) : today\n}\n\n/**\n * Converts a serial number to a day of the week.\n *\n * Category: Date and time\n *\n * @param {*} serial_number A sequential number that represents the date of the day you are trying to find.\n * @param {*} [return_type] Optional. A number that determines the type of return value.\n * @returns\n */\nfunction WEEKDAY(serial_number, return_type) {\n serial_number = parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number\n }\n\n if (return_type === undefined) {\n return_type = 1;\n }\n\n const day = serial_number.getDay();\n\n return WEEK_TYPES[return_type][day]\n}\n\n/**\n * Converts a serial number to a number representing where the week falls numerically with a year.\n *\n * Category: Date and time\n *\n * @param {*} serial_number A date within the week.\n * @param {*} [return_type] Optional. A number that determines on which day the week begins. The default is 1.\n * @returns\n */\nfunction WEEKNUM(serial_number, return_type) {\n serial_number = parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number\n }\n\n if (return_type === undefined) {\n return_type = 1;\n }\n\n if (return_type === 21) {\n return ISOWEEKNUM(serial_number)\n }\n\n const week_start = WEEK_STARTS[return_type];\n let jan = new Date(serial_number.getFullYear(), 0, 1);\n const inc = jan.getDay() < week_start ? 1 : 0;\n jan -= Math.abs(jan.getDay() - week_start) * 24 * 60 * 60 * 1000;\n\n return Math.floor((serial_number - jan) / (1000 * 60 * 60 * 24) / 7 + 1) + inc\n}\n\n/**\n * Returns the serial number of the date before or after a specified number of workdays.\n *\n * Category: Date and time\n *\n * @param {*} start_date A date that represents the start date.\n * @param {*} days The number of nonweekend and nonholiday days before or after start_date. A positive value for days yields a future date; a negative value yields a past date.\n * @param {*} [holidays] Optional. An optional list of one or more dates to exclude from the working calendar, such as state and federal holidays and floating holidays. The list can be either a range of values that contain the dates or an array constant of the serial numbers that represent the dates.\n * @returns\n */\nfunction WORKDAY(start_date, days, holidays) {\n return WORKDAY.INTL(start_date, days, 1, holidays)\n}\n\n/**\n * Returns the serial number of the date before or after a specified number of workdays using parameters to indicate which and how many days are weekend days.\n *\n * Category: Date and time\n *\n * @param {*} start_date The start date, truncated to integer.\n * @param {*} days The number of workdays before or after the start_date. A positive value yields a future date; a negative value yields a past date; a zero value yields the start_date. Day-offset is truncated to an integer.\n * @param {*} [weekend] Optional. Indicates the days of the week that are weekend days and are not considered working days. Weekend is a weekend number or string that specifies when weekends occur. Weekend number values indicate the following weekend days:\n * @param {*} [holidays] Optional. An optional set of one or more dates that are to be excluded from the working day calendar. Holidays shall be a range of values that contain the dates, or an array constant of the serial values that represent those dates. The ordering of dates or serial values in holidays can be arbitrary.\n * @returns\n */\nWORKDAY.INTL = (start_date, days, weekend, holidays) => {\n start_date = parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date\n }\n\n days = parseNumber(days);\n\n if (days instanceof Error) {\n return days\n }\n\n if (weekend === undefined) {\n weekend = WEEKEND_TYPES[1];\n } else {\n weekend = WEEKEND_TYPES[weekend];\n }\n\n if (!(weekend instanceof Array)) {\n return value\n }\n\n if (holidays === undefined) {\n holidays = [];\n } else if (!(holidays instanceof Array)) {\n holidays = [holidays];\n }\n\n for (let i = 0; i < holidays.length; i++) {\n const h = parseDate(holidays[i]);\n\n if (h instanceof Error) {\n return h\n }\n\n holidays[i] = h;\n }\n\n let d = 0;\n\n const sign = Math.sign(days);\n\n while (d < days * sign) {\n start_date.setDate(start_date.getDate() + sign);\n\n const day = start_date.getDay();\n\n if (day === weekend[0] || day === weekend[1]) {\n continue\n }\n\n for (let j = 0; j < holidays.length; j++) {\n const holiday = holidays[j];\n\n if (\n holiday.getDate() === start_date.getDate() &&\n holiday.getMonth() === start_date.getMonth() &&\n holiday.getFullYear() === start_date.getFullYear()\n ) {\n d--;\n break\n }\n }\n\n d++;\n }\n\n // EXCEL does not recognize dates before 1900.\n if (start_date.getFullYear() < 1900) {\n return value\n }\n\n return start_date\n};\n\n/**\n * Converts a serial number to a year.\n *\n * Category: Date and time\n *\n * @param {*} serial_number The date of the year you want to find.\n * @returns\n */\nfunction YEAR(serial_number) {\n serial_number = parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number\n }\n\n return serial_number.getFullYear()\n}\n\nfunction isLeapYear(year) {\n return new Date(year, 1, 29).getMonth() === 1\n}\n\n// TODO : Use DAYS ?\nfunction daysBetween(start_date, end_date) {\n return Math.ceil((end_date - start_date) / 1000 / 60 / 60 / 24)\n}\n\n/**\n * Returns the year fraction representing the number of whole days between start_date and end_date.\n *\n * Category: Date and time\n *\n * @param {*} start_date A date that represents the start date.\n * @param {*} end_date A date that represents the end date.\n * @param {*} [basis] Optional. The type of day count basis to use.\n * @returns\n */\nfunction YEARFRAC(start_date, end_date, basis) {\n start_date = parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date\n }\n\n end_date = parseDate(end_date);\n\n if (end_date instanceof Error) {\n return end_date\n }\n\n basis = basis || 0;\n let sd = start_date.getDate();\n const sm = start_date.getMonth() + 1;\n const sy = start_date.getFullYear();\n let ed = end_date.getDate();\n const em = end_date.getMonth() + 1;\n const ey = end_date.getFullYear();\n\n switch (basis) {\n case 0:\n // US (NASD) 30/360\n if (sd === 31 && ed === 31) {\n sd = 30;\n ed = 30;\n } else if (sd === 31) {\n sd = 30;\n } else if (sd === 30 && ed === 31) {\n ed = 30;\n }\n\n return (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360\n case 1: {\n // Actual/actual\n const feb29Between = (date1, date2) => {\n const year1 = date1.getFullYear();\n const mar1year1 = new Date(year1, 2, 1);\n\n if (isLeapYear(year1) && date1 < mar1year1 && date2 >= mar1year1) {\n return true\n }\n\n const year2 = date2.getFullYear();\n const mar1year2 = new Date(year2, 2, 1);\n\n return isLeapYear(year2) && date2 >= mar1year2 && date1 < mar1year2\n };\n\n let ylength = 365;\n\n if (sy === ey || (sy + 1 === ey && (sm > em || (sm === em && sd >= ed)))) {\n if ((sy === ey && isLeapYear(sy)) || feb29Between(start_date, end_date) || (em === 1 && ed === 29)) {\n ylength = 366;\n }\n\n return daysBetween(start_date, end_date) / ylength\n }\n\n const years = ey - sy + 1;\n const days = (new Date(ey + 1, 0, 1) - new Date(sy, 0, 1)) / 1000 / 60 / 60 / 24;\n const average = days / years;\n\n return daysBetween(start_date, end_date) / average\n }\n\n case 2:\n // Actual/360\n\n return daysBetween(start_date, end_date) / 360\n case 3:\n // Actual/365\n\n return daysBetween(start_date, end_date) / 365\n case 4:\n // European 30/360\n\n return (ed + em * 30 + ey * 360 - (sd + sm * 30 + sy * 360)) / 360\n }\n}\n\nfunction isValidBinaryNumber(number) {\n return /^[01]{1,10}$/.test(number)\n}\n\n/**\n * Returns the modified Bessel function In(x).\n *\n * Category: Engineering\n *\n * @param {*} x The value at which to evaluate the function.\n * @param {*} n The order of the Bessel function. If n is not an integer, it is truncated.\n * @returns\n */\nfunction BESSELI(x, n) {\n x = parseNumber(x);\n n = parseNumber(n);\n\n if (anyIsError(x, n)) {\n return value\n }\n\n return bessel.besseli(x, n)\n}\n\n/**\n * Returns the Bessel function Jn(x).\n *\n * Category: Engineering\n *\n * @param {*} x The value at which to evaluate the function.\n * @param {*} n The order of the Bessel function. If n is not an integer, it is truncated.\n * @returns\n */\nfunction BESSELJ(x, n) {\n x = parseNumber(x);\n n = parseNumber(n);\n\n if (anyIsError(x, n)) {\n return value\n }\n\n return bessel.besselj(x, n)\n}\n\n/**\n * Returns the modified Bessel function Kn(x).\n *\n * Category: Engineering\n *\n * @param {*} x The value at which to evaluate the function.\n * @param {*} n The order of the function. If n is not an integer, it is truncated.\n * @returns\n */\nfunction BESSELK(x, n) {\n x = parseNumber(x);\n n = parseNumber(n);\n\n if (anyIsError(x, n)) {\n return value\n }\n\n return bessel.besselk(x, n)\n}\n\n/**\n * Returns the Bessel function Yn(x).\n *\n * Category: Engineering\n *\n * @param {*} x The value at which to evaluate the function.\n * @param {*} n The order of the function. If n is not an integer, it is truncated.\n * @returns\n */\nfunction BESSELY(x, n) {\n x = parseNumber(x);\n n = parseNumber(n);\n\n if (anyIsError(x, n)) {\n return value\n }\n\n return bessel.bessely(x, n)\n}\n\n/**\n * Converts a binary number to decimal.\n *\n * Category: Engineering\n *\n * @param {*} number The binary number you want to convert. Number cannot contain more than 10 characters (10 bits). The most significant bit of number is the sign bit. The remaining 9 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @returns\n */\nfunction BIN2DEC(number) {\n // Return error if number is not binary or contains more than 10 characters (10 digits)\n if (!isValidBinaryNumber(number)) {\n return num\n }\n\n // Convert binary number to decimal\n const result = parseInt(number, 2);\n\n // Handle negative numbers\n const stringified = number.toString();\n\n if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\n return parseInt(stringified.substring(1), 2) - 512\n } else {\n return result\n }\n}\n\n/**\n * Converts a binary number to hexadecimal.\n *\n * Category: Engineering\n *\n * @param {*} number The binary number you want to convert. Number cannot contain more than 10 characters (10 bits). The most significant bit of number is the sign bit. The remaining 9 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @param {*} [places] Optional. The number of characters to use. If places is omitted, BIN2HEX uses the minimum number of characters necessary. Places is useful for padding the return value with leading 0s (zeros).\n * @returns\n */\nfunction BIN2HEX(number, places) {\n // Return error if number is not binary or contains more than 10 characters (10 digits)\n if (!isValidBinaryNumber(number)) {\n return num\n }\n\n // Ignore places and return a 10-character hexadecimal number if number is negative\n const stringified = number.toString();\n\n if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\n return (1099511627264 + parseInt(stringified.substring(1), 2)).toString(16)\n }\n\n // Convert binary number to hexadecimal\n const result = parseInt(number, 2).toString(16);\n\n // Return hexadecimal number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return value\n }\n\n // Return error if places is negative\n if (places < 0) {\n return num\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return places >= result.length ? REPT('0', places - result.length) + result : num\n }\n}\n\n/**\n * Converts a binary number to octal.\n *\n * Category: Engineering\n *\n * @param {*} number The binary number you want to convert. Number cannot contain more than 10 characters (10 bits). The most significant bit of number is the sign bit. The remaining 9 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @param {*} [places] Optional. The number of characters to use. If places is omitted, BIN2OCT uses the minimum number of characters necessary. Places is useful for padding the return value with leading 0s (zeros).\n * @returns\n */\nfunction BIN2OCT(number, places) {\n // Return error if number is not binary or contains more than 10 characters (10 digits)\n if (!isValidBinaryNumber(number)) {\n return num\n }\n\n // Ignore places and return a 10-character octal number if number is negative\n const stringified = number.toString();\n\n if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\n return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8)\n }\n\n // Convert binary number to octal\n const result = parseInt(number, 2).toString(8);\n\n // Return octal number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return value\n }\n\n // Return error if places is negative\n if (places < 0) {\n return num\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return places >= result.length ? REPT('0', places - result.length) + result : num\n }\n}\n\n/**\n * Returns a 'Bitwise And' of two numbers.\n *\n * Category: Engineering\n *\n * @param {*} number1 Must be in decimal form and greater than or equal to 0.\n * @param {*} number2 Must be in decimal form and greater than or equal to 0.\n * @returns\n */\nfunction BITAND(number1, number2) {\n // Return error if either number is a non-numeric value\n number1 = parseNumber(number1);\n number2 = parseNumber(number2);\n\n if (anyIsError(number1, number2)) {\n return value\n }\n\n // Return error if either number is less than 0\n if (number1 < 0 || number2 < 0) {\n return num\n }\n\n // Return error if either number is a non-integer\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n return num\n }\n\n // Return error if either number is greater than (2^48)-1\n if (number1 > 281474976710655 || number2 > 281474976710655) {\n return num\n }\n\n // Return bitwise AND of two numbers\n return number1 & number2\n}\n\n/**\n * Returns a value number shifted left by shift_amount bits.\n *\n * Category: Engineering\n *\n * @param {*} number Number must be an integer greater than or equal to 0.\n * @param {*} shift_amount Shift_amount must be an integer.\n * @returns\n */\nfunction BITLSHIFT(number, shift_amount) {\n number = parseNumber(number);\n shift_amount = parseNumber(shift_amount);\n\n if (anyIsError(number, shift_amount)) {\n return value\n }\n\n // Return error if number is less than 0\n if (number < 0) {\n return num\n }\n\n // Return error if number is a non-integer\n if (Math.floor(number) !== number) {\n return num\n }\n\n // Return error if number is greater than (2^48)-1\n if (number > 281474976710655) {\n return num\n }\n\n // Return error if the absolute value of shift is greater than 53\n if (Math.abs(shift_amount) > 53) {\n return num\n }\n\n // Return number shifted by shift bits to the left or to the right if shift is negative\n return shift_amount >= 0 ? number << shift_amount : number >> -shift_amount\n}\n\n/**\n * Returns a bitwise OR of 2 numbers.\n *\n * Category: Engineering\n *\n * @param {*} number1 Must be in decimal form and greater than or equal to 0.\n * @param {*} number2 Must be in decimal form and greater than or equal to 0.\n * @returns\n */\nfunction BITOR(number1, number2) {\n number1 = parseNumber(number1);\n number2 = parseNumber(number2);\n\n if (anyIsError(number1, number2)) {\n return value\n }\n\n // Return error if either number is less than 0\n if (number1 < 0 || number2 < 0) {\n return num\n }\n\n // Return error if either number is a non-integer\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n return num\n }\n\n // Return error if either number is greater than (2^48)-1\n if (number1 > 281474976710655 || number2 > 281474976710655) {\n return num\n }\n\n // Return bitwise OR of two numbers\n return number1 | number2\n}\n\n/**\n * Returns a value number shifted right by shift_amount bits.\n *\n * Category: Engineering\n *\n * @param {*} number Must be an integer greater than or equal to 0.\n * @param {*} shift_amount Must be an integer.\n * @returns\n */\nfunction BITRSHIFT(number, shift_amount) {\n number = parseNumber(number);\n shift_amount = parseNumber(shift_amount);\n\n if (anyIsError(number, shift_amount)) {\n return value\n }\n\n // Return error if number is less than 0\n if (number < 0) {\n return num\n }\n\n // Return error if number is a non-integer\n if (Math.floor(number) !== number) {\n return num\n }\n\n // Return error if number is greater than (2^48)-1\n if (number > 281474976710655) {\n return num\n }\n\n // Return error if the absolute value of shift is greater than 53\n if (Math.abs(shift_amount) > 53) {\n return num\n }\n\n // Return number shifted by shift bits to the right or to the left if shift is negative\n return shift_amount >= 0 ? number >> shift_amount : number << -shift_amount\n}\n\n/**\n * Returns a bitwise 'Exclusive Or' of two numbers.\n *\n * Category: Engineering\n *\n * @param {*} number1 Must be greater than or equal to 0.\n * @param {*} number2 Must be greater than or equal to 0.\n * @returns\n */\nfunction BITXOR(number1, number2) {\n number1 = parseNumber(number1);\n number2 = parseNumber(number2);\n\n if (anyIsError(number1, number2)) {\n return value\n }\n\n // Return error if either number is less than 0\n if (number1 < 0 || number2 < 0) {\n return num\n }\n\n // Return error if either number is a non-integer\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n return num\n }\n\n // Return error if either number is greater than (2^48)-1\n if (number1 > 281474976710655 || number2 > 281474976710655) {\n return num\n }\n\n // Return bitwise XOR of two numbers\n return number1 ^ number2\n}\n\n/**\n * Converts real and imaginary coefficients into a complex number.\n *\n * Category: Engineering\n *\n * @param {*} real_num The real coefficient of the complex number.\n * @param {*} i_num The imaginary coefficient of the complex number.\n * @param {*} [suffix] Optional. The suffix for the imaginary component of the complex number. If omitted, suffix is assumed to be \"i\".\n * @returns\n */\nfunction COMPLEX(real_num, i_num, suffix) {\n real_num = parseNumber(real_num);\n i_num = parseNumber(i_num);\n\n if (anyIsError(real_num, i_num)) {\n return real_num\n }\n\n // Set suffix\n suffix = suffix === undefined ? 'i' : suffix;\n\n // Return error if suffix is neither \"i\" nor \"j\"\n if (suffix !== 'i' && suffix !== 'j') {\n return value\n }\n\n // Return complex number\n if (real_num === 0 && i_num === 0) {\n return 0\n } else if (real_num === 0) {\n return i_num === 1 ? suffix : i_num.toString() + suffix\n } else if (i_num === 0) {\n return real_num.toString()\n } else {\n const sign = i_num > 0 ? '+' : '';\n return real_num.toString() + sign + (i_num === 1 ? suffix : i_num.toString() + suffix)\n }\n}\n\n/**\n * Converts a number from one measurement system to another.\n *\n * Category: Engineering\n *\n * @param {*} number is the value in from_units to convert.\n * @param {*} from_unit is the units for number.\n * @param {*} to_unit is the units for the result. CONVERT accepts the following text values (in quotation marks) for from_unit and to_unit.\n * @returns\n */\nfunction CONVERT(number, from_unit, to_unit) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n // List of units supported by CONVERT and units defined by the International System of Units\n // [Name, Symbol, Alternate symbols, Quantity, ISU, CONVERT, Conversion ratio]\n const units = [\n ['a.u. of action', '?', null, 'action', false, false, 1.05457168181818e-34],\n ['a.u. of charge', 'e', null, 'electric_charge', false, false, 1.60217653141414e-19],\n ['a.u. of energy', 'Eh', null, 'energy', false, false, 4.35974417757576e-18],\n ['a.u. of length', 'a?', null, 'length', false, false, 5.29177210818182e-11],\n ['a.u. of mass', 'm?', null, 'mass', false, false, 9.10938261616162e-31],\n ['a.u. of time', '?/Eh', null, 'time', false, false, 2.41888432650516e-17],\n ['admiralty knot', 'admkn', null, 'speed', false, true, 0.514773333],\n ['ampere', 'A', null, 'electric_current', true, false, 1],\n ['ampere per meter', 'A/m', null, 'magnetic_field_intensity', true, false, 1],\n ['ångström', 'Å', ['ang'], 'length', false, true, 1e-10],\n ['are', 'ar', null, 'area', false, true, 100],\n ['astronomical unit', 'ua', null, 'length', false, false, 1.49597870691667e-11],\n ['bar', 'bar', null, 'pressure', false, false, 100000],\n ['barn', 'b', null, 'area', false, false, 1e-28],\n ['becquerel', 'Bq', null, 'radioactivity', true, false, 1],\n ['bit', 'bit', ['b'], 'information', false, true, 1],\n ['btu', 'BTU', ['btu'], 'energy', false, true, 1055.05585262],\n ['byte', 'byte', null, 'information', false, true, 8],\n ['candela', 'cd', null, 'luminous_intensity', true, false, 1],\n ['candela per square metre', 'cd/m?', null, 'luminance', true, false, 1],\n ['coulomb', 'C', null, 'electric_charge', true, false, 1],\n ['cubic ångström', 'ang3', ['ang^3'], 'volume', false, true, 1e-30],\n ['cubic foot', 'ft3', ['ft^3'], 'volume', false, true, 0.028316846592],\n ['cubic inch', 'in3', ['in^3'], 'volume', false, true, 0.000016387064],\n ['cubic light-year', 'ly3', ['ly^3'], 'volume', false, true, 8.46786664623715e-47],\n ['cubic metre', 'm3', ['m^3'], 'volume', true, true, 1],\n ['cubic mile', 'mi3', ['mi^3'], 'volume', false, true, 4168181825.44058],\n ['cubic nautical mile', 'Nmi3', ['Nmi^3'], 'volume', false, true, 6352182208],\n ['cubic Pica', 'Pica3', ['Picapt3', 'Pica^3', 'Picapt^3'], 'volume', false, true, 7.58660370370369e-8],\n ['cubic yard', 'yd3', ['yd^3'], 'volume', false, true, 0.764554857984],\n ['cup', 'cup', null, 'volume', false, true, 0.0002365882365],\n ['dalton', 'Da', ['u'], 'mass', false, false, 1.66053886282828e-27],\n ['day', 'd', ['day'], 'time', false, true, 86400],\n ['degree', '°', null, 'angle', false, false, 0.0174532925199433],\n ['degrees Rankine', 'Rank', null, 'temperature', false, true, 0.555555555555556],\n ['dyne', 'dyn', ['dy'], 'force', false, true, 0.00001],\n ['electronvolt', 'eV', ['ev'], 'energy', false, true, 1.60217656514141],\n ['ell', 'ell', null, 'length', false, true, 1.143],\n ['erg', 'erg', ['e'], 'energy', false, true, 1e-7],\n ['farad', 'F', null, 'electric_capacitance', true, false, 1],\n ['fluid ounce', 'oz', null, 'volume', false, true, 0.0000295735295625],\n ['foot', 'ft', null, 'length', false, true, 0.3048],\n ['foot-pound', 'flb', null, 'energy', false, true, 1.3558179483314],\n ['gal', 'Gal', null, 'acceleration', false, false, 0.01],\n ['gallon', 'gal', null, 'volume', false, true, 0.003785411784],\n ['gauss', 'G', ['ga'], 'magnetic_flux_density', false, true, 1],\n ['grain', 'grain', null, 'mass', false, true, 0.0000647989],\n ['gram', 'g', null, 'mass', false, true, 0.001],\n ['gray', 'Gy', null, 'absorbed_dose', true, false, 1],\n ['gross registered ton', 'GRT', ['regton'], 'volume', false, true, 2.8316846592],\n ['hectare', 'ha', null, 'area', false, true, 10000],\n ['henry', 'H', null, 'inductance', true, false, 1],\n ['hertz', 'Hz', null, 'frequency', true, false, 1],\n ['horsepower', 'HP', ['h'], 'power', false, true, 745.69987158227],\n ['horsepower-hour', 'HPh', ['hh', 'hph'], 'energy', false, true, 2684519.538],\n ['hour', 'h', ['hr'], 'time', false, true, 3600],\n ['imperial gallon (U.K.)', 'uk_gal', null, 'volume', false, true, 0.00454609],\n ['imperial hundredweight', 'lcwt', ['uk_cwt', 'hweight'], 'mass', false, true, 50.802345],\n ['imperial quart (U.K)', 'uk_qt', null, 'volume', false, true, 0.0011365225],\n ['imperial ton', 'brton', ['uk_ton', 'LTON'], 'mass', false, true, 1016.046909],\n ['inch', 'in', null, 'length', false, true, 0.0254],\n ['international acre', 'uk_acre', null, 'area', false, true, 4046.8564224],\n ['IT calorie', 'cal', null, 'energy', false, true, 4.1868],\n ['joule', 'J', null, 'energy', true, true, 1],\n ['katal', 'kat', null, 'catalytic_activity', true, false, 1],\n ['kelvin', 'K', ['kel'], 'temperature', true, true, 1],\n ['kilogram', 'kg', null, 'mass', true, true, 1],\n ['knot', 'kn', null, 'speed', false, true, 0.514444444444444],\n ['light-year', 'ly', null, 'length', false, true, 9460730472580800],\n ['litre', 'L', ['l', 'lt'], 'volume', false, true, 0.001],\n ['lumen', 'lm', null, 'luminous_flux', true, false, 1],\n ['lux', 'lx', null, 'illuminance', true, false, 1],\n ['maxwell', 'Mx', null, 'magnetic_flux', false, false, 1e-18],\n ['measurement ton', 'MTON', null, 'volume', false, true, 1.13267386368],\n ['meter per hour', 'm/h', ['m/hr'], 'speed', false, true, 0.00027777777777778],\n ['meter per second', 'm/s', ['m/sec'], 'speed', true, true, 1],\n ['meter per second squared', 'm?s??', null, 'acceleration', true, false, 1],\n ['parsec', 'pc', ['parsec'], 'length', false, true, 30856775814671900],\n ['meter squared per second', 'm?/s', null, 'kinematic_viscosity', true, false, 1],\n ['metre', 'm', null, 'length', true, true, 1],\n ['miles per hour', 'mph', null, 'speed', false, true, 0.44704],\n ['millimetre of mercury', 'mmHg', null, 'pressure', false, false, 133.322],\n ['minute', '?', null, 'angle', false, false, 0.000290888208665722],\n ['minute', 'min', ['mn'], 'time', false, true, 60],\n ['modern teaspoon', 'tspm', null, 'volume', false, true, 0.000005],\n ['mole', 'mol', null, 'amount_of_substance', true, false, 1],\n ['morgen', 'Morgen', null, 'area', false, true, 2500],\n ['n.u. of action', '?', null, 'action', false, false, 1.05457168181818e-34],\n ['n.u. of mass', 'm?', null, 'mass', false, false, 9.10938261616162e-31],\n ['n.u. of speed', 'c?', null, 'speed', false, false, 299792458],\n ['n.u. of time', '?/(me?c??)', null, 'time', false, false, 1.28808866778687e-21],\n ['nautical mile', 'M', ['Nmi'], 'length', false, true, 1852],\n ['newton', 'N', null, 'force', true, true, 1],\n ['œrsted', 'Oe ', null, 'magnetic_field_intensity', false, false, 79.5774715459477],\n ['ohm', 'Ω', null, 'electric_resistance', true, false, 1],\n ['ounce mass', 'ozm', null, 'mass', false, true, 0.028349523125],\n ['pascal', 'Pa', null, 'pressure', true, false, 1],\n ['pascal second', 'Pa?s', null, 'dynamic_viscosity', true, false, 1],\n ['pferdestärke', 'PS', null, 'power', false, true, 735.49875],\n ['phot', 'ph', null, 'illuminance', false, false, 0.0001],\n ['pica (1/6 inch)', 'pica', null, 'length', false, true, 0.00035277777777778],\n ['pica (1/72 inch)', 'Pica', ['Picapt'], 'length', false, true, 0.00423333333333333],\n ['poise', 'P', null, 'dynamic_viscosity', false, false, 0.1],\n ['pond', 'pond', null, 'force', false, true, 0.00980665],\n ['pound force', 'lbf', null, 'force', false, true, 4.4482216152605],\n ['pound mass', 'lbm', null, 'mass', false, true, 0.45359237],\n ['quart', 'qt', null, 'volume', false, true, 0.000946352946],\n ['radian', 'rad', null, 'angle', true, false, 1],\n ['second', '?', null, 'angle', false, false, 0.00000484813681109536],\n ['second', 's', ['sec'], 'time', true, true, 1],\n ['short hundredweight', 'cwt', ['shweight'], 'mass', false, true, 45.359237],\n ['siemens', 'S', null, 'electrical_conductance', true, false, 1],\n ['sievert', 'Sv', null, 'equivalent_dose', true, false, 1],\n ['slug', 'sg', null, 'mass', false, true, 14.59390294],\n ['square ångström', 'ang2', ['ang^2'], 'area', false, true, 1e-20],\n ['square foot', 'ft2', ['ft^2'], 'area', false, true, 0.09290304],\n ['square inch', 'in2', ['in^2'], 'area', false, true, 0.00064516],\n ['square light-year', 'ly2', ['ly^2'], 'area', false, true, 8.95054210748189e31],\n ['square meter', 'm?', null, 'area', true, true, 1],\n ['square mile', 'mi2', ['mi^2'], 'area', false, true, 2589988.110336],\n ['square nautical mile', 'Nmi2', ['Nmi^2'], 'area', false, true, 3429904],\n ['square Pica', 'Pica2', ['Picapt2', 'Pica^2', 'Picapt^2'], 'area', false, true, 0.00001792111111111],\n ['square yard', 'yd2', ['yd^2'], 'area', false, true, 0.83612736],\n ['statute mile', 'mi', null, 'length', false, true, 1609.344],\n ['steradian', 'sr', null, 'solid_angle', true, false, 1],\n ['stilb', 'sb', null, 'luminance', false, false, 0.0001],\n ['stokes', 'St', null, 'kinematic_viscosity', false, false, 0.0001],\n ['stone', 'stone', null, 'mass', false, true, 6.35029318],\n ['tablespoon', 'tbs', null, 'volume', false, true, 0.0000147868],\n ['teaspoon', 'tsp', null, 'volume', false, true, 0.00000492892],\n ['tesla', 'T', null, 'magnetic_flux_density', true, true, 1],\n ['thermodynamic calorie', 'c', null, 'energy', false, true, 4.184],\n ['ton', 'ton', null, 'mass', false, true, 907.18474],\n ['tonne', 't', null, 'mass', false, false, 1000],\n ['U.K. pint', 'uk_pt', null, 'volume', false, true, 0.00056826125],\n ['U.S. bushel', 'bushel', null, 'volume', false, true, 0.03523907],\n ['U.S. oil barrel', 'barrel', null, 'volume', false, true, 0.158987295],\n ['U.S. pint', 'pt', ['us_pt'], 'volume', false, true, 0.000473176473],\n ['U.S. survey mile', 'survey_mi', null, 'length', false, true, 1609.347219],\n ['U.S. survey/statute acre', 'us_acre', null, 'area', false, true, 4046.87261],\n ['volt', 'V', null, 'voltage', true, false, 1],\n ['watt', 'W', null, 'power', true, true, 1],\n ['watt-hour', 'Wh', ['wh'], 'energy', false, true, 3600],\n ['weber', 'Wb', null, 'magnetic_flux', true, false, 1],\n ['yard', 'yd', null, 'length', false, true, 0.9144],\n ['year', 'yr', null, 'time', false, true, 31557600]\n ];\n\n // Binary prefixes\n // [Name, Prefix power of 2 value, Previx value, Abbreviation, Derived from]\n const binary_prefixes = {\n Yi: ['yobi', 80, 1208925819614629174706176, 'Yi', 'yotta'],\n Zi: ['zebi', 70, 1180591620717411303424, 'Zi', 'zetta'],\n Ei: ['exbi', 60, 1152921504606846976, 'Ei', 'exa'],\n Pi: ['pebi', 50, 1125899906842624, 'Pi', 'peta'],\n Ti: ['tebi', 40, 1099511627776, 'Ti', 'tera'],\n Gi: ['gibi', 30, 1073741824, 'Gi', 'giga'],\n Mi: ['mebi', 20, 1048576, 'Mi', 'mega'],\n ki: ['kibi', 10, 1024, 'ki', 'kilo']\n };\n\n // Unit prefixes\n // [Name, Multiplier, Abbreviation]\n const unit_prefixes = {\n Y: ['yotta', 1e24, 'Y'],\n Z: ['zetta', 1e21, 'Z'],\n E: ['exa', 1e18, 'E'],\n P: ['peta', 1e15, 'P'],\n T: ['tera', 1e12, 'T'],\n G: ['giga', 1e9, 'G'],\n M: ['mega', 1e6, 'M'],\n k: ['kilo', 1e3, 'k'],\n h: ['hecto', 1e2, 'h'],\n e: ['dekao', 1e1, 'e'],\n d: ['deci', 1e-1, 'd'],\n c: ['centi', 1e-2, 'c'],\n m: ['milli', 1e-3, 'm'],\n u: ['micro', 1e-6, 'u'],\n n: ['nano', 1e-9, 'n'],\n p: ['pico', 1e-12, 'p'],\n f: ['femto', 1e-15, 'f'],\n a: ['atto', 1e-18, 'a'],\n z: ['zepto', 1e-21, 'z'],\n y: ['yocto', 1e-24, 'y']\n };\n\n // Initialize units and multipliers\n let from = null;\n let to = null;\n let base_from_unit = from_unit;\n let base_to_unit = to_unit;\n let from_multiplier = 1;\n let to_multiplier = 1;\n let alt;\n\n // Lookup from and to units\n for (let i = 0; i < units.length; i++) {\n alt = units[i][2] === null ? [] : units[i][2];\n\n if (units[i][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {\n from = units[i];\n }\n\n if (units[i][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {\n to = units[i];\n }\n }\n\n // Lookup from prefix\n if (from === null) {\n const from_binary_prefix = binary_prefixes[from_unit.substring(0, 2)];\n let from_unit_prefix = unit_prefixes[from_unit.substring(0, 1)];\n\n // Handle dekao unit prefix (only unit prefix with two characters)\n if (from_unit.substring(0, 2) === 'da') {\n from_unit_prefix = ['dekao', 1e1, 'da'];\n }\n\n // Handle binary prefixes first (so that 'Yi' is processed before 'Y')\n if (from_binary_prefix) {\n from_multiplier = from_binary_prefix[2];\n base_from_unit = from_unit.substring(2);\n } else if (from_unit_prefix) {\n from_multiplier = from_unit_prefix[1];\n base_from_unit = from_unit.substring(from_unit_prefix[2].length);\n }\n\n // Lookup from unit\n for (let j = 0; j < units.length; j++) {\n alt = units[j][2] === null ? [] : units[j][2];\n\n if (units[j][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {\n from = units[j];\n }\n }\n }\n\n // Lookup to prefix\n if (to === null) {\n const to_binary_prefix = binary_prefixes[to_unit.substring(0, 2)];\n let to_unit_prefix = unit_prefixes[to_unit.substring(0, 1)];\n\n // Handle dekao unit prefix (only unit prefix with two characters)\n if (to_unit.substring(0, 2) === 'da') {\n to_unit_prefix = ['dekao', 1e1, 'da'];\n }\n\n // Handle binary prefixes first (so that 'Yi' is processed before 'Y')\n if (to_binary_prefix) {\n to_multiplier = to_binary_prefix[2];\n base_to_unit = to_unit.substring(2);\n } else if (to_unit_prefix) {\n to_multiplier = to_unit_prefix[1];\n base_to_unit = to_unit.substring(to_unit_prefix[2].length);\n }\n\n // Lookup to unit\n for (let k = 0; k < units.length; k++) {\n alt = units[k][2] === null ? [] : units[k][2];\n\n if (units[k][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {\n to = units[k];\n }\n }\n }\n\n // Return error if a unit does not exist\n if (from === null || to === null) {\n return na\n }\n\n // Return error if units represent different quantities\n if (from[3] !== to[3]) {\n return na\n }\n\n // Return converted number\n return (number * from[6] * from_multiplier) / (to[6] * to_multiplier)\n}\n\n/**\n * Converts a decimal number to binary.\n *\n * Category: Engineering\n *\n * @param {*} number The decimal integer you want to convert. If number is negative, valid place values are ignored and DEC2BIN returns a 10-character (10-bit) binary number in which the most significant bit is the sign bit. The remaining 9 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @param {*} [places] Optional. The number of characters to use. If places is omitted, DEC2BIN uses the minimum number of characters necessary. Places is useful for padding the return value with leading 0s (zeros).\n * @returns\n */\nfunction DEC2BIN(number, places) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n // Return error if number is not decimal, is lower than -512, or is greater than 511\n if (!/^-?[0-9]{1,3}$/.test(number) || number < -512 || number > 511) {\n return num\n }\n\n // Ignore places and return a 10-character binary number if number is negative\n if (number < 0) {\n return '1' + REPT('0', 9 - (512 + number).toString(2).length) + (512 + number).toString(2)\n }\n\n // Convert decimal number to binary\n const result = parseInt(number, 10).toString(2);\n\n // Return binary number using the minimum number of characters necessary if places is undefined\n if (typeof places === 'undefined') {\n return result\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return value\n }\n\n // Return error if places is negative\n if (places < 0) {\n return num\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return places >= result.length ? REPT('0', places - result.length) + result : num\n }\n}\n\n/**\n * Converts a decimal number to hexadecimal.\n *\n * Category: Engineering\n *\n * @param {*} number The decimal integer you want to convert. If number is negative, places is ignored and DEC2HEX returns a 10-character (40-bit) hexadecimal number in which the most significant bit is the sign bit. The remaining 39 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @param {*} [places] Optional. The number of characters to use. If places is omitted, DEC2HEX uses the minimum number of characters necessary. Places is useful for padding the return value with leading 0s (zeros).\n * @returns\n */\nfunction DEC2HEX(number, places) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n // Return error if number is not decimal, is lower than -549755813888, or is greater than 549755813887\n if (!/^-?[0-9]{1,12}$/.test(number) || number < -549755813888 || number > 549755813887) {\n return num\n }\n\n // Ignore places and return a 10-character hexadecimal number if number is negative\n if (number < 0) {\n return (1099511627776 + number).toString(16)\n }\n\n // Convert decimal number to hexadecimal\n const result = parseInt(number, 10).toString(16);\n\n // Return hexadecimal number using the minimum number of characters necessary if places is undefined\n if (typeof places === 'undefined') {\n return result\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return value\n }\n\n // Return error if places is negative\n if (places < 0) {\n return num\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return places >= result.length ? REPT('0', places - result.length) + result : num\n }\n}\n\n/**\n * Converts a decimal number to octal.\n *\n * Category: Engineering\n *\n * @param {*} number The decimal integer you want to convert. If number is negative, places is ignored and DEC2OCT returns a 10-character (30-bit) octal number in which the most significant bit is the sign bit. The remaining 29 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @param {*} [places] Optional. The number of characters to use. If places is omitted, DEC2OCT uses the minimum number of characters necessary. Places is useful for padding the return value with leading 0s (zeros).\n * @returns\n */\nfunction DEC2OCT(number, places) {\n number = parseNumber(number);\n\n if (number instanceof Error) {\n return number\n }\n\n // Return error if number is not decimal, is lower than -549755813888, or is greater than 549755813887\n if (!/^-?[0-9]{1,9}$/.test(number) || number < -536870912 || number > 536870911) {\n return num\n }\n\n // Ignore places and return a 10-character octal number if number is negative\n if (number < 0) {\n return (1073741824 + number).toString(8)\n }\n\n // Convert decimal number to octal\n const result = parseInt(number, 10).toString(8);\n\n // Return octal number using the minimum number of characters necessary if places is undefined\n if (typeof places === 'undefined') {\n return result\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return value\n }\n\n // Return error if places is negative\n if (places < 0) {\n return num\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return places >= result.length ? REPT('0', places - result.length) + result : num\n }\n}\n\n/**\n * Tests whether two values are equal.\n *\n * Category: Engineering\n *\n * @param {*} number1 The first number.\n * @param {*} [number2] Optional. The second number. If omitted, number2 is assumed to be zero.\n * @returns\n */\nfunction DELTA(number1, number2) {\n // Set number2 to zero if undefined\n number2 = number2 === undefined ? 0 : number2;\n number1 = parseNumber(number1);\n number2 = parseNumber(number2);\n\n if (anyIsError(number1, number2)) {\n return value\n }\n\n // Return delta\n return number1 === number2 ? 1 : 0\n}\n\n// TODO: why is upper_bound not used ? The excel documentation has no examples with upper_bound\n/**\n * Returns the error function.\n *\n * Category: Engineering\n *\n * @param {*} lower_limit The lower bound for integrating ERF.\n * @param {*} [upper_limit] Optional. The upper bound for integrating ERF. If omitted, ERF integrates between zero and lower_limit.\n * @returns\n */\nfunction ERF(lower_limit, upper_limit) {\n // Set number2 to zero if undefined\n upper_limit = upper_limit === undefined ? 0 : upper_limit;\n\n lower_limit = parseNumber(lower_limit);\n upper_limit = parseNumber(upper_limit);\n\n if (anyIsError(lower_limit, upper_limit)) {\n return value\n }\n\n return jStat.erf(lower_limit)\n}\n\n/**\n * Returns the complementary error function.\n *\n * Category: Engineering\n *\n * @param {*} x The lower bound for integrating ERFC.\n * @returns\n */\nfunction ERFC(x) {\n // Return error if x is not a number\n if (isNaN(x)) {\n return value\n }\n\n return jStat.erfc(x)\n}\n\n/**\n * Tests whether a number is greater than a threshold value.\n *\n * Category: Engineering\n *\n * @param {*} number The value to test against step.\n * @param {*} [step] Optional. The threshold value. If you omit a value for step, GESTEP uses zero.\n * @returns\n */\nfunction GESTEP(number, step) {\n step = step || 0;\n number = parseNumber(number);\n\n if (anyIsError(step, number)) {\n return number\n }\n\n // Return delta\n return number >= step ? 1 : 0\n}\n\n/**\n * Converts a hexadecimal number to binary.\n *\n * Category: Engineering\n *\n * @param {*} number The hexadecimal number you want to convert. Number cannot contain more than 10 characters. The most significant bit of number is the sign bit (40th bit from the right). The remaining 9 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @param {*} [places] Optional. The number of characters to use. If places is omitted, HEX2BIN uses the minimum number of characters necessary. Places is useful for padding the return value with leading 0s (zeros).\n * @returns\n */\nfunction HEX2BIN(number, places) {\n // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\n return num\n }\n\n // Check if number is negative\n const negative = !!(number.length === 10 && number.substring(0, 1).toLowerCase() === 'f');\n\n // Convert hexadecimal number to decimal\n const decimal = negative ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16);\n\n // Return error if number is lower than -512 or greater than 511\n if (decimal < -512 || decimal > 511) {\n return num\n }\n\n // Ignore places and return a 10-character binary number if number is negative\n if (negative) {\n return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2)\n }\n\n // Convert decimal number to binary\n const result = decimal.toString(2);\n\n // Return binary number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return value\n }\n\n // Return error if places is negative\n if (places < 0) {\n return num\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return places >= result.length ? REPT('0', places - result.length) + result : num\n }\n}\n\n/**\n * Converts a hexadecimal number to decimal.\n *\n * Category: Engineering\n *\n * @param {*} number The hexadecimal number you want to convert. Number cannot contain more than 10 characters (40 bits). The most significant bit of number is the sign bit. The remaining 39 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @returns\n */\nfunction HEX2DEC(number) {\n // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\n return num\n }\n\n // Convert hexadecimal number to decimal\n const decimal = parseInt(number, 16);\n\n // Return decimal number\n return decimal >= 549755813888 ? decimal - 1099511627776 : decimal\n}\n\n/**\n * Converts a hexadecimal number to octal.\n *\n * Category: Engineering\n *\n * @param {*} number The hexadecimal number you want to convert. Number cannot contain more than 10 characters. The most significant bit of number is the sign bit. The remaining 39 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @param {*} [places] Optional. The number of characters to use. If places is omitted, HEX2OCT uses the minimum number of characters necessary. Places is useful for padding the return value with leading 0s (zeros).\n * @returns\n */\nfunction HEX2OCT(number, places) {\n // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\n return num\n }\n\n // Convert hexadecimal number to decimal\n const decimal = parseInt(number, 16);\n\n // Return error if number is positive and greater than 0x1fffffff (536870911)\n if (decimal > 536870911 && decimal < 1098974756864) {\n return num\n }\n\n // Ignore places and return a 10-character octal number if number is negative\n if (decimal >= 1098974756864) {\n return (decimal - 1098437885952).toString(8)\n }\n\n // Convert decimal number to octal\n const result = decimal.toString(8);\n\n // Return octal number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return value\n }\n\n // Return error if places is negative\n if (places < 0) {\n return num\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return places >= result.length ? REPT('0', places - result.length) + result : num\n }\n}\n\n/**\n * Returns the absolute value (modulus) of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the absolute value.\n * @returns\n */\nfunction IMABS(inumber) {\n // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n // Return error if either coefficient is not a number\n if (anyIsError(x, y)) {\n return value\n }\n\n // Return absolute value of complex number\n return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2))\n}\n\n/**\n * Returns the imaginary coefficient of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the imaginary coefficient.\n * @returns\n */\nfunction IMAGINARY(inumber) {\n if (inumber === undefined || inumber === true || inumber === false) {\n return value\n }\n\n // Return 0 if inumber is equal to 0\n if (inumber === 0 || inumber === '0') {\n return 0\n }\n\n // Handle special cases\n if (['i', 'j'].indexOf(inumber) >= 0) {\n return 1\n }\n\n // Force string type\n inumber = inumber + '';\n\n // Normalize imaginary coefficient\n inumber = inumber.replace('+i', '+1i').replace('-i', '-1i').replace('+j', '+1j').replace('-j', '-1j');\n\n // Lookup sign\n let plus = inumber.indexOf('+');\n let minus = inumber.indexOf('-');\n\n if (plus === 0) {\n plus = inumber.indexOf('+', 1);\n }\n\n if (minus === 0) {\n minus = inumber.indexOf('-', 1);\n }\n\n // Lookup imaginary unit\n const last = inumber.substring(inumber.length - 1, inumber.length);\n const unit = last === 'i' || last === 'j';\n\n if (plus >= 0 || minus >= 0) {\n // Return error if imaginary unit is neither i nor j\n if (!unit) {\n return num\n }\n\n // Return imaginary coefficient of complex number\n if (plus >= 0) {\n return isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))\n ? num\n : Number(inumber.substring(plus + 1, inumber.length - 1))\n } else {\n return isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))\n ? num\n : -Number(inumber.substring(minus + 1, inumber.length - 1))\n }\n } else {\n if (unit) {\n return isNaN(inumber.substring(0, inumber.length - 1)) ? num : inumber.substring(0, inumber.length - 1)\n } else {\n return isNaN(inumber) ? num : 0\n }\n }\n}\n\n/**\n * Returns the argument theta, an angle expressed in radians.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the argument .\n * @returns\n */\nfunction IMARGUMENT(inumber) {\n // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n // Return error if either coefficient is not a number\n if (anyIsError(x, y)) {\n return value\n }\n\n // Return error if inumber is equal to zero\n if (x === 0 && y === 0) {\n return div0\n }\n\n // Return PI/2 if x is equal to zero and y is positive\n if (x === 0 && y > 0) {\n return Math.PI / 2\n }\n\n // Return -PI/2 if x is equal to zero and y is negative\n if (x === 0 && y < 0) {\n return -Math.PI / 2\n }\n\n // Return zero if x is negative and y is equal to zero\n if (y === 0 && x > 0) {\n return 0\n }\n\n // Return zero if x is negative and y is equal to zero\n if (y === 0 && x < 0) {\n return -Math.PI\n }\n\n // Return argument of complex number\n if (x > 0) {\n return Math.atan(y / x)\n } else if (x < 0 && y >= 0) {\n return Math.atan(y / x) + Math.PI\n } else {\n return Math.atan(y / x) - Math.PI\n }\n}\n\n/**\n * Returns the complex conjugate of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the conjugate.\n * @returns\n */\nfunction IMCONJUGATE(inumber) {\n // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Return conjugate of complex number\n return y !== 0 ? COMPLEX(x, -y, unit) : inumber\n}\n\n/**\n * Returns the cosine of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the cosine.\n * @returns\n */\nfunction IMCOS(inumber) {\n // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Return cosine of complex number\n return COMPLEX(\n (Math.cos(x) * (Math.exp(y) + Math.exp(-y))) / 2,\n (-Math.sin(x) * (Math.exp(y) - Math.exp(-y))) / 2,\n unit\n )\n}\n\n/**\n * Returns the hyperbolic cosine of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the hyperbolic cosine.\n * @returns\n */\nfunction IMCOSH(inumber) {\n // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Return hyperbolic cosine of complex number\n return COMPLEX(\n (Math.cos(y) * (Math.exp(x) + Math.exp(-x))) / 2,\n (Math.sin(y) * (Math.exp(x) - Math.exp(-x))) / 2,\n unit\n )\n}\n\n/**\n * Returns the cotangent of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the cotangent.\n * @returns\n */\nfunction IMCOT(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Return cotangent of complex number\n return IMDIV(IMCOS(inumber), IMSIN(inumber))\n}\n\n/**\n * Returns the quotient of two complex numbers.\n *\n * Category: Engineering\n *\n * @param {*} inumber1 The complex numerator or dividend.\n * @param {*} inumber2 The complex denominator or divisor.\n * @returns\n */\nfunction IMDIV(inumber1, inumber2) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const a = IMREAL(inumber1);\n const b = IMAGINARY(inumber1);\n const c = IMREAL(inumber2);\n const d = IMAGINARY(inumber2);\n\n if (anyIsError(a, b, c, d)) {\n return value\n }\n\n // Lookup imaginary unit\n const unit1 = inumber1.substring(inumber1.length - 1);\n const unit2 = inumber2.substring(inumber2.length - 1);\n let unit = 'i';\n\n if (unit1 === 'j') {\n unit = 'j';\n } else if (unit2 === 'j') {\n unit = 'j';\n }\n\n // Return error if inumber2 is null\n if (c === 0 && d === 0) {\n return num\n }\n\n // Return exponential of complex number\n const den = c * c + d * d;\n return COMPLEX((a * c + b * d) / den, (b * c - a * d) / den, unit)\n}\n\n/**\n * Returns the exponential of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the exponential.\n * @returns\n */\nfunction IMEXP(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Return exponential of complex number\n const e = Math.exp(x);\n return COMPLEX(e * Math.cos(y), e * Math.sin(y), unit)\n}\n\n/**\n * Returns the natural logarithm of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the natural logarithm.\n * @returns\n */\nfunction IMLN(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Return exponential of complex number\n return COMPLEX(Math.log(Math.sqrt(x * x + y * y)), Math.atan(y / x), unit)\n}\n\n/**\n * Returns the base-10 logarithm of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the common logarithm.\n * @returns\n */\nfunction IMLOG10(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Return exponential of complex number\n return COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(10), Math.atan(y / x) / Math.log(10), unit)\n}\n\n/**\n * Returns the base-2 logarithm of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the base-2 logarithm.\n * @returns\n */\nfunction IMLOG2(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Return exponential of complex number\n return COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(2), Math.atan(y / x) / Math.log(2), unit)\n}\n\n/**\n * Returns a complex number raised to an integer power.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number you want to raise to a power.\n * @param {*} number The power to which you want to raise the complex number.\n * @returns\n */\nfunction IMPOWER(inumber, number) {\n number = parseNumber(number);\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(number, x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Calculate power of modulus\n const p = Math.pow(IMABS(inumber), number);\n\n // Calculate argument\n const t = IMARGUMENT(inumber);\n\n // Return exponential of complex number\n return COMPLEX(p * Math.cos(number * t), p * Math.sin(number * t), unit)\n}\n\n/**\n * Returns the product of complex numbers.\n *\n * Category: Engineering\n *\n * @param {*} args inumber1, [inumber2], … Inumber1 is required, subsequent inumbers are not. 1 to 255 complex numbers to multiply.\n * @returns\n */\nfunction IMPRODUCT() {\n // Initialize result\n let result = arguments[0];\n\n if (!arguments.length) {\n return value\n }\n\n // Loop on all numbers\n for (let i = 1; i < arguments.length; i++) {\n // Lookup coefficients of two complex numbers\n const a = IMREAL(result);\n const b = IMAGINARY(result);\n const c = IMREAL(arguments[i]);\n const d = IMAGINARY(arguments[i]);\n\n if (anyIsError(a, b, c, d)) {\n return value\n }\n\n // Complute product of two complex numbers\n result = COMPLEX(a * c - b * d, a * d + b * c);\n }\n\n // Return product of complex numbers\n return result\n}\n\n/**\n * Returns the real coefficient of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the real coefficient.\n * @returns\n */\nfunction IMREAL(inumber) {\n if (inumber === undefined || inumber === true || inumber === false) {\n return value\n }\n\n // Return 0 if inumber is equal to 0\n if (inumber === 0 || inumber === '0') {\n return 0\n }\n\n // Handle special cases\n if (['i', '+i', '1i', '+1i', '-i', '-1i', 'j', '+j', '1j', '+1j', '-j', '-1j'].indexOf(inumber) >= 0) {\n return 0\n }\n\n // Force String type\n inumber = inumber + '';\n\n // Lookup sign\n let plus = inumber.indexOf('+');\n let minus = inumber.indexOf('-');\n\n if (plus === 0) {\n plus = inumber.indexOf('+', 1);\n }\n\n if (minus === 0) {\n minus = inumber.indexOf('-', 1);\n }\n\n // Lookup imaginary unit\n const last = inumber.substring(inumber.length - 1, inumber.length);\n const unit = last === 'i' || last === 'j';\n\n if (plus >= 0 || minus >= 0) {\n // Return error if imaginary unit is neither i nor j\n if (!unit) {\n return num\n }\n\n // Return real coefficient of complex number\n if (plus >= 0) {\n return isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))\n ? num\n : Number(inumber.substring(0, plus))\n } else {\n return isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))\n ? num\n : Number(inumber.substring(0, minus))\n }\n } else {\n if (unit) {\n return isNaN(inumber.substring(0, inumber.length - 1)) ? num : 0\n } else {\n return isNaN(inumber) ? num : inumber\n }\n }\n}\n\n/**\n * Returns the secant of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the secant.\n * @returns\n */\nfunction IMSEC(inumber) {\n // Return error if inumber is a logical value\n if (inumber === true || inumber === false) {\n return value\n }\n\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Return secant of complex number\n return IMDIV('1', IMCOS(inumber))\n}\n\n/**\n * Returns the hyperbolic secant of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the hyperbolic secant.\n * @returns\n */\nfunction IMSECH(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Return hyperbolic secant of complex number\n return IMDIV('1', IMCOSH(inumber))\n}\n\n/**\n * Returns the sine of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the sine.\n * @returns\n */\nfunction IMSIN(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Return sine of complex number\n return COMPLEX(\n (Math.sin(x) * (Math.exp(y) + Math.exp(-y))) / 2,\n (Math.cos(x) * (Math.exp(y) - Math.exp(-y))) / 2,\n unit\n )\n}\n\n/**\n * Returns the hyperbolic sine of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the hyperbolic sine.\n * @returns\n */\nfunction IMSINH(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Return hyperbolic sine of complex number\n return COMPLEX(\n (Math.cos(y) * (Math.exp(x) - Math.exp(-x))) / 2,\n (Math.sin(y) * (Math.exp(x) + Math.exp(-x))) / 2,\n unit\n )\n}\n\n/**\n * Returns the square root of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the square root.\n * @returns\n */\nfunction IMSQRT(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Lookup imaginary unit\n let unit = inumber.substring(inumber.length - 1);\n unit = unit === 'i' || unit === 'j' ? unit : 'i';\n\n // Calculate power of modulus\n const s = Math.sqrt(IMABS(inumber));\n\n // Calculate argument\n const t = IMARGUMENT(inumber);\n\n // Return exponential of complex number\n return COMPLEX(s * Math.cos(t / 2), s * Math.sin(t / 2), unit)\n}\n\n/**\n * Returns the cosecant of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the cosecant.\n * @returns\n */\nfunction IMCSC(inumber) {\n // Return error if inumber is a logical value\n if (inumber === true || inumber === false) {\n return value\n }\n\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n // Return error if either coefficient is not a number\n if (anyIsError(x, y)) {\n return num\n }\n\n // Return cosecant of complex number\n return IMDIV('1', IMSIN(inumber))\n}\n\n/**\n * Returns the hyperbolic cosecant of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the hyperbolic cosecant.\n * @returns\n */\nfunction IMCSCH(inumber) {\n // Return error if inumber is a logical value\n if (inumber === true || inumber === false) {\n return value\n }\n\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n // Return error if either coefficient is not a number\n if (anyIsError(x, y)) {\n return num\n }\n\n // Return hyperbolic cosecant of complex number\n return IMDIV('1', IMSINH(inumber))\n}\n\n/**\n * Returns the difference between two complex numbers.\n *\n * Category: Engineering\n *\n * @param {*} inumber1 The complex number from which to subtract inumber2.\n * @param {*} inumber2 The complex number to subtract from inumber1.\n * @returns\n */\nfunction IMSUB(inumber1, inumber2) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const a = IMREAL(inumber1);\n const b = IMAGINARY(inumber1);\n const c = IMREAL(inumber2);\n const d = IMAGINARY(inumber2);\n\n if (anyIsError(a, b, c, d)) {\n return value\n }\n\n // Lookup imaginary unit\n const unit1 = inumber1.substring(inumber1.length - 1);\n const unit2 = inumber2.substring(inumber2.length - 1);\n let unit = 'i';\n\n if (unit1 === 'j') {\n unit = 'j';\n } else if (unit2 === 'j') {\n unit = 'j';\n }\n\n // Return _ of two complex numbers\n return COMPLEX(a - c, b - d, unit)\n}\n\n/**\n * Returns the sum of complex numbers.\n *\n * Category: Engineering\n *\n * @param {*} args inumber1, [inumber2], ... Inumber1 is required, subsequent numbers are not. 1 to 255 complex numbers to add.\n * @returns\n */\nfunction IMSUM() {\n if (!arguments.length) {\n return value\n }\n\n const args = flatten(arguments);\n\n let numberSum = 0;\n let imaginarySum = 0;\n for (const arg of args) {\n const realPart = +IMREAL(arg);\n const imaginaryPart = +IMAGINARY(arg);\n if (anyIsError(realPart, imaginaryPart)) {\n return value\n }\n numberSum += realPart;\n imaginarySum += imaginaryPart;\n }\n\n return COMPLEX(numberSum, imaginarySum, 'i')\n}\n\n/**\n * Returns the tangent of a complex number.\n *\n * Category: Engineering\n *\n * @param {*} inumber A complex number for which you want the tangent.\n * @returns\n */\nfunction IMTAN(inumber) {\n // Return error if inumber is a logical value\n if (inumber === true || inumber === false) {\n return value\n }\n\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n const x = IMREAL(inumber);\n const y = IMAGINARY(inumber);\n\n if (anyIsError(x, y)) {\n return value\n }\n\n // Return tangent of complex number\n return IMDIV(IMSIN(inumber), IMCOS(inumber))\n}\n\n/**\n * Converts an octal number to binary.\n *\n * Category: Engineering\n *\n * @param {*} number The octal number you want to convert. Number may not contain more than 10 characters. The most significant bit of number is the sign bit. The remaining 29 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @param {*} [places] Optional. The number of characters to use. If places is omitted, OCT2BIN uses the minimum number of characters necessary. Places is useful for padding the return value with leading 0s (zeros).\n * @returns\n */\nfunction OCT2BIN(number, places) {\n // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n if (!/^[0-7]{1,10}$/.test(number)) {\n return num\n }\n\n // Check if number is negative\n const negative = !!(number.length === 10 && number.substring(0, 1) === '7');\n\n // Convert octal number to decimal\n const decimal = negative ? parseInt(number, 8) - 1073741824 : parseInt(number, 8);\n\n // Return error if number is lower than -512 or greater than 511\n if (decimal < -512 || decimal > 511) {\n return num\n }\n\n // Ignore places and return a 10-character binary number if number is negative\n if (negative) {\n return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2)\n }\n\n // Convert decimal number to binary\n const result = decimal.toString(2);\n\n // Return binary number using the minimum number of characters necessary if places is undefined\n if (typeof places === 'undefined') {\n return result\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return value\n }\n\n // Return error if places is negative\n if (places < 0) {\n return num\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return places >= result.length ? REPT('0', places - result.length) + result : num\n }\n}\n\n/**\n * Converts an octal number to decimal.\n *\n * Category: Engineering\n *\n * @param {*} number The octal number you want to convert. Number may not contain more than 10 octal characters (30 bits). The most significant bit of number is the sign bit. The remaining 29 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @returns\n */\nfunction OCT2DEC(number) {\n // Return error if number is not octal or contains more than ten characters (10 digits)\n if (!/^[0-7]{1,10}$/.test(number)) {\n return num\n }\n\n // Convert octal number to decimal\n const decimal = parseInt(number, 8);\n\n // Return decimal number\n return decimal >= 536870912 ? decimal - 1073741824 : decimal\n}\n\n/**\n * Converts an octal number to hexadecimal.\n *\n * Category: Engineering\n *\n * @param {*} number The octal number you want to convert. Number may not contain more than 10 octal characters (30 bits). The most significant bit of number is the sign bit. The remaining 29 bits are magnitude bits. Negative numbers are represented using two's-complement notation.\n * @param {*} [places] Optional. The number of characters to use. If places is omitted, OCT2HEX uses the minimum number of characters necessary. Places is useful for padding the return value with leading 0s (zeros).\n * @returns\n */\nfunction OCT2HEX(number, places) {\n // Return error if number is not octal or contains more than ten characters (10 digits)\n if (!/^[0-7]{1,10}$/.test(number)) {\n return num\n }\n\n // Convert octal number to decimal\n const decimal = parseInt(number, 8);\n\n // Ignore places and return a 10-character octal number if number is negative\n if (decimal >= 536870912) {\n return 'ff' + (decimal + 3221225472).toString(16)\n }\n\n // Convert decimal number to hexadecimal\n const result = decimal.toString(16);\n\n // Return hexadecimal number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return value\n }\n\n // Return error if places is negative\n if (places < 0) {\n return num\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return places >= result.length ? REPT('0', places - result.length) + result : num\n }\n}\n\nconst BETADIST = BETA.DIST;\nconst BETAINV = BETA.INV;\nconst BINOMDIST = BINOM.DIST;\nconst CEILINGMATH = CEILING.MATH;\nconst CEILINGPRECISE = CEILING.PRECISE;\nconst CHIDIST = CHISQ.DIST;\nconst CHIDISTRT = CHISQ.DIST.RT;\nconst CHIINV = CHISQ.INV;\nconst CHIINVRT = CHISQ.INV.RT;\nconst CHITEST = CHISQ.TEST;\nconst COVAR = COVARIANCE.P;\nconst COVARIANCEP = COVARIANCE.P;\nconst COVARIANCES = COVARIANCE.S;\nconst CRITBINOM = BINOM.INV;\nconst ERFCPRECISE = ERFC.PRECISE;\nconst ERFPRECISE = ERF.PRECISE;\nconst EXPONDIST = EXPON.DIST;\nconst FDIST = F.DIST;\nconst FDISTRT = F.DIST.RT;\nconst FINV = F.INV;\nconst FINVRT = F.INV.RT;\nconst FLOORMATH = FLOOR.MATH;\nconst FLOORPRECISE = FLOOR.PRECISE;\nconst FTEST = F.TEST;\nconst GAMMADIST = GAMMA.DIST;\nconst GAMMAINV = GAMMA.INV;\nconst GAMMALNPRECISE = GAMMALN.PRECISE;\nconst HYPGEOMDIST = HYPGEOM.DIST;\nconst LOGINV = LOGNORM.INV;\nconst LOGNORMDIST = LOGNORM.DIST;\nconst LOGNORMINV = LOGNORM.INV;\nconst MODEMULT = MODE.MULT;\nconst MODESNGL = MODE.SNGL;\nconst NEGBINOMDIST = NEGBINOM.DIST;\nconst NETWORKDAYSINTL = NETWORKDAYS.INTL;\nconst NORMDIST = NORM.DIST;\nconst NORMINV = NORM.INV;\nconst NORMSDIST = NORM.S.DIST;\nconst NORMSINV = NORM.S.INV;\nconst PERCENTILEEXC = PERCENTILE.EXC;\nconst PERCENTILEINC = PERCENTILE.INC;\nconst PERCENTRANKEXC = PERCENTRANK.EXC;\nconst PERCENTRANKINC = PERCENTRANK.INC;\nconst POISSONDIST = POISSON.DIST;\nconst QUARTILEEXC = QUARTILE.EXC;\nconst QUARTILEINC = QUARTILE.INC;\nconst RANKAVG = RANK.AVG;\nconst RANKEQ = RANK.EQ;\nconst SKEWP = SKEW.P;\nconst STDEVP = STDEV.P;\nconst STDEVS = STDEV.S;\nconst TDIST = T.DIST;\nconst TDISTRT = T.DIST.RT;\nconst TINV = T.INV;\nconst TTEST = T.TEST;\nconst VARP = VAR.P;\nconst VARS = VAR.S;\nconst WEIBULLDIST = WEIBULL.DIST;\nconst WORKDAYINTL = WORKDAY.INTL;\nconst ZTEST = Z.TEST;\n\nfunction compact(array) {\n const result = [];\n\n arrayEach(array, (value) => {\n if (value) {\n result.push(value);\n }\n });\n\n return result\n}\n\nfunction findResultIndex(database, criterias) {\n const matches = {};\n\n for (let i = 1; i < database[0].length; ++i) {\n matches[i] = true;\n }\n\n let maxCriteriaLength = criterias[0].length;\n\n for (let i = 1; i < criterias.length; ++i) {\n if (criterias[i].length > maxCriteriaLength) {\n maxCriteriaLength = criterias[i].length;\n }\n }\n\n for (let k = 1; k < database.length; ++k) {\n for (let l = 1; l < database[k].length; ++l) {\n let currentCriteriaResult = false;\n let hasMatchingCriteria = false;\n\n for (let j = 0; j < criterias.length; ++j) {\n const criteria = criterias[j];\n\n if (criteria.length < maxCriteriaLength) {\n continue\n }\n\n const criteriaField = criteria[0];\n\n if (database[k][0] !== criteriaField) {\n continue\n }\n\n hasMatchingCriteria = true;\n\n for (let p = 1; p < criteria.length; ++p) {\n if (!currentCriteriaResult) {\n const isWildcard = criteria[p] === void 0 || criteria[p] === '*';\n\n if (isWildcard) {\n currentCriteriaResult = true;\n } else {\n const tokenizedCriteria = parse(criteria[p] + '');\n const tokens = [createToken(database[k][l], TOKEN_TYPE_LITERAL)].concat(\n tokenizedCriteria\n );\n\n currentCriteriaResult = compute(tokens);\n }\n }\n }\n }\n\n if (hasMatchingCriteria) {\n matches[l] = matches[l] && currentCriteriaResult;\n }\n }\n }\n\n const result = [];\n\n for (let n = 0; n < database[0].length; ++n) {\n if (matches[n]) {\n result.push(n - 1);\n }\n }\n\n return result\n}\n\n// Database functions\n/**\n * Returns the average of selected database entries.\n *\n * Category: Database\n *\n * @param {*} database Range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria Range of values that contains the conditions you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DAVERAGE(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n let sum = 0;\n\n arrayEach(resultIndexes, (value) => {\n sum += targetFields[value];\n });\n\n return resultIndexes.length === 0 ? div0 : sum / resultIndexes.length\n}\n\n/**\n * Counts the values that contain numbers in a database.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria The range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as the argument includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DCOUNT(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n const targetValues = [];\n\n arrayEach(resultIndexes, (value) => {\n targetValues.push(targetFields[value]);\n });\n\n return COUNT(targetValues)\n}\n\n/**\n * Counts nonblank values in a database.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Optional. Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria The range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DCOUNTA(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n const targetValues = [];\n\n arrayEach(resultIndexes, (value) => {\n targetValues.push(targetFields[value]);\n });\n\n return COUNTA(targetValues)\n}\n\n/**\n * Extracts from a database a single record that matches the specified criteria.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria The range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DGET(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n // Return error if no record meets the criteria\n if (resultIndexes.length === 0) {\n return value\n }\n // Returns the #NUM! error value because more than one record meets the\n // criteria\n if (resultIndexes.length > 1) {\n return num\n }\n\n return targetFields[resultIndexes[0]]\n}\n\n/**\n * Returns the maximum value from selected database entries.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria The range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DMAX(database, field, criteria) {\n // Return error if field is not a number and not a string\n\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n let maxValue = targetFields[resultIndexes[0]];\n\n arrayEach(resultIndexes, (value) => {\n if (maxValue < targetFields[value]) {\n maxValue = targetFields[value];\n }\n });\n\n return maxValue\n}\n\n/**\n * Returns the minimum value from selected database entries.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria The range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DMIN(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n let minValue = targetFields[resultIndexes[0]];\n\n arrayEach(resultIndexes, (value) => {\n if (minValue > targetFields[value]) {\n minValue = targetFields[value];\n }\n });\n\n return minValue\n}\n\n/**\n * Multiplies the values in a particular field of records that match the criteria in a database.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria The range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DPRODUCT(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n let targetValues = [];\n\n arrayEach(resultIndexes, (value) => {\n targetValues.push(targetFields[value]);\n });\n targetValues = compact(targetValues);\n\n let result = 1;\n\n arrayEach(targetValues, (value) => {\n result *= value;\n });\n\n return result\n}\n\n/**\n * Estimates the standard deviation based on a sample of selected database entries.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria The range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DSTDEV(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n let targetValues = [];\n\n arrayEach(resultIndexes, (value) => {\n targetValues.push(targetFields[value]);\n });\n\n targetValues = compact(targetValues);\n\n return STDEV.S(targetValues)\n}\n\n/**\n * Calculates the standard deviation based on the entire population of selected database entries.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria The range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DSTDEVP(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n let targetValues = [];\n\n arrayEach(resultIndexes, (value) => {\n targetValues.push(targetFields[value]);\n });\n\n targetValues = compact(targetValues);\n\n return STDEV.P(targetValues)\n}\n\n/**\n * Adds the numbers in the field column of records in the database that match the criteria.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria Is the range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DSUM(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n const targetValues = [];\n\n arrayEach(resultIndexes, (value) => {\n targetValues.push(targetFields[value]);\n });\n\n return SUM(targetValues)\n}\n\n/**\n * Estimates variance based on a sample from selected database entries.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria The range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DVAR(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n const targetValues = [];\n\n arrayEach(resultIndexes, (value) => {\n targetValues.push(targetFields[value]);\n });\n\n return VAR.S(targetValues)\n}\n\n/**\n * Calculates variance based on the entire population of selected database entries.\n *\n * Category: Database\n *\n * @param {*} database The range of values that makes up the list or database. A database is a list of related data in which rows of related information are records, and columns of data are fields. The first row of the list contains labels for each column.\n * @param {*} field Indicates which column is used in the function. Enter the column label enclosed between double quotation marks, such as \"Age\" or \"Yield,\" or a number (without quotation marks) that represents the position of the column within the list: 1 for the first column, 2 for the second column, and so on.\n * @param {*} criteria The range of values that contains the conditions that you specify. You can use any range for the criteria argument, as long as it includes at least one column label and at least one value below the column label in which you specify a condition for the column.\n * @returns\n */\nfunction DVARP(database, field, criteria) {\n // Return error if field is not a number and not a string\n\n if (isNaN(field) && typeof field !== 'string') {\n return value\n }\n\n const resultIndexes = findResultIndex(database, criteria);\n let targetFields = [];\n\n if (typeof field === 'string') {\n const index = findField(database, field);\n targetFields = rest(database[index]);\n } else {\n targetFields = rest(database[field]);\n }\n\n const targetValues = [];\n\n arrayEach(resultIndexes, (value) => {\n targetValues.push(targetFields[value]);\n });\n\n return VAR.P(targetValues)\n}\n\nfunction validDate(d) {\n return d && d.getTime && !isNaN(d.getTime())\n}\n\nfunction ensureDate(d) {\n return d instanceof Date ? d : new Date(d)\n}\n\n// Calculate last coupon date before settlement\nfunction lastCoupDateBeforeSettlement(settlement, maturity, frequency) {\n let date = parseDate(maturity);\n date.setFullYear(settlement.getFullYear());\n\n if (date < settlement) {\n date.setFullYear(date.getFullYear() + 1);\n }\n\n // Adjust the date based on the coupon frequency until date is later than settlement\n while (date > settlement) {\n date.setMonth(date.getMonth() + -12 / frequency);\n }\n\n return date\n}\n\nfunction validateFrequency(frequency) {\n frequency = parseNumber(frequency);\n\n // Return error if frequency is neither 1, 2, or 4\n if ([1, 2, 4].indexOf(frequency) === -1) {\n return num\n }\n\n return frequency\n}\n\nfunction validateBasis(basis) {\n basis = parseNumber(basis);\n\n // Return error if basis is neither 0, 1, 2, 3, or 4\n if ([0, 1, 2, 3, 4].indexOf(basis) === -1) {\n return num\n }\n\n return basis\n}\n\n/**\n * Returns the accrued interest for a security that pays periodic interest.\n *\n * Category: Financial\n *\n * @param {*} issue The security's issue date.\n * @param {*} first_interest The security's first interest date.\n * @param {*} settlement The security's settlement date. The security settlement date is the date after the issue date when the security is traded to the buyer.\n * @param {*} rate The security's annual coupon rate.\n * @param {*} par The security's par value. If you omit par, ACCRINT uses $1,000.\n * @param {*} frequency The number of coupon payments per year. For annual payments, frequency = 1; for semiannual, frequency = 2; for quarterly, frequency = 4.\n * @param {*} [basis] Optional. The type of day count basis to use.\n * @param {*} [calc_method] Optional. Not implemented in formulajs. A logical value that specifies the way to calculate the total accrued interest when the date of settlement is later than the date of first_interest. A value of TRUE (1) returns the total accrued interest from issue to settlement. A value of FALSE (0) returns the accrued interest from first_interest to settlement. If you do not enter the argument, it defaults to TRUE.\n * @returns\n */\nfunction ACCRINT(issue, first_interest, settlement, rate, par, frequency, basis) {\n // Return error if either date is invalid\n issue = ensureDate(issue);\n first_interest = ensureDate(first_interest);\n settlement = ensureDate(settlement);\n frequency = validateFrequency(frequency);\n basis = validateBasis(basis);\n\n if (anyError(frequency, basis)) {\n return num\n }\n\n if (!validDate(issue) || !validDate(first_interest) || !validDate(settlement)) {\n return value\n }\n\n // Return error if either rate or par are lower than or equal to zero\n if (rate <= 0 || par <= 0) {\n return num\n }\n\n // Return error if settlement is before or equal to issue\n if (settlement <= issue) {\n return num\n }\n\n // Set default values\n par = par || 0;\n basis = basis || 0;\n\n // Compute accrued interest\n return par * rate * YEARFRAC(issue, settlement, basis)\n}\n\n/**\n *\n * Returns the number of days in the coupon period that contains the settlement date.\n *\n * Category: Financial\n *\n * @param {*} settlement The security's settlement date. The security settlement date is the date after the issue date when the security is traded to the buyer.\n * @param {*} maturity The security's maturity date. The maturity date is the date when the security expires.\n * @param {*} frequency The number of coupon payments per year. For annual payments, frequency = 1; for semiannual, frequency = 2; for quarterly, frequency = 4.\n * @param {*} [basis] Optional. The type of day count basis to use.\n * @returns\n */\nfunction COUPDAYS(settlement, maturity, frequency, basis) {\n basis = validateBasis(basis);\n frequency = validateFrequency(frequency);\n settlement = parseDate(settlement);\n maturity = parseDate(maturity);\n\n if (anyError(settlement, maturity)) {\n return value\n }\n\n if (anyError(frequency, basis) || settlement >= maturity) {\n return num\n }\n\n if (basis === 1) {\n let date = lastCoupDateBeforeSettlement(settlement, maturity, frequency);\n let nextDate = parseDate(date);\n\n // Set month of the nextDate to the next coupon month\n nextDate.setMonth(nextDate.getMonth() + 12 / frequency);\n\n return DATEDIF(date, nextDate, 'D')\n }\n\n let numOfDays;\n\n switch (basis) {\n case 0:\n case 2:\n case 4:\n numOfDays = 360;\n break\n case 3:\n numOfDays = 365;\n break\n default:\n return num\n }\n\n return numOfDays / frequency\n}\n\n/**\n * Returns the cumulative interest paid between two periods.\n *\n * Category: Financial\n *\n * @param {*} rate The interest rate.\n * @param {*} nper The total number of payment periods.\n * @param {*} pv The present value.\n * @param {*} start_period The first period in the calculation. Payment periods are numbered beginning with 1.\n * @param {*} end_period The last period in the calculation.\n * @param {*} type The timing of the payment.\n * @returns\n */\nfunction CUMIPMT(rate, nper, pv, start_period, end_period, type) {\n rate = parseNumber(rate);\n nper = parseNumber(nper);\n pv = parseNumber(pv);\n\n if (anyIsError(rate, nper, pv)) {\n return value\n }\n\n if (rate <= 0 || nper <= 0 || pv <= 0) {\n return num\n }\n\n if (start_period < 1 || end_period < 1 || start_period > end_period) {\n return num\n }\n\n if (type !== 0 && type !== 1) {\n return num\n }\n\n const payment = PMT(rate, nper, pv, 0, type);\n let interest = 0;\n\n if (start_period === 1) {\n if (type === 0) {\n interest = -pv;\n }\n\n start_period++;\n }\n\n for (let i = start_period; i <= end_period; i++) {\n interest += type === 1 ? FV(rate, i - 2, payment, pv, 1) - payment : FV(rate, i - 1, payment, pv, 0);\n }\n\n interest *= rate;\n\n return interest\n}\n\n/**\n * Returns the cumulative principal paid on a loan between two periods.\n *\n * Category: Financial\n *\n * @param {*} rate The interest rate.\n * @param {*} nper The total number of payment periods.\n * @param {*} pv The present value.\n * @param {*} start_period The first period in the calculation. Payment periods are numbered beginning with 1.\n * @param {*} end_period The last period in the calculation.\n * @param {*} type The timing of the payment.\n * @returns\n */\nfunction CUMPRINC(rate, nper, pv, start_period, end, type) {\n // Credits: algorithm inspired by Apache OpenOffice\n // Credits: Hannes Stiebitzhofer for the translations of function and variable names\n rate = parseNumber(rate);\n nper = parseNumber(nper);\n pv = parseNumber(pv);\n\n if (anyIsError(rate, nper, pv)) {\n return value\n }\n\n // Return error if either rate, nper, or value are lower than or equal to zero\n if (rate <= 0 || nper <= 0 || pv <= 0) {\n return num\n }\n\n // Return error if start < 1, end < 1, or start > end\n if (start_period < 1 || end < 1 || start_period > end) {\n return num\n }\n\n // Return error if type is neither 0 nor 1\n if (type !== 0 && type !== 1) {\n return num\n }\n\n // Compute cumulative principal\n const payment = PMT(rate, nper, pv, 0, type);\n let principal = 0;\n\n if (start_period === 1) {\n principal = type === 0 ? payment + pv * rate : payment;\n\n start_period++;\n }\n\n for (let i = start_period; i <= end; i++) {\n principal +=\n type > 0\n ? payment - (FV(rate, i - 2, payment, pv, 1) - payment) * rate\n : payment - FV(rate, i - 1, payment, pv, 0) * rate;\n }\n\n // Return cumulative principal\n return principal\n}\n\n/**\n * Returns the depreciation of an asset for a specified period by using the fixed-declining balance method.\n *\n * Category: Financial\n *\n * @param {*} cost The initial cost of the asset.\n * @param {*} salvage The value at the end of the depreciation (sometimes called the salvage value of the asset).\n * @param {*} life The number of periods over which the asset is being depreciated (sometimes called the useful life of the asset).\n * @param {*} period The period for which you want to calculate the depreciation. Period must use the same units as life.\n * @param {*} [month] Optional. The number of months in the first year. If month is omitted, it is assumed to be 12.\n * @returns\n */\nfunction DB(cost, salvage, life, period, month) {\n // Initialize month\n month = month === undefined ? 12 : month;\n\n cost = parseNumber(cost);\n salvage = parseNumber(salvage);\n life = parseNumber(life);\n period = parseNumber(period);\n month = parseNumber(month);\n\n if (anyIsError(cost, salvage, life, period, month)) {\n return value\n }\n\n // Return error if any of the parameters is negative\n if (cost < 0 || salvage < 0 || life < 0 || period < 0) {\n return num\n }\n\n // Return error if month is not an integer between 1 and 12\n if ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].indexOf(month) === -1) {\n return num\n }\n\n // Return error if period is greater than life\n if (period > life) {\n return num\n }\n\n // Return 0 (zero) if salvage is greater than or equal to cost\n if (salvage >= cost) {\n return 0\n }\n\n // Rate is rounded to three decimals places\n const rate = (1 - Math.pow(salvage / cost, 1 / life)).toFixed(3);\n\n // Compute initial depreciation\n const initial = (cost * rate * month) / 12;\n\n // Compute total depreciation\n let total = initial;\n let current = 0;\n const ceiling = period === life ? life - 1 : period;\n\n for (let i = 2; i <= ceiling; i++) {\n current = (cost - total) * rate;\n total += current;\n }\n\n // Depreciation for the first and last periods are special cases\n if (period === 1) {\n // First period\n return initial\n } else if (period === life) {\n // Last period\n\n return (cost - total) * rate\n } else {\n return current\n }\n}\n\n/**\n * Returns the depreciation of an asset for a specified period by using the double-declining balance method or some other method that you specify.\n *\n * Category: Financial\n *\n * @param {*} cost The initial cost of the asset.\n * @param {*} salvage The value at the end of the depreciation (sometimes called the salvage value of the asset). This value can be 0.\n * @param {*} life The number of periods over which the asset is being depreciated (sometimes called the useful life of the asset).\n * @param {*} period The period for which you want to calculate the depreciation. Period must use the same units as life.\n * @param {*} [factor] Optional. The rate at which the balance declines. If factor is omitted, it is assumed to be 2 (the double-declining balance method).\n * @returns\n */\nfunction DDB(cost, salvage, life, period, factor) {\n // Initialize factor\n factor = factor === undefined ? 2 : factor;\n\n cost = parseNumber(cost);\n salvage = parseNumber(salvage);\n life = parseNumber(life);\n period = parseNumber(period);\n factor = parseNumber(factor);\n\n if (anyIsError(cost, salvage, life, period, factor)) {\n return value\n }\n\n // Return error if any of the parameters is negative or if factor is null\n if (cost < 0 || salvage < 0 || life < 0 || period < 0 || factor <= 0) {\n return num\n }\n\n // Return error if period is greater than life\n if (period > life) {\n return num\n }\n\n // Return 0 (zero) if salvage is greater than or equal to cost\n if (salvage >= cost) {\n return 0\n }\n\n // Compute depreciation\n let total = 0;\n let current = 0;\n\n for (let i = 1; i <= period; i++) {\n current = Math.min((cost - total) * (factor / life), cost - salvage - total);\n total += current;\n }\n\n // Return depreciation\n return current\n}\n\n/**\n * Returns the discount rate for a security.\n *\n * Category: Financial\n *\n * @param {*} settlement The security's settlement date. The security settlement date is the date after the issue date when the security is traded to the buyer.\n * @param {*} maturity The security's maturity date. The maturity date is the date when the security expires.\n * @param {*} pr The security's price per $100 face value.\n * @param {*} redemption The security's redemption value per $100 face value.\n * @param {*} [basis] Optional. The type of day count basis to use.\n * @returns\n */\nfunction DISC(settlement, maturity, pr, redemption, basis) {\n settlement = parseDate(settlement);\n maturity = parseDate(maturity);\n pr = parseNumber(pr);\n redemption = parseNumber(redemption);\n basis = parseNumber(basis);\n\n basis = basis || 0;\n\n if (anyIsError(settlement, maturity, pr, redemption, basis)) {\n return value\n }\n\n if (pr <= 0 || redemption <= 0) {\n return num\n }\n\n if (settlement >= maturity) {\n return value\n }\n\n let basisVal, diff;\n switch (basis) {\n case 0:\n basisVal = 360;\n diff = DAYS360(settlement, maturity, false);\n break\n case 1:\n basisVal = 365;\n diff = DATEDIF(settlement, maturity, 'D');\n break\n case 2:\n basisVal = 360;\n diff = DATEDIF(settlement, maturity, 'D');\n break\n case 3:\n basisVal = 365;\n diff = DATEDIF(settlement, maturity, 'D');\n break\n case 4:\n basisVal = 360;\n diff = DAYS360(settlement, maturity, true);\n break\n default:\n return num\n }\n\n return (((redemption - pr) / redemption) * basisVal) / diff\n}\n\n/**\n * Converts a dollar price, expressed as a fraction, into a dollar price, expressed as a decimal number.\n *\n * Category: Financial\n *\n * @param {*} fractional_dollar A number expressed as an integer part and a fraction part, separated by a decimal symbol.\n * @param {*} fraction The integer to use in the denominator of the fraction.\n * @returns\n */\nfunction DOLLARDE(fractional_dollar, fraction) {\n // Credits: algorithm inspired by Apache OpenOffice\n fractional_dollar = parseNumber(fractional_dollar);\n fraction = parseNumber(fraction);\n\n if (anyIsError(fractional_dollar, fraction)) {\n return value\n }\n\n // Return error if fraction is negative\n if (fraction < 0) {\n return num\n }\n\n // Return error if fraction is greater than or equal to 0 and less than 1\n if (fraction >= 0 && fraction < 1) {\n return div0\n }\n\n // Truncate fraction if it is not an integer\n fraction = parseInt(fraction, 10);\n\n // Compute integer part\n let result = parseInt(fractional_dollar, 10);\n\n // Add decimal part\n result += ((fractional_dollar % 1) * Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN10))) / fraction;\n\n // Round result\n const power = Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN2) + 1);\n result = Math.round(result * power) / power;\n\n // Return converted dollar price\n return result\n}\n\n/**\n * Converts a dollar price, expressed as a decimal number, into a dollar price, expressed as a fraction.\n *\n * Category: Financial\n *\n * @param {*} decimal_dollar A decimal number.\n * @param {*} fraction The integer to use in the denominator of a fraction.\n * @returns\n */\nfunction DOLLARFR(decimal_dollar, fraction) {\n // Credits: algorithm inspired by Apache OpenOffice\n decimal_dollar = parseNumber(decimal_dollar);\n fraction = parseNumber(fraction);\n\n if (anyIsError(decimal_dollar, fraction)) {\n return value\n }\n\n // Return error if fraction is negative\n if (fraction < 0) {\n return num\n }\n\n // Return error if fraction is greater than or equal to 0 and less than 1\n if (fraction >= 0 && fraction < 1) {\n return div0\n }\n\n // Truncate fraction if it is not an integer\n fraction = parseInt(fraction, 10);\n\n // Compute integer part\n let result = parseInt(decimal_dollar, 10);\n\n // Add decimal part\n result += (decimal_dollar % 1) * Math.pow(10, -Math.ceil(Math.log(fraction) / Math.LN10)) * fraction;\n\n // Return converted dollar price\n return result\n}\n\n/**\n * Returns the effective annual interest rate.\n *\n * Category: Financial\n *\n * @param {*} nominal_rate The nominal interest rate.\n * @param {*} npery The number of compounding periods per year.\n * @returns\n */\nfunction EFFECT(nominal_rate, npery) {\n nominal_rate = parseNumber(nominal_rate);\n npery = parseNumber(npery);\n\n if (anyIsError(nominal_rate, npery)) {\n return value\n }\n\n // Return error if rate <=0 or periods < 1\n if (nominal_rate <= 0 || npery < 1) {\n return num\n }\n\n // Truncate periods if it is not an integer\n npery = parseInt(npery, 10);\n\n // Return effective annual interest rate\n return Math.pow(1 + nominal_rate / npery, npery) - 1\n}\n\n/**\n * Returns the future value of an investment.\n *\n * Category: Financial\n *\n * @param {*} rate The interest rate per period.\n * @param {*} nper The total number of payment periods in an annuity.\n * @param {*} pmt The payment made each period; it cannot change over the life of the annuity. Typically, pmt contains principal and interest but no other fees or taxes. If pmt is omitted, you must include the pv argument.\n * @param {*} [pv] Optional. The present value, or the lump-sum amount that a series of future payments is worth right now. If pv is omitted, it is assumed to be 0 (zero), and you must include the pmt argument.\n * @param {*} [type] Optional. The number 0 or 1 and indicates when payments are due. If type is omitted, it is assumed to be 0.\n * @returns\n */\nfunction FV(rate, nper, payment, value$1, type) {\n // Credits: algorithm inspired by Apache OpenOffice\n value$1 = value$1 || 0;\n type = type || 0;\n\n rate = parseNumber(rate);\n nper = parseNumber(nper);\n payment = parseNumber(payment);\n value$1 = parseNumber(value$1);\n type = parseNumber(type);\n\n if (anyIsError(rate, nper, payment, value$1, type)) {\n return value\n }\n\n // Return future value\n let result;\n\n if (rate === 0) {\n result = value$1 + payment * nper;\n } else {\n const term = Math.pow(1 + rate, nper);\n\n result =\n type === 1\n ? value$1 * term + (payment * (1 + rate) * (term - 1)) / rate\n : value$1 * term + (payment * (term - 1)) / rate;\n }\n\n return -result\n}\n\n/**\n * Returns the future value of an initial principal after applying a series of compound interest rates.\n *\n * Category: Financial\n *\n * @param {*} principal The present value.\n * @param {*} schedule An array of interest rates to apply.\n * @returns\n */\nfunction FVSCHEDULE(principal, schedule) {\n principal = parseNumber(principal);\n schedule = parseNumberArray(flatten(schedule));\n\n if (anyIsError(principal, schedule)) {\n return value\n }\n\n const n = schedule.length;\n let future = principal;\n\n // Apply all interests in schedule\n\n for (let i = 0; i < n; i++) {\n // Apply scheduled interest\n future *= 1 + schedule[i];\n }\n\n // Return future value\n return future\n}\n\n/**\n * Returns the interest payment for an investment for a given period.\n *\n * Category: Financial\n *\n * @param {*} rate The interest rate per period.\n * @param {*} per The period for which you want to find the interest and must be in the range 1 to nper.\n * @param {*} nper The total number of payment periods in an annuity.\n * @param {*} pv The present value, or the lump-sum amount that a series of future payments is worth right now.\n * @param {*} [fv] Optional. The future value, or a cash balance you want to attain after the last payment is made. If fv is omitted, it is assumed to be 0 (the future value of a loan, for example, is 0).\n * @param {*} [type] Optional. The number 0 or 1 and indicates when payments are due. If type is omitted, it is assumed to be 0.\n * @returns\n */\nfunction IPMT(rate, per, nper, pv, fv, type) {\n // Credits: algorithm inspired by Apache OpenOffice\n fv = fv || 0;\n type = type || 0;\n\n rate = parseNumber(rate);\n per = parseNumber(per);\n nper = parseNumber(nper);\n pv = parseNumber(pv);\n fv = parseNumber(fv);\n type = parseNumber(type);\n\n if (anyIsError(rate, per, nper, pv, fv, type)) {\n return value\n }\n\n // Compute payment\n const payment = PMT(rate, nper, pv, fv, type);\n\n // Compute interest\n let interest =\n per === 1\n ? type === 1\n ? 0\n : -pv\n : type === 1\n ? FV(rate, per - 2, payment, pv, 1) - payment\n : FV(rate, per - 1, payment, pv, 0);\n\n // Return interest\n return interest * rate\n}\n\n/**\n * Returns the internal rate of return for a series of cash flows.\n *\n * Category: Financial\n *\n * @param {*} values An array or a reference to values that contain numbers for which you want to calculate the internal rate of return.\n - Values must contain at least one positive value and one negative value to calculate the internal rate of return.\n - IRR uses the order of values to interpret the order of cash flows. Be sure to enter your payment and income values in the sequence you want.\n - If an array or reference argument contains text, logical values, or empty values, those values are ignored.\n * @param {*} [guess] Optional. A number that you guess is close to the result of IRR.\n - Microsoft Excel uses an iterative technique for calculating IRR. Starting with guess, IRR cycles through the calculation until the result is accurate within 0.00001 percent. If IRR can't find a result that works after 20 tries, the #NUM! error value is returned.\n - In most cases you do not need to provide guess for the IRR calculation. If guess is omitted, it is assumed to be 0.1 (10 percent).\n - If IRR gives the #NUM! error value, or if the result is not close to what you expected, try again with a different value for guess.\n * @returns\n */\nfunction IRR(values, guess) {\n // Credits: algorithm inspired by Apache OpenOffice\n guess = typeof guess === 'number' ? guess : typeof guess === 'undefined' ? 0.1 : parseNumber(guess);\n\n values = flatten(values).filter(isDefined);\n\n values = parseNumberArray(values);\n\n if (anyIsError(values, guess)) {\n return value\n }\n\n // Use Float64Array for better performance with numeric operations\n const cashFlows = new Float64Array(values.length);\n\n let positive = false;\n let negative = false;\n // Single-pass processing of input values\n for (let i = 0; i < values.length; i++) {\n cashFlows[i] = values[i];\n\n if (cashFlows[i] > 0) positive = true;\n if (cashFlows[i] < 0) negative = true;\n }\n\n // Return error if values does not contain at least one positive value and one negative value\n if (!positive || !negative) {\n return num\n }\n\n // Calculates the npv amount\n const npv = (rate) => {\n if (rate <= -1) rate = -0.999999999;\n\n let result = cashFlows[0];\n const r = 1 + rate;\n\n // Avoid repeated Math.pow calls by using manual exponentiation\n let factor = 1;\n for (let i = 1; i < cashFlows.length; i++) {\n factor *= r;\n result += cashFlows[i] / factor;\n }\n\n return result\n };\n\n // Memoized NPV to avoid recalculating for the same rates\n const npvCache = new Map();\n const cachedNpv = function (rate) {\n const roundedRate = Math.round(rate * 1e10) / 1e10; // Round to 10 decimal places for caching\n\n if (npvCache.has(roundedRate)) {\n return npvCache.get(roundedRate)\n }\n\n const result = npv(roundedRate);\n npvCache.set(roundedRate, result);\n return result\n };\n // Combined method: Start with Newton-Raphson for speed, then switch to bisection for reliability\n const combinedMethod = function () {\n // Set maximum epsilon for end of iteration\n const epsMax = 1e-10;\n const maxIterations = 1000;\n\n // Phase 1: Newton-Raphson with adaptive step for faster convergence\n let rate = guess;\n let prevRate = rate;\n let iteration = 0;\n\n // Try Newton-Raphson until it shows signs of instability\n while (iteration < maxIterations) {\n // Limit Newton-Raphson attempts\n const currentNpv = cachedNpv(rate);\n\n // Exit early if we're already close enough\n if (Math.abs(currentNpv) < epsMax) {\n return rate\n }\n\n // Check if we're stabilizing\n if (iteration > 0 && Math.abs(rate - prevRate) < epsMax * 10) {\n break\n }\n\n // Calculate approximate derivative using secant method (faster than calculating exact derivative)\n const delta = Math.max(0.0001, Math.abs(rate * 0.0001));\n const derivNpv = (cachedNpv(rate + delta) - currentNpv) / delta;\n\n // Exit if derivative is too small (to avoid division by near-zero)\n if (Math.abs(derivNpv) < epsMax) {\n break\n }\n\n // Calculate next rate using Newton step\n prevRate = rate;\n const newtonStep = currentNpv / derivNpv;\n\n // Limit step size for stability\n const maxStep = Math.max(0.1, Math.abs(rate) * 0.5);\n if (Math.abs(newtonStep) > maxStep) {\n rate -= Math.sign(newtonStep) * maxStep;\n } else {\n rate -= newtonStep;\n }\n\n // Constrain rate to reasonable values\n if (rate <= -1) rate = -0.99999999;\n if (rate > 1000) rate = 1000;\n\n iteration++;\n }\n\n // Phase 2: Bisection method for reliability\n // Use current Newton result as a starting point\n let npvAtRate = cachedNpv(rate);\n\n // If Newton's method gave a good answer, return it\n if (Math.abs(npvAtRate) < epsMax) {\n return rate\n }\n\n // Otherwise, set up bisection\n let a, b;\n\n // Find boundaries where NPV changes sign\n if (npvAtRate > 0) {\n a = rate;\n // Find b where npv(b) < 0\n b = rate + 0.1;\n while (cachedNpv(b) > 0 && b < 1000) {\n b = b * 2 + 0.1;\n }\n if (b >= 1000) return rate // Couldn't find sign change\n } else {\n b = rate;\n // Find a where npv(a) > 0\n a = Math.max(-0.99999999, rate - 0.1);\n while (cachedNpv(a) < 0 && a > -0.99999999) {\n a = Math.max(-0.99999999, a - 0.1);\n }\n if (a <= -0.99999999) return rate // Couldn't find sign change\n }\n\n // Perform bisection\n let c;\n for (let i = 0; i < maxIterations; i++) {\n c = (a + b) / 2;\n const npvC = cachedNpv(c);\n\n if (Math.abs(npvC) < epsMax || Math.abs(b - a) < epsMax) {\n return c\n }\n\n if (npvC * cachedNpv(a) < 0) {\n b = c;\n } else {\n a = c;\n }\n }\n\n return c\n };\n\n // Execute optimized combined method\n return combinedMethod()\n}\n\n/**\n * Calculates the interest paid during a specific period of an investment.\n *\n * Category: Financial\n *\n * @param {*} rate The interest rate for the investment.\n * @param {*} per The period for which you want to find the interest, and must be between 1 and Nper.\n * @param {*} nper The total number of payment periods for the investment.\n * @param {*} pv The present value of the investment. For a loan, Pv is the loan amount.\n *\n * @returns\n */\nfunction ISPMT(rate, per, nper, pv) {\n rate = parseNumber(rate);\n per = parseNumber(per);\n nper = parseNumber(nper);\n pv = parseNumber(pv);\n\n if (anyIsError(rate, per, nper, pv)) {\n return value\n }\n\n // Return interest\n return pv * rate * (per / nper - 1)\n}\n\n/**\n * Returns the internal rate of return where positive and negative cash flows are financed at different rates.\n *\n * Category: Financial\n *\n * @param {*} values An array or a reference to values that contain numbers. These numbers represent a series of payments (negative values) and income (positive values) occurring at regular periods.\n - Values must contain at least one positive value and one negative value to calculate the modified internal rate of return. Otherwise, MIRR returns the #DIV/0! error value.\n - If an array or reference argument contains text, logical values, or empty values, those values are ignored; however, values with the value zero are included.\n * @param {*} finance_rate The interest rate you pay on the money used in the cash flows.\n * @param {*} reinvest_rate The interest rate you receive on the cash flows as you reinvest them.\n * @returns\n */\nfunction MIRR(values, finance_rate, reinvest_rate) {\n values = parseNumberArray(flatten(values));\n finance_rate = parseNumber(finance_rate);\n reinvest_rate = parseNumber(reinvest_rate);\n\n if (anyIsError(values, finance_rate, reinvest_rate)) {\n return value\n }\n\n // Initialize number of values\n const n = values.length;\n\n // Lookup payments (negative values) and incomes (positive values)\n const payments = [];\n const incomes = [];\n\n for (let i = 0; i < n; i++) {\n if (values[i] < 0) {\n payments.push(values[i]);\n } else {\n incomes.push(values[i]);\n }\n }\n\n // Return modified internal rate of return\n const num = -NPV(reinvest_rate, incomes) * Math.pow(1 + reinvest_rate, n - 1);\n const den = NPV(finance_rate, payments) * (1 + finance_rate);\n\n return Math.pow(num / den, 1 / (n - 1)) - 1\n}\n\n/**\n * Returns the annual nominal interest rate.\n *\n * Category: Financial\n *\n * @param {*} effect_rate The effective interest rate.\n * @param {*} npery The number of compounding periods per year.\n * @returns\n */\nfunction NOMINAL(effect_rate, npery) {\n effect_rate = parseNumber(effect_rate);\n npery = parseNumber(npery);\n\n if (anyIsError(effect_rate, npery)) {\n return value\n }\n\n // Return error if rate <=0 or periods < 1\n if (effect_rate <= 0 || npery < 1) {\n return num\n }\n\n // Truncate periods if it is not an integer\n npery = parseInt(npery, 10);\n\n // Return nominal annual interest rate\n return (Math.pow(effect_rate + 1, 1 / npery) - 1) * npery\n}\n\n/**\n * Returns the number of periods for an investment.\n *\n * Category: Financial\n *\n * @param {*} rate The interest rate per period.\n * @param {*} pmt The payment made each period; it cannot change over the life of the annuity. Typically, pmt contains principal and interest but no other fees or taxes.\n * @param {*} pv The present value, or the lump-sum amount that a series of future payments is worth right now.\n * @param {*} [fv] Optional. The future value, or a cash balance you want to attain after the last payment is made. If fv is omitted, it is assumed to be 0 (the future value of a loan, for example, is 0).\n * @param {*} [type] Optional. The number 0 or 1 and indicates when payments are due.\n * @returns\n */\nfunction NPER(rate, pmt, pv, fv, type) {\n type = type === undefined ? 0 : type;\n fv = fv === undefined ? 0 : fv;\n\n rate = parseNumber(rate);\n pmt = parseNumber(pmt);\n pv = parseNumber(pv);\n fv = parseNumber(fv);\n type = parseNumber(type);\n\n if (anyIsError(rate, pmt, pv, fv, type)) {\n return value\n }\n\n if (rate === 0) {\n return -(pv + fv) / pmt\n } else {\n const num = pmt * (1 + rate * type) - fv * rate;\n const den = pv * rate + pmt * (1 + rate * type);\n\n return Math.log(num / den) / Math.log(1 + rate)\n }\n}\n\n/**\n * Returns the net present value of an investment based on a series of periodic cash flows and a discount rate.\n *\n * Category: Financial\n *\n * @param {*} rate The rate of discount over the length of one period.\n * @param {*} args value1, value2, ... Value1 is required, subsequent values are optional. 1 to 254 arguments representing the payments and income.\n - value1, value2, ... must be equally spaced in time and occur at the end of each period.\n - NPV uses the order of value1, value2, ... to interpret the order of cash flows. Be sure to enter your payment and income values in the correct sequence.\n - Arguments that are empty values, logical values, or text representations of numbers, error values, or text that cannot be translated into numbers are ignored.\n - If an argument is an array or reference, only numbers in that array or reference are counted. Empty values, logical values, text, or error values in the array or reference are ignored.\n * @returns\n */\nfunction NPV() {\n const args = parseNumberArray(flatten(arguments));\n\n if (args instanceof Error) {\n return args\n }\n\n // Lookup rate\n const rate = args[0];\n\n // Initialize net present value\n let value = 0;\n\n // Loop on all values\n for (let j = 1; j < args.length; j++) {\n value += args[j] / Math.pow(1 + rate, j);\n }\n\n // Return net present value\n return value\n}\n\n/**\n * Returns the number of periods required by an investment to reach a specified value.\n *\n * Category: Financial\n *\n * @param {*} rate Rate is the interest rate per period.\n * @param {*} pv Pv is the present value of the investment.\n * @param {*} fv Fv is the desired future value of the investment.\n * @returns\n */\nfunction PDURATION(rate, pv, fv) {\n rate = parseNumber(rate);\n pv = parseNumber(pv);\n fv = parseNumber(fv);\n\n if (anyIsError(rate, pv, fv)) {\n return value\n }\n\n // Return error if rate <=0\n if (rate <= 0) {\n return num\n }\n\n // Return number of periods\n return (Math.log(fv) - Math.log(pv)) / Math.log(1 + rate)\n}\n\n/**\n * Returns the periodic payment for an annuity.\n *\n * Category: Financial\n *\n * @param {*} rate The interest rate for the loan.\n * @param {*} nper The total number of payments for the loan.\n * @param {*} pv The present value, or the total amount that a series of future payments is worth now; also known as the principal.\n * @param {*} [fv] Optional. The future value, or a cash balance you want to attain after the last payment is made. If fv is omitted, it is assumed to be 0 (zero), that is, the future value of a loan is 0.\n * @param {*} [type] Optional. The number 0 (zero) or 1 and indicates when payments are due.\n * @returns\n */\nfunction PMT(rate, nper, pv, fv, type) {\n // Credits: algorithm inspired by Apache OpenOffice\n fv = fv || 0;\n type = type || 0;\n\n rate = parseNumber(rate);\n nper = parseNumber(nper);\n pv = parseNumber(pv);\n fv = parseNumber(fv);\n type = parseNumber(type);\n\n if (anyIsError(rate, nper, pv, fv, type)) {\n return value\n }\n\n // Return payment\n let result;\n\n if (rate === 0) {\n result = (pv + fv) / nper;\n } else {\n const term = Math.pow(1 + rate, nper);\n\n result =\n type === 1\n ? ((fv * rate) / (term - 1) + (pv * rate) / (1 - 1 / term)) / (1 + rate)\n : (fv * rate) / (term - 1) + (pv * rate) / (1 - 1 / term);\n }\n\n return -result\n}\n\n/**\n * Returns the payment on the principal for an investment for a given period.\n *\n * Category: Financial\n *\n * @param {*} rate The interest rate per period.\n * @param {*} per Specifies the period and must be in the range 1 to nper.\n * @param {*} nper The total number of payment periods in an annuity.\n * @param {*} pv The present value — the total amount that a series of future payments is worth now.\n * @param {*} [fv] Optional. The future value, or a cash balance you want to attain after the last payment is made. If fv is omitted, it is assumed to be 0 (zero), that is, the future value of a loan is 0.\n * @param {*} [type] Optional. The number 0 or 1 and indicates when payments are due.\n * @returns\n */\nfunction PPMT(rate, per, nper, pv, fv, type) {\n fv = fv || 0;\n type = type || 0;\n\n rate = parseNumber(rate);\n nper = parseNumber(nper);\n pv = parseNumber(pv);\n fv = parseNumber(fv);\n type = parseNumber(type);\n\n if (anyIsError(rate, nper, pv, fv, type)) {\n return value\n }\n\n return PMT(rate, nper, pv, fv, type) - IPMT(rate, per, nper, pv, fv, type)\n}\n\n/**\n * Returns the price per $100 face value of a discounted security.\n *\n * Category: Financial\n *\n * @param {*} settlement The security's settlement date. The security settlement date is the date after the issue date when the security is traded to the buyer.\n * @param {*} maturity The security's maturity date. The maturity date is the date when the security expires.\n * @param {*} discount The security's discount rate.\n * @param {*} redemption The security's redemption value per $100 face value.\n * @param {*} [basis] Optional. The type of day count basis to use.\n * @returns\n */\nfunction PRICEDISC(settlement, maturity, discount, redemption, basis) {\n settlement = parseDate(settlement);\n maturity = parseDate(maturity);\n discount = parseNumber(discount);\n redemption = parseNumber(redemption);\n basis = parseNumber(basis);\n\n basis = basis || 0;\n\n if (anyIsError(settlement, maturity, discount, redemption, basis)) {\n return value\n }\n\n if (discount <= 0 || redemption <= 0) {\n return num\n }\n\n if (settlement >= maturity) {\n return value\n }\n\n let basisVal, diff;\n switch (basis) {\n case 0:\n basisVal = 360;\n diff = DAYS360(settlement, maturity, false);\n break\n case 1:\n basisVal = 365;\n diff = DATEDIF(settlement, maturity, 'D');\n break\n case 2:\n basisVal = 360;\n diff = DATEDIF(settlement, maturity, 'D');\n break\n case 3:\n basisVal = 365;\n diff = DATEDIF(settlement, maturity, 'D');\n break\n case 4:\n basisVal = 360;\n diff = DAYS360(settlement, maturity, true);\n break\n default:\n return num\n }\n\n return redemption - (discount * redemption * diff) / basisVal\n}\n\n/**\n * Returns the present value of an investment.\n *\n * Category: Financial\n *\n * @param {*} rate The interest rate per period. For example, if you obtain an automobile loan at a 10 percent annual interest rate and make monthly payments, your interest rate per month is 10%/12, or 0.83%. You would enter 10%/12, or 0.83%, or 0.0083, into the formula as the rate.\n * @param {*} nper The total number of payment periods in an annuity. For example, if you get a four-year car loan and make monthly payments, your loan has 4*12 (or 48) periods. You would enter 48 into the formula for nper.\n * @param {*} pmt The payment made each period and cannot change over the life of the annuity. Typically, pmt includes principal and interest but no other fees or taxes. For example, the monthly payments on a $10,000, four-year car loan at 12 percent are $263.33. You would enter -263.33 into the formula as the pmt. If pmt is omitted, you must include the fv argument.\n * @param {*} [fv] Optional. The future value, or a cash balance you want to attain after the last payment is made. If fv is omitted, it is assumed to be 0 (the future value of a loan, for example, is 0). For example, if you want to save $50,000 to pay for a special project in 18 years, then $50,000 is the future value. You could then make a conservative guess at an interest rate and determine how much you must save each month. If fv is omitted, you must include the pmt argument.\n * @param {*} [type] Optional. The number 0 or 1 and indicates when payments are due.\n * @returns\n */\nfunction PV(rate, per, pmt, fv, type) {\n fv = fv || 0;\n type = type || 0;\n\n rate = parseNumber(rate);\n per = parseNumber(per);\n pmt = parseNumber(pmt);\n fv = parseNumber(fv);\n type = parseNumber(type);\n\n if (anyIsError(rate, per, pmt, fv, type)) {\n return value\n }\n\n // Return present value\n return rate === 0\n ? -pmt * per - fv\n : (((1 - Math.pow(1 + rate, per)) / rate) * pmt * (1 + rate * type) - fv) / Math.pow(1 + rate, per)\n}\n\n/**\n * Returns the interest rate per period of an annuity.\n *\n * Category: Financial\n *\n * @param {*} nper The total number of payment periods in an annuity.\n * @param {*} pmt The payment made each period and cannot change over the life of the annuity. Typically, pmt includes principal and interest but no other fees or taxes. If pmt is omitted, you must include the fv argument.\n * @param {*} pv The present value — the total amount that a series of future payments is worth now.\n * @param {*} [fv] Optional. The future value, or a cash balance you want to attain after the last payment is made. If fv is omitted, it is assumed to be 0 (the future value of a loan, for example, is 0). If fv is omitted, you must include the pmt argument.\n * @param {*} [type] Optional. The number 0 or 1 and indicates when payments are due.\n * @param {*} [guess] Optional. Your guess for what the rate will be. If you omit guess, it is assumed to be 10 percent. If RATE does not converge, try different values for guess. RATE usually converges if guess is between 0 and 1.\n - If you omit guess, it is assumed to be 10 percent.\n - If RATE does not converge, try different values for guess. RATE usually converges if guess is between 0 and 1.\n * @returns\n */\nfunction RATE(nper, pmt, pv, fv, type, guess) {\n guess = guess === undefined ? 0.1 : guess;\n fv = fv === undefined ? 0 : fv;\n type = type === undefined ? 0 : type;\n\n nper = parseNumber(nper);\n pmt = parseNumber(pmt);\n pv = parseNumber(pv);\n fv = parseNumber(fv);\n type = parseNumber(type);\n guess = parseNumber(guess);\n\n if (anyIsError(nper, pmt, pv, fv, type, guess)) {\n return value\n }\n\n const epsMax = 1e-10;\n const iterMax = 100;\n let rate = guess;\n\n type = type ? 1 : 0;\n\n for (let i = 0; i < iterMax; i++) {\n if (rate <= -1) {\n return num\n }\n\n let y, f;\n\n if (Math.abs(rate) < epsMax) {\n y = pv * (1 + nper * rate) + pmt * (1 + rate * type) * nper + fv;\n } else {\n f = Math.pow(1 + rate, nper);\n y = pv * f + pmt * (1 / rate + type) * (f - 1) + fv;\n }\n\n if (Math.abs(y) < epsMax) {\n return rate\n }\n\n let dy;\n\n if (Math.abs(rate) < epsMax) {\n dy = pv * nper + pmt * type * nper;\n } else {\n f = Math.pow(1 + rate, nper);\n const df = nper * Math.pow(1 + rate, nper - 1);\n dy = pv * df + pmt * (1 / rate + type) * df + pmt * (-1 / (rate * rate)) * (f - 1);\n }\n\n rate -= y / dy;\n }\n\n return rate\n}\n\n/**\n * Returns an equivalent interest rate for the growth of an investment.\n *\n * Category: Financial\n *\n * @param {*} nper Nper is the number of periods for the investment.\n * @param {*} pv Pv is the present value of the investment.\n * @param {*} fv Fv is the future value of the investment.\n * @returns\n */\nfunction RRI(nper, pv, fv) {\n nper = parseNumber(nper);\n pv = parseNumber(pv);\n fv = parseNumber(fv);\n\n if (anyIsError(nper, pv, fv)) {\n return value\n }\n\n // Return error if nper or present is equal to 0 (zero)\n if (nper === 0 || pv === 0) {\n return num\n }\n\n // Return equivalent interest rate\n return Math.pow(fv / pv, 1 / nper) - 1\n}\n\n/**\n * Returns the straight-line depreciation of an asset for one period.\n *\n * Category: Financial\n *\n * @param {*} cost The initial cost of the asset.\n * @param {*} salvage The value at the end of the depreciation (sometimes called the salvage value of the asset).\n * @param {*} life The number of periods over which the asset is depreciated (sometimes called the useful life of the asset).\n * @returns\n */\nfunction SLN(cost, salvage, life) {\n cost = parseNumber(cost);\n salvage = parseNumber(salvage);\n life = parseNumber(life);\n\n if (anyIsError(cost, salvage, life)) {\n return value\n }\n\n // Return error if life equal to 0 (zero)\n if (life === 0) {\n return num\n }\n\n // Return straight-line depreciation\n return (cost - salvage) / life\n}\n\n/**\n * Returns the sum-of-years' digits depreciation of an asset for a specified period.\n *\n * Category: Financial\n *\n * @param {*} cost The initial cost of the asset.\n * @param {*} salvage The value at the end of the depreciation (sometimes called the salvage value of the asset).\n * @param {*} life The number of periods over which the asset is depreciated (sometimes called the useful life of the asset).\n * @param {*} per The period and must use the same units as life.\n * @returns\n */\nfunction SYD(cost, salvage, life, per) {\n // Return error if any of the parameters is not a number\n cost = parseNumber(cost);\n salvage = parseNumber(salvage);\n life = parseNumber(life);\n per = parseNumber(per);\n\n if (anyIsError(cost, salvage, life, per)) {\n return value\n }\n\n // Return error if life equal to 0 (zero)\n if (life === 0) {\n return num\n }\n\n // Return error if period is lower than 1 or greater than life\n if (per < 1 || per > life) {\n return num\n }\n\n // Truncate period if it is not an integer\n per = parseInt(per, 10);\n\n // Return straight-line depreciation\n return ((cost - salvage) * (life - per + 1) * 2) / (life * (life + 1))\n}\n\n/**\n * Returns the bond-equivalent yield for a Treasury bill.\n *\n * Category: Financial\n *\n * @param {*} settlement The Treasury bill's settlement date. The security settlement date is the date after the issue date when the Treasury bill is traded to the buyer.\n * @param {*} maturity The Treasury bill's maturity date. The maturity date is the date when the Treasury bill expires.\n * @param {*} discount The Treasury bill's discount rate.\n * @returns\n */\nfunction TBILLEQ(settlement, maturity, discount) {\n settlement = parseDate(settlement);\n maturity = parseDate(maturity);\n discount = parseNumber(discount);\n\n if (anyIsError(settlement, maturity, discount)) {\n return value\n }\n\n // Return error if discount is lower than or equal to zero\n if (discount <= 0) {\n return num\n }\n\n // Return error if settlement is greater than maturity\n if (settlement > maturity) {\n return num\n }\n\n // Return error if maturity is more than one year after settlement\n if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\n return num\n }\n\n // Return bond-equivalent yield\n return (365 * discount) / (360 - discount * DAYS360(settlement, maturity, false))\n}\n\n/**\n * Returns the price per $100 face value for a Treasury bill.\n *\n * Category: Financial\n *\n * @param {*} settlement The Treasury bill's settlement date. The security settlement date is the date after the issue date when the Treasury bill is traded to the buyer.\n * @param {*} maturity The Treasury bill's maturity date. The maturity date is the date when the Treasury bill expires.\n * @param {*} discount The Treasury bill's discount rate.\n * @returns\n */\nfunction TBILLPRICE(settlement, maturity, discount) {\n settlement = parseDate(settlement);\n maturity = parseDate(maturity);\n discount = parseNumber(discount);\n\n if (anyIsError(settlement, maturity, discount)) {\n return value\n }\n\n // Return error if discount is lower than or equal to zero\n if (discount <= 0) {\n return num\n }\n\n // Return error if settlement is greater than maturity\n if (settlement > maturity) {\n return num\n }\n\n // Return error if maturity is more than one year after settlement\n if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\n return num\n }\n\n // Return bond-equivalent yield\n return 100 * (1 - (discount * DAYS360(settlement, maturity, false)) / 360)\n}\n\n/**\n * Returns the yield for a Treasury bill.\n *\n * Category: Financial\n *\n * @param {*} settlement The Treasury bill's settlement date. The security settlement date is the date after the issue date when the Treasury bill is traded to the buyer.\n * @param {*} maturity The Treasury bill's maturity date. The maturity date is the date when the Treasury bill expires.\n * @param {*} pr The Treasury bill's price per $100 face value.\n * @returns\n */\nfunction TBILLYIELD(settlement, maturity, pr) {\n settlement = parseDate(settlement);\n maturity = parseDate(maturity);\n pr = parseNumber(pr);\n\n if (anyIsError(settlement, maturity, pr)) {\n return value\n }\n\n // Return error if price is lower than or equal to zero\n if (pr <= 0) {\n return num\n }\n\n // Return error if settlement is greater than maturity\n if (settlement > maturity) {\n return num\n }\n\n // Return error if maturity is more than one year after settlement\n if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\n return num\n }\n\n // Return bond-equivalent yield\n return ((100 - pr) * 360) / (pr * DAYS360(settlement, maturity, false))\n}\n\n/**\n * Returns the internal rate of return for a schedule of cash flows that is not necessarily periodic.\n *\n * Category: Financial\n *\n * @param {*} values A series of cash flows that corresponds to a schedule of payments in dates. The first payment is optional and corresponds to a cost or payment that occurs at the beginning of the investment. If the first value is a cost or payment, it must be a negative value. All succeeding payments are discounted based on a 365-day year. The series of values must contain at least one positive and one negative value.\n * @param {*} dates A schedule of payment dates that corresponds to the cash flow payments. Dates may occur in any order. Dates should be entered by using the DATE function, or as results of other formulas or functions. For example, use DATE(2008,5,23) for the 23rd day of May, 2008. Problems can occur if dates are entered as text. .\n * @param {*} [guess] Optional. A number that you guess is close to the result of XIRR.\n * @returns\n */\nfunction XIRR(values, dates, guess) {\n // Credits: algorithm inspired by Apache OpenOffice\n values = parseNumberArray(flatten(values));\n dates = parseDateArray(flatten(dates));\n guess = parseNumber(guess);\n\n if (anyIsError(values, dates, guess)) {\n return value\n }\n\n // Calculates the resulting amount\n const irrResult = (values, dates, rate) => {\n const r = rate + 1;\n let result = values[0];\n\n for (let i = 1; i < values.length; i++) {\n result += values[i] / Math.pow(r, DAYS(dates[i], dates[0]) / 365);\n }\n\n return result\n };\n\n // Calculates the first derivation\n const irrResultDeriv = (values, dates, rate) => {\n const r = rate + 1;\n let result = 0;\n\n for (let i = 1; i < values.length; i++) {\n const frac = DAYS(dates[i], dates[0]) / 365;\n result -= (frac * values[i]) / Math.pow(r, frac + 1);\n }\n\n return result\n };\n\n // Check that values contains at least one positive value and one negative value\n let positive = false;\n let negative = false;\n\n for (let i = 0; i < values.length; i++) {\n if (values[i] > 0) {\n positive = true;\n }\n\n if (values[i] < 0) {\n negative = true;\n }\n }\n\n // Return error if values does not contain at least one positive value and one negative value\n if (!positive || !negative) {\n return num\n }\n\n // Initialize guess and resultRate\n guess = guess || 0.1;\n let resultRate = guess;\n\n // Set maximum epsilon for end of iteration\n const epsMax = 1e-10;\n\n // Implement Newton's method\n let newRate, epsRate, resultValue;\n let contLoop = true;\n\n do {\n resultValue = irrResult(values, dates, resultRate);\n newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);\n epsRate = Math.abs(newRate - resultRate);\n resultRate = newRate;\n contLoop = epsRate > epsMax && Math.abs(resultValue) > epsMax;\n } while (contLoop)\n\n // Return internal rate of return\n return resultRate\n}\n\n/**\n * Returns the net present value for a schedule of cash flows that is not necessarily periodic.\n *\n * Category: Financial\n *\n * @param {*} rate The discount rate to apply to the cash flows.\n * @param {*} values A series of cash flows that corresponds to a schedule of payments in dates. The first payment is optional and corresponds to a cost or payment that occurs at the beginning of the investment. If the first value is a cost or payment, it must be a negative value. All succeeding payments are discounted based on a 365-day year. The series of values must contain at least one positive value and one negative value.\n * @param {*} dates A schedule of payment dates that corresponds to the cash flow payments. The first payment date indicates the beginning of the schedule of payments. All other dates must be later than this date, but they may occur in any order.\n * @returns\n */\nfunction XNPV(rate, values, dates) {\n rate = parseNumber(rate);\n values = parseNumberArray(flatten(values));\n dates = parseDateArray(flatten(dates));\n\n if (anyIsError(rate, values, dates)) {\n return value\n }\n\n let result = 0;\n\n for (let i = 0; i < values.length; i++) {\n result += values[i] / Math.pow(1 + rate, DAYS(dates[i], dates[0]) / 365);\n }\n\n return result\n}\n\n/**\n * Returns TRUE if all of its arguments are TRUE.\n *\n * Category: Logical\n *\n * @returns\n */\nfunction AND() {\n const args = flatten(arguments);\n let result = value;\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] instanceof Error) {\n return args[i]\n }\n\n if (args[i] === undefined || args[i] === null || typeof args[i] === 'string') {\n continue\n }\n\n if (result === value) {\n result = true;\n }\n\n if (!args[i]) {\n result = false;\n }\n }\n\n return result\n}\n\n/**\n * Returns the logical value FALSE.\n *\n * Category: Logical\n *\n * @returns\n */\nfunction FALSE() {\n return false\n}\n\n/**\n * Specifies a logical test to perform.\n *\n * Category: Logical\n *\n * @param {*} logical_test\n * @param {*} value_if_true\n * @param {*} value_if_false\n *\n * @returns\n */\nfunction IF(logical_test, value_if_true, value_if_false) {\n if (logical_test instanceof Error) {\n return logical_test\n }\n\n value_if_true = arguments.length >= 2 ? value_if_true : true;\n\n if (value_if_true === undefined || value_if_true === null) {\n value_if_true = 0;\n }\n\n value_if_false = arguments.length === 3 ? value_if_false : false;\n\n if (value_if_false === undefined || value_if_false === null) {\n value_if_false = 0;\n }\n\n return logical_test ? value_if_true : value_if_false\n}\n\n/**\n * Checks whether one or more conditions are met and returns a value that corresponds to the first TRUE condition.\n *\n * Category: Logical\n *\n * @returns\n */\nfunction IFS() {\n for (let i = 0; i < arguments.length / 2; i++) {\n if (arguments[i * 2]) {\n return arguments[i * 2 + 1]\n }\n }\n\n return na\n}\n\n/**\n * Returns a value you specify if a formula evaluates to an error; otherwise, returns the result of the formula.\n *\n * Category: Logical\n *\n * @param {*} value The argument that is checked for an error.\n * @param {*} value_if_error The value to return if the formula evaluates to an error. The following error types are evaluated: #N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, or #NULL!.\n * @returns\n */\nfunction IFERROR(value, value_if_error) {\n if (ISERROR(value)) {\n return value_if_error\n }\n\n return value\n}\n\n/**\n * Returns the value you specify if the expression resolves to #N/A, otherwise returns the result of the expression.\n *\n * Category: Logical\n *\n * @returns\n */\nfunction IFNA(value, value_if_na) {\n return value === na ? value_if_na : value\n}\n\n/**\n * Reverses the logic of its argument.\n *\n * Category: Logical\n *\n * @returns\n */\nfunction NOT(logical) {\n if (typeof logical === 'string') {\n return value\n }\n\n if (logical instanceof Error) {\n return logical\n }\n\n return !logical\n}\n\n/**\n * Returns TRUE if any argument is TRUE.\n *\n * Category: Logical\n *\n * @returns\n */\nfunction OR() {\n const args = flatten(arguments);\n let result = value;\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] instanceof Error) {\n return args[i]\n }\n\n if (args[i] === undefined || args[i] === null || typeof args[i] === 'string') {\n continue\n }\n\n if (result === value) {\n result = false;\n }\n\n if (args[i]) {\n result = true;\n }\n }\n\n return result\n}\n\n/**\n * Returns the logical value TRUE.\n *\n * Category: Logical\n *\n * @returns\n */\nfunction TRUE() {\n return true\n}\n\n/**\n * Returns a logical exclusive OR of all arguments.\n *\n * Category: Logical\n *\n * @param {*} args logical1, logical2,… Logical 1 is required, subsequent logical values are optional. 1 to 254 conditions you want to test that can be either TRUE or FALSE, and can be logical values, arrays, or references.\n * @returns\n */\nfunction XOR() {\n const args = flatten(arguments);\n let result = value;\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] instanceof Error) {\n return args[i]\n }\n\n if (args[i] === undefined || args[i] === null || typeof args[i] === 'string') {\n continue\n }\n\n if (result === value) {\n result = 0;\n }\n\n if (args[i]) {\n result++;\n }\n }\n\n if (result === value) {\n return result\n }\n\n return !!(Math.floor(Math.abs(result)) & 1)\n}\n\n/**\n * Evaluates an expression against a list of values and returns the result corresponding to the first matching value. If there is no match, an optional default value may be returned.\n *\n * Category: Logical\n *\n * @returns\n */\nfunction SWITCH() {\n let result;\n\n if (arguments.length > 0) {\n const targetValue = arguments[0];\n const argc = arguments.length - 1;\n const switchCount = Math.floor(argc / 2);\n let switchSatisfied = false;\n const hasDefaultClause = argc % 2 !== 0;\n const defaultClause = argc % 2 === 0 ? null : arguments[arguments.length - 1];\n\n if (switchCount) {\n for (let index = 0; index < switchCount; index++) {\n if (targetValue === arguments[index * 2 + 1]) {\n result = arguments[index * 2 + 2];\n switchSatisfied = true;\n break\n }\n }\n }\n\n if (!switchSatisfied) {\n result = hasDefaultClause ? defaultClause : na;\n }\n } else {\n result = value;\n }\n\n return result\n}\n\nconst utils = { errors, symbols, date };\n\nexport { ABS, ACCRINT, ACOS, ACOSH, ACOT, ACOTH, AGGREGATE, AND, ARABIC, ASIN, ASINH, ATAN, ATAN2, ATANH, AVEDEV, AVERAGE, AVERAGEA, AVERAGEIF, AVERAGEIFS, BASE, BESSELI, BESSELJ, BESSELK, BESSELY, BETA, BETADIST, BETAINV, BIN2DEC, BIN2HEX, BIN2OCT, BINOM, BINOMDIST, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, CEILING, CEILINGMATH, CEILINGPRECISE, CHAR, CHIDIST, CHIDISTRT, CHIINV, CHIINVRT, CHISQ, CHITEST, CHOOSE, CHOOSECOLS, CHOOSEROWS, CLEAN, CODE, COLUMN, COLUMNS, COMBIN, COMBINA, COMPLEX, CONCAT, CONCATENATE, CONFIDENCE, CONVERT, CORREL, COS, COSH, COT, COTH, COUNT, COUNTA, COUNTBLANK, COUNTIF, COUNTIFS, COUPDAYS, COVAR, COVARIANCE, COVARIANCEP, COVARIANCES, CRITBINOM, CSC, CSCH, CUMIPMT, CUMPRINC, DATE, DATEDIF, DATEVALUE, DAVERAGE, DAY, DAYS, DAYS360, DB, DCOUNT, DCOUNTA, DDB, DEC2BIN, DEC2HEX, DEC2OCT, DECIMAL, DEGREES, DELTA, DEVSQ, DGET, DISC, DMAX, DMIN, DOLLAR, DOLLARDE, DOLLARFR, DPRODUCT, DROP, DSTDEV, DSTDEVP, DSUM, DVAR, DVARP, EDATE, EFFECT, EOMONTH, ERF, ERFC, ERFCPRECISE, ERFPRECISE, ERROR, EVEN, EXACT, EXP, EXPAND, EXPON, EXPONDIST, F, FACT, FACTDOUBLE, FALSE, FDIST, FDISTRT, FIND, FINV, FINVRT, FISHER, FISHERINV, FIXED, FLOOR, FLOORMATH, FLOORPRECISE, FORECAST, FREQUENCY, FTEST, FV, FVSCHEDULE, GAMMA, GAMMADIST, GAMMAINV, GAMMALN, GAMMALNPRECISE, GAUSS, GCD, GEOMEAN, GESTEP, GROWTH, HARMEAN, HEX2BIN, HEX2DEC, HEX2OCT, HLOOKUP, HOUR, HSTACK, HYPGEOM, HYPGEOMDIST, IF, IFERROR, IFNA, IFS, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN, INDEX, INT, INTERCEPT, IPMT, IRR, ISBLANK, ISERR, ISERROR, ISEVEN, ISLOGICAL, ISNA, ISNONTEXT, ISNUMBER, ISO, ISODD, ISOWEEKNUM, ISPMT, ISTEXT, KURT, LARGE, LCM, LEFT, LEN, LINEST, LN, LOG, LOG10, LOGEST, LOGINV, LOGNORM, LOGNORMDIST, LOGNORMINV, LOOKUP, LOWER, MATCH, MAX, MAXA, MAXIFS, MEDIAN, MID, MIN, MINA, MINIFS, MINUTE, MIRR, MMULT, MOD, MODE, MODEMULT, MODESNGL, MONTH, MROUND, MULTINOMIAL, MUNIT, N, NA, NEGBINOM, NEGBINOMDIST, NETWORKDAYS, NETWORKDAYSINTL, NOMINAL, NORM, NORMDIST, NORMINV, NORMSDIST, NORMSINV, NOT, NOW, NPER, NPV, NUMBERVALUE, OCT2BIN, OCT2DEC, OCT2HEX, ODD, OR, PDURATION, PEARSON, PERCENTILE, PERCENTILEEXC, PERCENTILEINC, PERCENTRANK, PERCENTRANKEXC, PERCENTRANKINC, PERMUT, PERMUTATIONA, PHI, PI, PMT, POISSON, POISSONDIST, POWER, PPMT, PRICEDISC, PROB, PRODUCT, PROPER, PV, QUARTILE, QUARTILEEXC, QUARTILEINC, QUOTIENT, RADIANS, RAND, RANDBETWEEN, RANK, RANKAVG, RANKEQ, RATE, REPLACE, REPT, RIGHT, ROMAN, ROUND, ROUNDDOWN, ROUNDUP, ROW, ROWS, RRI, RSQ, SEARCH, SEC, SECH, SECOND, SERIESSUM, SIGN, SIN, SINH, SKEW, SKEWP, SLN, SLOPE, SMALL, SORT, SQRT, SQRTPI, STANDARDIZE, STDEV, STDEVA, STDEVP, STDEVPA, STDEVS, STEYX, SUBSTITUTE, SUBTOTAL, SUM, SUMIF, SUMIFS, SUMPRODUCT, SUMSQ, SUMX2MY2, SUMX2PY2, SUMXMY2, SWITCH, SYD, T, TAN, TANH, TBILLEQ, TBILLPRICE, TBILLYIELD, TDIST, TDISTRT, TEXT, TEXTJOIN, TIME, TIMEVALUE, TINV, TODAY, TRANSPOSE, TREND, TRIM, TRIMMEAN, TRUE, TRUNC, TTEST, TYPE, UNICHAR, UNICODE, UNIQUE, UPPER, VALUE, VAR, VARA, VARP, VARPA, VARS, VLOOKUP, VSTACK, WEEKDAY, WEEKNUM, WEIBULL, WEIBULLDIST, WORKDAY, WORKDAYINTL, XIRR, XNPV, XOR, YEAR, YEARFRAC, Z, ZTEST, utils };\n","{\"ABS\":{\"category\":\"math\",\"formulajs\":true},\"ACCRINT\":{\"category\":\"financial\",\"formulajs\":true},\"ACCRINTM\":{\"category\":\"financial\",\"formulajs\":false},\"ACOS\":{\"category\":\"math\",\"formulajs\":true},\"ACOSH\":{\"category\":\"math\",\"formulajs\":true},\"ACOT\":{\"category\":\"math\",\"formulajs\":true},\"ACOTH\":{\"category\":\"math\",\"formulajs\":true},\"AGGREGATE\":{\"category\":\"math\",\"formulajs\":true},\"ADDRESS\":{\"category\":\"lookup\",\"formulajs\":false},\"AMORDEGRC\":{\"category\":\"financial\",\"formulajs\":false},\"AMORLINC\":{\"category\":\"financial\",\"formulajs\":false},\"AND\":{\"category\":\"logical\",\"formulajs\":true},\"ARABIC\":{\"category\":\"math\",\"formulajs\":true},\"AREAS\":{\"category\":\"lookup\",\"formulajs\":false},\"ARRAYTOTEXT\":{\"category\":\"text\",\"formulajs\":false},\"ASC\":{\"category\":\"text\",\"formulajs\":false},\"ASIN\":{\"category\":\"math\",\"formulajs\":true},\"ASINH\":{\"category\":\"math\",\"formulajs\":true},\"ATAN\":{\"category\":\"math\",\"formulajs\":true},\"ATAN2\":{\"category\":\"math\",\"formulajs\":true},\"ATANH\":{\"category\":\"math\",\"formulajs\":true},\"AVEDEV\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGE\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGEA\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGEIF\":{\"category\":\"statistical\",\"formulajs\":true},\"AVERAGEIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"BAHTTEXT\":{\"category\":\"text\",\"formulajs\":false},\"BASE\":{\"category\":\"math\",\"formulajs\":true},\"BESSELI\":{\"category\":\"engineering\",\"formulajs\":true},\"BESSELJ\":{\"category\":\"engineering\",\"formulajs\":true},\"BESSELK\":{\"category\":\"engineering\",\"formulajs\":true},\"BESSELY\":{\"category\":\"engineering\",\"formulajs\":true},\"BETADIST\":{\"category\":\"statistical\",\"formulajs\":true},\"BETAINV\":{\"category\":\"statistical\",\"formulajs\":true},\"BIN2DEC\":{\"category\":\"engineering\",\"formulajs\":true},\"BIN2HEX\":{\"category\":\"engineering\",\"formulajs\":true},\"BIN2OCT\":{\"category\":\"engineering\",\"formulajs\":true},\"BINOMDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"BINOMDISTRANGE\":{\"category\":\"statistical\",\"formulajs\":true},\"BINOMINV\":{\"category\":\"statistical\",\"formulajs\":true},\"BITAND\":{\"category\":\"engineering\",\"formulajs\":true},\"BITLSHIFT\":{\"category\":\"engineering\",\"formulajs\":true},\"BITOR\":{\"category\":\"engineering\",\"formulajs\":true},\"BITRSHIFT\":{\"category\":\"engineering\",\"formulajs\":true},\"BITXOR\":{\"category\":\"engineering\",\"formulajs\":true},\"BYCOL\":{\"category\":\"logical\",\"formulajs\":false},\"BYROW\":{\"category\":\"logical\",\"formulajs\":false},\"CEILING\":{\"category\":\"compatibility\",\"formulajs\":true},\"CEILINGMATH\":{\"category\":\"math\",\"formulajs\":true},\"CEILINGPRECISE\":{\"category\":\"math\",\"formulajs\":true},\"CELL\":{\"category\":\"information\",\"formulajs\":false},\"CHAR\":{\"category\":\"text\",\"formulajs\":true},\"CHIDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"CHIINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"CHITEST\":{\"category\":\"compatibility\",\"formulajs\":true},\"CHISQDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQDISTRT\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQINV\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQINVRT\":{\"category\":\"statistical\",\"formulajs\":true},\"CHISQTEST\":{\"category\":\"statistical\",\"formulajs\":true},\"CHOOSE\":{\"category\":\"lookup\",\"formulajs\":true},\"CHOOSECOLS\":{\"category\":\"lookup\",\"formulajs\":false},\"CHOOSEROWS\":{\"category\":\"lookup\",\"formulajs\":false},\"CLEAN\":{\"category\":\"text\",\"formulajs\":true},\"CODE\":{\"category\":\"text\",\"formulajs\":true},\"COLUMN\":{\"category\":\"lookup\",\"formulajs\":true},\"COLUMNS\":{\"category\":\"lookup\",\"formulajs\":true},\"COMBIN\":{\"category\":\"math\",\"formulajs\":true},\"COMBINA\":{\"category\":\"math\",\"formulajs\":true},\"COMPLEX\":{\"category\":\"engineering\",\"formulajs\":true},\"CONCAT\":{\"category\":\"text\",\"formulajs\":true},\"CONCATENATE\":{\"category\":\"text\",\"formulajs\":true},\"CONFIDENCE\":{\"category\":\"compatibility\",\"formulajs\":false},\"CONFIDENCENORM\":{\"category\":\"statistical\",\"formulajs\":true},\"CONFIDENCET\":{\"category\":\"statistical\",\"formulajs\":true},\"CONVERT\":{\"category\":\"engineering\",\"formulajs\":true},\"CORREL\":{\"category\":\"statistical\",\"formulajs\":true},\"COS\":{\"category\":\"math\",\"formulajs\":true},\"COSH\":{\"category\":\"math\",\"formulajs\":true},\"COT\":{\"category\":\"math\",\"formulajs\":true},\"COTH\":{\"category\":\"math\",\"formulajs\":true},\"COUNT\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTA\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTBLANK\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTIF\":{\"category\":\"statistical\",\"formulajs\":true},\"COUNTIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"COUPDAYBS\":{\"category\":\"financial\",\"formulajs\":false},\"COUPDAYS\":{\"category\":\"financial\",\"formulajs\":true},\"COUPDAYSNC\":{\"category\":\"financial\",\"formulajs\":false},\"COUPNCD\":{\"category\":\"financial\",\"formulajs\":false},\"COUPNUM\":{\"category\":\"financial\",\"formulajs\":false},\"COUPPCD\":{\"category\":\"financial\",\"formulajs\":false},\"COVAR\":{\"category\":\"compatibility\",\"formulajs\":true},\"COVARIANCEP\":{\"category\":\"statistical\",\"formulajs\":true},\"COVARIANCES\":{\"category\":\"statistical\",\"formulajs\":true},\"CRITBINOM\":{\"category\":\"compatibility\",\"formulajs\":true},\"CSC\":{\"category\":\"math\",\"formulajs\":true},\"CSCH\":{\"category\":\"math\",\"formulajs\":true},\"CUMIPMT\":{\"category\":\"financial\",\"formulajs\":true},\"CUMPRINC\":{\"category\":\"financial\",\"formulajs\":true},\"DATE\":{\"category\":\"date\",\"formulajs\":true},\"DATEDIF\":{\"category\":\"date\",\"formulajs\":true},\"DATEVALUE\":{\"category\":\"date\",\"formulajs\":true},\"DAVERAGE\":{\"category\":\"database\",\"formulajs\":true},\"DAY\":{\"category\":\"date\",\"formulajs\":true},\"DAYS\":{\"category\":\"date\",\"formulajs\":true},\"DAYS360\":{\"category\":\"date\",\"formulajs\":true},\"DB\":{\"category\":\"financial\",\"formulajs\":true},\"DBCS\":{\"category\":\"text\",\"formulajs\":false},\"DCOUNT\":{\"category\":\"database\",\"formulajs\":true},\"DCOUNTA\":{\"category\":\"database\",\"formulajs\":true},\"DDB\":{\"category\":\"financial\",\"formulajs\":true},\"DEC2BIN\":{\"category\":\"engineering\",\"formulajs\":true},\"DEC2HEX\":{\"category\":\"engineering\",\"formulajs\":true},\"DEC2OCT\":{\"category\":\"engineering\",\"formulajs\":true},\"DECIMAL\":{\"category\":\"math\",\"formulajs\":true},\"DEGREES\":{\"category\":\"math\",\"formulajs\":true},\"DELTA\":{\"category\":\"engineering\",\"formulajs\":true},\"DETECTLANGUAGE\":{\"category\":\"text\",\"formulajs\":false},\"DEVSQ\":{\"category\":\"statistical\",\"formulajs\":true},\"DGET\":{\"category\":\"database\",\"formulajs\":true},\"DISC\":{\"category\":\"financial\",\"formulajs\":true},\"DMAX\":{\"category\":\"database\",\"formulajs\":true},\"DMIN\":{\"category\":\"database\",\"formulajs\":true},\"DOLLAR\":{\"category\":\"text\",\"formulajs\":true},\"DOLLARDE\":{\"category\":\"financial\",\"formulajs\":true},\"DOLLARFR\":{\"category\":\"financial\",\"formulajs\":true},\"DPRODUCT\":{\"category\":\"database\",\"formulajs\":true},\"DROP\":{\"category\":\"lookup\",\"formulajs\":false},\"DSTDEV\":{\"category\":\"database\",\"formulajs\":true},\"DSTDEVP\":{\"category\":\"database\",\"formulajs\":true},\"DSUM\":{\"category\":\"database\",\"formulajs\":true},\"DURATION\":{\"category\":\"financial\",\"formulajs\":false},\"DVAR\":{\"category\":\"database\",\"formulajs\":true},\"DVARP\":{\"category\":\"database\",\"formulajs\":true},\"EDATE\":{\"category\":\"date\",\"formulajs\":true},\"EFFECT\":{\"category\":\"financial\",\"formulajs\":true},\"EOMONTH\":{\"category\":\"date\",\"formulajs\":true},\"ERF\":{\"category\":\"engineering\",\"formulajs\":true},\"ERFPRECISE\":{\"category\":\"engineering\",\"formulajs\":false},\"ERFC\":{\"category\":\"engineering\",\"formulajs\":true},\"ERFCPRECISE\":{\"category\":\"engineering\",\"formulajs\":false},\"ERRORTYPE\":{\"category\":\"information\",\"formulajs\":true},\"EVEN\":{\"category\":\"math\",\"formulajs\":true},\"EXACT\":{\"category\":\"text\",\"formulajs\":true},\"EXP\":{\"category\":\"math\",\"formulajs\":true},\"EXPAND\":{\"category\":\"lookup\",\"formulajs\":false},\"EXPONDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"FACT\":{\"category\":\"math\",\"formulajs\":true},\"FACTDOUBLE\":{\"category\":\"math\",\"formulajs\":true},\"FALSE\":{\"category\":\"logical\",\"formulajs\":true},\"FDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"FDISTRT\":{\"category\":\"statistical\",\"formulajs\":true},\"FILTER\":{\"category\":\"lookup\",\"formulajs\":false},\"FIND\":{\"category\":\"text\",\"formulajs\":true},\"FINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"FINVRT\":{\"category\":\"statistical\",\"formulajs\":true},\"FISHER\":{\"category\":\"statistical\",\"formulajs\":true},\"FISHERINV\":{\"category\":\"statistical\",\"formulajs\":true},\"FIXED\":{\"category\":\"text\",\"formulajs\":true},\"FLOOR\":{\"category\":\"compatibility\",\"formulajs\":true},\"FLOORMATH\":{\"category\":\"math\",\"formulajs\":true},\"FLOORPRECISE\":{\"category\":\"math\",\"formulajs\":true},\"FORECAST\":{\"category\":\"statistical\",\"formulajs\":true},\"FORECASTETS\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTETSCONFINT\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTETSSEASONALITY\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTETSSTAT\":{\"category\":\"statistical\",\"formulajs\":false},\"FORECASTLINEAR\":{\"category\":\"statistical\",\"formulajs\":false},\"FORMULATEXT\":{\"category\":\"lookup\",\"formulajs\":false},\"FREQUENCY\":{\"category\":\"statistical\",\"formulajs\":true},\"FTEST\":{\"category\":\"compatibility\",\"formulajs\":true},\"FV\":{\"category\":\"financial\",\"formulajs\":true},\"FVSCHEDULE\":{\"category\":\"financial\",\"formulajs\":true},\"GAMMA\":{\"category\":\"statistical\",\"formulajs\":true},\"GAMMADIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"GAMMAINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"GAMMALN\":{\"category\":\"statistical\",\"formulajs\":true},\"GAMMALNPRECISE\":{\"category\":\"statistical\",\"formulajs\":true},\"GAUSS\":{\"category\":\"statistical\",\"formulajs\":true},\"GCD\":{\"category\":\"math\",\"formulajs\":true},\"GEOMEAN\":{\"category\":\"statistical\",\"formulajs\":true},\"GESTEP\":{\"category\":\"engineering\",\"formulajs\":true},\"GETPIVOTDATA\":{\"category\":\"lookup\",\"formulajs\":false},\"GROUPBY\":{\"category\":\"lookup\",\"formulajs\":false},\"GROWTH\":{\"category\":\"statistical\",\"formulajs\":true},\"HARMEAN\":{\"category\":\"statistical\",\"formulajs\":true},\"HEX2BIN\":{\"category\":\"engineering\",\"formulajs\":true},\"HEX2DEC\":{\"category\":\"engineering\",\"formulajs\":true},\"HEX2OCT\":{\"category\":\"engineering\",\"formulajs\":true},\"HLOOKUP\":{\"category\":\"lookup\",\"formulajs\":true},\"HOUR\":{\"category\":\"date\",\"formulajs\":true},\"HSTACK\":{\"category\":\"lookup\",\"formulajs\":false},\"HYPERLINK\":{\"category\":\"lookup\",\"formulajs\":false},\"HYPGEOMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"IF\":{\"category\":\"logical\",\"formulajs\":true},\"IFERROR\":{\"category\":\"logical\",\"formulajs\":true},\"IFNA\":{\"category\":\"logical\",\"formulajs\":true},\"IFS\":{\"category\":\"logical\",\"formulajs\":true},\"IMABS\":{\"category\":\"engineering\",\"formulajs\":true},\"IMAGE\":{\"category\":\"lookup\",\"formulajs\":false},\"IMAGINARY\":{\"category\":\"engineering\",\"formulajs\":true},\"IMARGUMENT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCONJUGATE\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCOS\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCOSH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCOT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCSC\":{\"category\":\"engineering\",\"formulajs\":true},\"IMCSCH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMDIV\":{\"category\":\"engineering\",\"formulajs\":true},\"IMEXP\":{\"category\":\"engineering\",\"formulajs\":true},\"IMLN\":{\"category\":\"engineering\",\"formulajs\":true},\"IMLOG10\":{\"category\":\"engineering\",\"formulajs\":true},\"IMLOG2\":{\"category\":\"engineering\",\"formulajs\":true},\"IMPOWER\":{\"category\":\"engineering\",\"formulajs\":true},\"IMPRODUCT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMREAL\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSEC\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSECH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSIN\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSINH\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSQRT\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSUB\":{\"category\":\"engineering\",\"formulajs\":true},\"IMSUM\":{\"category\":\"engineering\",\"formulajs\":true},\"IMTAN\":{\"category\":\"engineering\",\"formulajs\":true},\"INDEX\":{\"category\":\"lookup\",\"formulajs\":true},\"INDIRECT\":{\"category\":\"lookup\",\"formulajs\":false},\"INFO\":{\"category\":\"information\",\"formulajs\":false},\"INT\":{\"category\":\"math\",\"formulajs\":true},\"INTERCEPT\":{\"category\":\"statistical\",\"formulajs\":true},\"INTRATE\":{\"category\":\"financial\",\"formulajs\":false},\"IPMT\":{\"category\":\"financial\",\"formulajs\":true},\"IRR\":{\"category\":\"financial\",\"formulajs\":true},\"ISBLANK\":{\"category\":\"information\",\"formulajs\":true},\"ISERR\":{\"category\":\"information\",\"formulajs\":true},\"ISERROR\":{\"category\":\"information\",\"formulajs\":true},\"ISEVEN\":{\"category\":\"information\",\"formulajs\":true},\"ISFORMULA\":{\"category\":\"information\",\"formulajs\":false},\"ISLOGICAL\":{\"category\":\"information\",\"formulajs\":true},\"ISNA\":{\"category\":\"information\",\"formulajs\":true},\"ISNONTEXT\":{\"category\":\"information\",\"formulajs\":true},\"ISNUMBER\":{\"category\":\"information\",\"formulajs\":true},\"ISODD\":{\"category\":\"information\",\"formulajs\":true},\"ISOMITTED\":{\"category\":\"information\",\"formulajs\":false},\"ISREF\":{\"category\":\"information\",\"formulajs\":false},\"ISTEXT\":{\"category\":\"information\",\"formulajs\":true},\"ISOCEILING\":{\"category\":\"math\",\"formulajs\":true},\"ISOWEEKNUM\":{\"category\":\"date\",\"formulajs\":true},\"ISPMT\":{\"category\":\"financial\",\"formulajs\":true},\"JIS\":{\"category\":\"text\",\"formulajs\":false},\"KURT\":{\"category\":\"statistical\",\"formulajs\":true},\"LAMBDA\":{\"category\":\"logical\",\"formulajs\":false},\"LARGE\":{\"category\":\"statistical\",\"formulajs\":true},\"LCM\":{\"category\":\"math\",\"formulajs\":true},\"LEFT\":{\"category\":\"text\",\"formulajs\":true},\"LEN\":{\"category\":\"text\",\"formulajs\":true},\"LET\":{\"category\":\"logical\",\"formulajs\":false},\"LINEST\":{\"category\":\"statistical\",\"formulajs\":true},\"LN\":{\"category\":\"math\",\"formulajs\":true},\"LOG\":{\"category\":\"math\",\"formulajs\":true},\"LOG10\":{\"category\":\"math\",\"formulajs\":true},\"LOGEST\":{\"category\":\"statistical\",\"formulajs\":true},\"LOGINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"LOGNORMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"LOGNORMINV\":{\"category\":\"statistical\",\"formulajs\":true},\"LOOKUP\":{\"category\":\"lookup\",\"formulajs\":true},\"LOWER\":{\"category\":\"text\",\"formulajs\":true},\"MAKEARRAY\":{\"category\":\"logical\",\"formulajs\":false},\"MAP\":{\"category\":\"logical\",\"formulajs\":false},\"MATCH\":{\"category\":\"lookup\",\"formulajs\":true},\"MAX\":{\"category\":\"statistical\",\"formulajs\":true},\"MAXA\":{\"category\":\"statistical\",\"formulajs\":true},\"MAXIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"MDETERM\":{\"category\":\"math\",\"formulajs\":false},\"MDURATION\":{\"category\":\"financial\",\"formulajs\":false},\"MEDIAN\":{\"category\":\"statistical\",\"formulajs\":true},\"MID\":{\"category\":\"text\",\"formulajs\":true},\"MIN\":{\"category\":\"statistical\",\"formulajs\":true},\"MINIFS\":{\"category\":\"statistical\",\"formulajs\":true},\"MINA\":{\"category\":\"statistical\",\"formulajs\":true},\"MINUTE\":{\"category\":\"date\",\"formulajs\":true},\"MINVERSE\":{\"category\":\"math\",\"formulajs\":false},\"MIRR\":{\"category\":\"financial\",\"formulajs\":true},\"MMULT\":{\"category\":\"math\",\"formulajs\":true},\"MOD\":{\"category\":\"math\",\"formulajs\":true},\"MODE\":{\"category\":\"compatibility\",\"formulajs\":false},\"MODEMULT\":{\"category\":\"statistical\",\"formulajs\":true},\"MODESNGL\":{\"category\":\"statistical\",\"formulajs\":true},\"MONTH\":{\"category\":\"date\",\"formulajs\":true},\"MROUND\":{\"category\":\"math\",\"formulajs\":true},\"MULTINOMIAL\":{\"category\":\"math\",\"formulajs\":true},\"MUNIT\":{\"category\":\"math\",\"formulajs\":true},\"N\":{\"category\":\"information\",\"formulajs\":true},\"NA\":{\"category\":\"information\",\"formulajs\":true},\"NEGBINOMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"NETWORKDAYS\":{\"category\":\"date\",\"formulajs\":true},\"NETWORKDAYSINTL\":{\"category\":\"date\",\"formulajs\":true},\"NOMINAL\":{\"category\":\"financial\",\"formulajs\":true},\"NORMDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"NORMINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"NORMSDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"NORMSINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"NOT\":{\"category\":\"logical\",\"formulajs\":true},\"NOW\":{\"category\":\"date\",\"formulajs\":true},\"NPER\":{\"category\":\"financial\",\"formulajs\":true},\"NPV\":{\"category\":\"financial\",\"formulajs\":true},\"NUMBERVALUE\":{\"category\":\"text\",\"formulajs\":true},\"OCT2BIN\":{\"category\":\"engineering\",\"formulajs\":true},\"OCT2DEC\":{\"category\":\"engineering\",\"formulajs\":true},\"OCT2HEX\":{\"category\":\"engineering\",\"formulajs\":true},\"ODD\":{\"category\":\"math\",\"formulajs\":true},\"ODDFPRICE\":{\"category\":\"financial\",\"formulajs\":false},\"ODDFYIELD\":{\"category\":\"financial\",\"formulajs\":false},\"ODDLPRICE\":{\"category\":\"financial\",\"formulajs\":false},\"ODDLYIELD\":{\"category\":\"financial\",\"formulajs\":false},\"OFFSET\":{\"category\":\"lookup\",\"formulajs\":false},\"OR\":{\"category\":\"logical\",\"formulajs\":true},\"PDURATION\":{\"category\":\"financial\",\"formulajs\":true},\"PEARSON\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTILEEXC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTILEINC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTILE\":{\"category\":\"compatibility\",\"formulajs\":false},\"PERCENTOF\":{\"category\":\"math\",\"formulajs\":false},\"PERCENTRANKEXC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTRANKINC\":{\"category\":\"statistical\",\"formulajs\":true},\"PERCENTRANK\":{\"category\":\"compatibility\",\"formulajs\":false},\"PERMUT\":{\"category\":\"statistical\",\"formulajs\":true},\"PERMUTATIONA\":{\"category\":\"statistical\",\"formulajs\":true},\"PHI\":{\"category\":\"statistical\",\"formulajs\":true},\"PHONETIC\":{\"category\":\"text\",\"formulajs\":false},\"PI\":{\"category\":\"math\",\"formulajs\":true},\"PIVOTBY\":{\"category\":\"lookup\",\"formulajs\":false},\"PMT\":{\"category\":\"financial\",\"formulajs\":true},\"POISSONDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"POISSON\":{\"category\":\"compatibility\",\"formulajs\":false},\"POWER\":{\"category\":\"math\",\"formulajs\":true},\"PPMT\":{\"category\":\"financial\",\"formulajs\":true},\"PRICE\":{\"category\":\"financial\",\"formulajs\":false},\"PRICEDISC\":{\"category\":\"financial\",\"formulajs\":true},\"PRICEMAT\":{\"category\":\"financial\",\"formulajs\":false},\"PROB\":{\"category\":\"statistical\",\"formulajs\":true},\"PRODUCT\":{\"category\":\"math\",\"formulajs\":true},\"PROPER\":{\"category\":\"text\",\"formulajs\":true},\"PV\":{\"category\":\"financial\",\"formulajs\":true},\"QUARTILE\":{\"category\":\"compatibility\",\"formulajs\":false},\"QUARTILEEXC\":{\"category\":\"statistical\",\"formulajs\":true},\"QUARTILEINC\":{\"category\":\"statistical\",\"formulajs\":true},\"QUOTIENT\":{\"category\":\"math\",\"formulajs\":true},\"RADIANS\":{\"category\":\"math\",\"formulajs\":true},\"RAND\":{\"category\":\"math\",\"formulajs\":true},\"RANDARRAY\":{\"category\":\"math\",\"formulajs\":false},\"RANDBETWEEN\":{\"category\":\"math\",\"formulajs\":true},\"RANKAVG\":{\"category\":\"statistical\",\"formulajs\":true},\"RANKEQ\":{\"category\":\"statistical\",\"formulajs\":true},\"RANK\":{\"category\":\"compatibility\",\"formulajs\":false},\"RATE\":{\"category\":\"financial\",\"formulajs\":true},\"RECEIVED\":{\"category\":\"financial\",\"formulajs\":false},\"REDUCE\":{\"category\":\"logical\",\"formulajs\":false},\"REGEXEXTRACT\":{\"category\":\"text\",\"formulajs\":false},\"REGEXREPLACE\":{\"category\":\"text\",\"formulajs\":false},\"REGEXTEST\":{\"category\":\"text\",\"formulajs\":false},\"REPLACE\":{\"category\":\"text\",\"formulajs\":true},\"REPT\":{\"category\":\"text\",\"formulajs\":true},\"RIGHT\":{\"category\":\"text\",\"formulajs\":true},\"ROMAN\":{\"category\":\"math\",\"formulajs\":true},\"ROUND\":{\"category\":\"math\",\"formulajs\":true},\"ROUNDDOWN\":{\"category\":\"math\",\"formulajs\":true},\"ROUNDUP\":{\"category\":\"math\",\"formulajs\":true},\"ROW\":{\"category\":\"lookup\",\"formulajs\":true},\"ROWS\":{\"category\":\"lookup\",\"formulajs\":true},\"RRI\":{\"category\":\"financial\",\"formulajs\":true},\"RSQ\":{\"category\":\"statistical\",\"formulajs\":true},\"RTD\":{\"category\":\"lookup\",\"formulajs\":false},\"SCAN\":{\"category\":\"logical\",\"formulajs\":false},\"SEARCH\":{\"category\":\"text\",\"formulajs\":true},\"SEC\":{\"category\":\"math\",\"formulajs\":true},\"SECH\":{\"category\":\"math\",\"formulajs\":true},\"SECOND\":{\"category\":\"date\",\"formulajs\":true},\"SEQUENCE\":{\"category\":\"math\",\"formulajs\":false},\"SERIESSUM\":{\"category\":\"math\",\"formulajs\":true},\"SHEET\":{\"category\":\"information\",\"formulajs\":false},\"SHEETS\":{\"category\":\"information\",\"formulajs\":false},\"SIGN\":{\"category\":\"math\",\"formulajs\":true},\"SIN\":{\"category\":\"math\",\"formulajs\":true},\"SINH\":{\"category\":\"math\",\"formulajs\":true},\"SKEW\":{\"category\":\"statistical\",\"formulajs\":true},\"SKEWP\":{\"category\":\"statistical\",\"formulajs\":true},\"SLN\":{\"category\":\"financial\",\"formulajs\":true},\"SLOPE\":{\"category\":\"statistical\",\"formulajs\":true},\"SMALL\":{\"category\":\"statistical\",\"formulajs\":true},\"SORT\":{\"category\":\"lookup\",\"formulajs\":true},\"SORTBY\":{\"category\":\"lookup\",\"formulajs\":false},\"SQRT\":{\"category\":\"math\",\"formulajs\":true},\"SQRTPI\":{\"category\":\"math\",\"formulajs\":true},\"STANDARDIZE\":{\"category\":\"statistical\",\"formulajs\":true},\"STOCKHISTORY\":{\"category\":\"information\",\"formulajs\":false},\"STDEV\":{\"category\":\"compatibility\",\"formulajs\":false},\"STDEVP\":{\"category\":\"compatibility\",\"formulajs\":true},\"STDEVS\":{\"category\":\"statistical\",\"formulajs\":true},\"STDEVA\":{\"category\":\"statistical\",\"formulajs\":true},\"STDEVPA\":{\"category\":\"statistical\",\"formulajs\":true},\"STEYX\":{\"category\":\"statistical\",\"formulajs\":true},\"SUBSTITUTE\":{\"category\":\"text\",\"formulajs\":true},\"SUBTOTAL\":{\"category\":\"math\",\"formulajs\":true},\"SUM\":{\"category\":\"math\",\"formulajs\":true},\"SUMIF\":{\"category\":\"math\",\"formulajs\":true},\"SUMIFS\":{\"category\":\"math\",\"formulajs\":true},\"SUMPRODUCT\":{\"category\":\"math\",\"formulajs\":true},\"SUMSQ\":{\"category\":\"math\",\"formulajs\":true},\"SUMX2MY2\":{\"category\":\"math\",\"formulajs\":true},\"SUMX2PY2\":{\"category\":\"math\",\"formulajs\":true},\"SUMXMY2\":{\"category\":\"math\",\"formulajs\":true},\"SWITCH\":{\"category\":\"logical\",\"formulajs\":true},\"SYD\":{\"category\":\"financial\",\"formulajs\":true},\"T\":{\"category\":\"text\",\"formulajs\":true},\"TAN\":{\"category\":\"math\",\"formulajs\":true},\"TANH\":{\"category\":\"math\",\"formulajs\":true},\"TAKE\":{\"category\":\"lookup\",\"formulajs\":false},\"TBILLEQ\":{\"category\":\"financial\",\"formulajs\":true},\"TBILLPRICE\":{\"category\":\"financial\",\"formulajs\":true},\"TBILLYIELD\":{\"category\":\"financial\",\"formulajs\":true},\"TDIST\":{\"category\":\"compatibility\",\"formulajs\":true},\"TDIST2T\":{\"category\":\"statistical\",\"formulajs\":true},\"TDISTRT\":{\"category\":\"statistical\",\"formulajs\":true},\"TEXT\":{\"category\":\"text\",\"formulajs\":true},\"TEXTAFTER\":{\"category\":\"text\",\"formulajs\":false},\"TEXTBEFORE\":{\"category\":\"text\",\"formulajs\":false},\"TEXTJOIN\":{\"category\":\"text\",\"formulajs\":true},\"TEXTSPLIT\":{\"category\":\"text\",\"formulajs\":false},\"TIME\":{\"category\":\"date\",\"formulajs\":true},\"TIMEVALUE\":{\"category\":\"date\",\"formulajs\":true},\"TINV\":{\"category\":\"compatibility\",\"formulajs\":true},\"TINV2T\":{\"category\":\"statistical\",\"formulajs\":true},\"TOCOL\":{\"category\":\"lookup\",\"formulajs\":false},\"TOROW\":{\"category\":\"lookup\",\"formulajs\":false},\"TODAY\":{\"category\":\"date\",\"formulajs\":true},\"TRANSLATE\":{\"category\":\"text\",\"formulajs\":false},\"TRANSPOSE\":{\"category\":\"lookup\",\"formulajs\":true},\"TREND\":{\"category\":\"statistical\",\"formulajs\":true},\"TRIM\":{\"category\":\"text\",\"formulajs\":true},\"TRIMMEAN\":{\"category\":\"statistical\",\"formulajs\":true},\"TRIMRANGE\":{\"category\":\"lookup\",\"formulajs\":false},\"TRUE\":{\"category\":\"logical\",\"formulajs\":true},\"TRUNC\":{\"category\":\"math\",\"formulajs\":true},\"TTEST\":{\"category\":\"compatibility\",\"formulajs\":true},\"TYPE\":{\"category\":\"information\",\"formulajs\":true},\"UNICHAR\":{\"category\":\"text\",\"formulajs\":true},\"UNICODE\":{\"category\":\"text\",\"formulajs\":true},\"UNIQUE\":{\"category\":\"lookup\",\"formulajs\":true},\"UPPER\":{\"category\":\"text\",\"formulajs\":true},\"VALUE\":{\"category\":\"text\",\"formulajs\":true},\"VALUETOTEXT\":{\"category\":\"text\",\"formulajs\":false},\"VAR\":{\"category\":\"compatibility\",\"formulajs\":false},\"VARP\":{\"category\":\"compatibility\",\"formulajs\":true},\"VARS\":{\"category\":\"statistical\",\"formulajs\":true},\"VARA\":{\"category\":\"statistical\",\"formulajs\":true},\"VARPA\":{\"category\":\"statistical\",\"formulajs\":true},\"VDB\":{\"category\":\"financial\",\"formulajs\":false},\"VLOOKUP\":{\"category\":\"lookup\",\"formulajs\":true},\"WEEKDAY\":{\"category\":\"date\",\"formulajs\":true},\"WEEKNUM\":{\"category\":\"date\",\"formulajs\":true},\"WEIBULL\":{\"category\":\"compatibility\",\"formulajs\":false},\"WEIBULLDIST\":{\"category\":\"statistical\",\"formulajs\":true},\"WORKDAY\":{\"category\":\"date\",\"formulajs\":true},\"WORKDAYINTL\":{\"category\":\"date\",\"formulajs\":true},\"XIRR\":{\"category\":\"financial\",\"formulajs\":true},\"XLOOKUP\":{\"category\":\"lookup\",\"formulajs\":false},\"XMATCH\":{\"category\":\"lookup\",\"formulajs\":false},\"XNPV\":{\"category\":\"financial\",\"formulajs\":true},\"XOR\":{\"category\":\"logical\",\"formulajs\":true},\"YEAR\":{\"category\":\"date\",\"formulajs\":true},\"YEARFRAC\":{\"category\":\"date\",\"formulajs\":true},\"YIELD\":{\"category\":\"financial\",\"formulajs\":false},\"YIELDDISC\":{\"category\":\"financial\",\"formulajs\":false},\"YIELDMAT\":{\"category\":\"financial\",\"formulajs\":false},\"ZTEST\":{\"category\":\"compatibility\",\"formulajs\":true}}","/**\n * UI 元数据覆盖(可选)。\n * 函数全集来自 @formulajs/formulajs + formulajs-catalog.json(formulajs.info 分类)。\n * 此处只维护:常用 featured、已接入 implemented、中文 label/hint/syntax。\n * 其余函数使用默认占位,后续可对照语雀 / Excel 文档逐步补充。\n */\nimport type { FormulaBuiltinEntry, FormulaCategoryId } from './types'\n\ntype MetaOverride = Partial<FormulaBuiltinEntry> & { name: string }\n\nexport const FORMULA_META_OVERRIDES: readonly MetaOverride[] = [\n {\n name: 'SUM',\n category: 'statistical',\n label: '求和',\n syntax: 'SUM(数值1, [数值2], …)',\n hint: '返回一组数值和/或单元格的总和。',\n example: 'SUM(A1:A10)',\n implemented: true,\n featured: true,\n },\n {\n name: 'AVERAGE',\n category: 'statistical',\n label: '平均值',\n syntax: 'AVERAGE(数值1, [数值2], …)',\n hint: '返回其参数的算术平均值。',\n example: 'AVERAGE(A1:A10)',\n implemented: true,\n featured: true,\n },\n {\n name: 'COUNT',\n category: 'statistical',\n label: '计数',\n syntax: 'COUNT(数值1, [数值2], …)',\n hint: '计算参数列表中数字的个数。',\n example: 'COUNT(A1:A10)',\n implemented: true,\n featured: true,\n },\n {\n name: 'MAX',\n category: 'statistical',\n label: '最大值',\n syntax: 'MAX(数值1, [数值2], …)',\n hint: '返回参数列表中的最大值。',\n implemented: true,\n featured: true,\n },\n {\n name: 'MIN',\n category: 'statistical',\n label: '最小值',\n syntax: 'MIN(数值1, [数值2], …)',\n hint: '返回参数列表中的最小值。',\n implemented: true,\n featured: true,\n },\n {\n name: 'IF',\n category: 'logical',\n label: '条件',\n syntax: 'IF(条件, 真值, [假值])',\n hint: '判断是否满足某个条件,返回不同结果。',\n featured: true,\n },\n {\n name: 'AND',\n category: 'logical',\n label: '且',\n syntax: 'AND(逻辑1, [逻辑2], …)',\n hint: '所有参数为 TRUE 时返回 TRUE。',\n featured: true,\n },\n {\n name: 'OR',\n category: 'logical',\n label: '或',\n syntax: 'OR(逻辑1, [逻辑2], …)',\n hint: '任一参数为 TRUE 时返回 TRUE。',\n featured: true,\n },\n {\n name: 'ABS',\n category: 'math',\n label: '绝对值',\n syntax: 'ABS(数值)',\n hint: '返回数字的绝对值。',\n },\n {\n name: 'ROUND',\n category: 'math',\n label: '四舍五入',\n syntax: 'ROUND(数值, 位数)',\n hint: '按指定位数四舍五入。',\n },\n {\n name: 'VLOOKUP',\n category: 'lookup',\n label: '垂直查找',\n syntax: 'VLOOKUP(查找值, 表区域, 列序, [匹配])',\n hint: '在表首列查找并返回同行指定列。',\n },\n] as const\n\nexport function getMetaOverrideMap(): Map<string, MetaOverride> {\n return new Map(FORMULA_META_OVERRIDES.map((m) => [m.name, m]))\n}\n\nexport function defaultCategory(): FormulaCategoryId {\n return 'math'\n}\n","/**\n * 从 @formulajs/formulajs 导出 + formulajs.info 分类目录 合并为注册表。\n * 不引入平台自定义函数;UI 文案在 meta.ts 按需覆盖。\n */\nimport * as formulajs from '@formulajs/formulajs'\nimport type { FormulaBuiltinEntry, FormulaCategoryId } from './types'\nimport catalog from './formulajs-catalog.json'\nimport { defaultCategory, getMetaOverrideMap } from './meta'\n\ntype CatalogRow = { category: FormulaCategoryId; formulajs: boolean }\n\nconst catalogMap = catalog as Record<string, CatalogRow>\n\nfunction getFormulajsExportNames(): string[] {\n const lib = formulajs as Record<string, unknown>\n return Object.keys(lib)\n .filter((k) => /^[A-Z][A-Z0-9_]*$/.test(k) && typeof lib[k] === 'function')\n .sort()\n}\n\nfunction buildEntry(name: string): FormulaBuiltinEntry | null {\n if (!catalogMap[name]) return null\n const row = catalogMap[name]\n const override = getMetaOverrideMap().get(name)\n const category = override?.category ?? row.category ?? defaultCategory()\n return {\n name,\n category,\n label: override?.label ?? name,\n labelEn: override?.labelEn,\n syntax: override?.syntax ?? `${name}(…)`,\n hint:\n override?.hint ??\n 'Excel 兼容函数(@formulajs/formulajs)。说明待补充,可参考 formulajs.info。',\n description: override?.description,\n example: override?.example,\n seeAlso: override?.seeAlso,\n aliases: override?.aliases,\n implemented: override?.implemented ?? false,\n formulajs: row.formulajs,\n featured: override?.featured ?? false,\n }\n}\n\n/** 运行时注册表:仅包含 formulajs 包内存在的函数 */\nexport function buildFormulaBuiltinRegistry(): FormulaBuiltinEntry[] {\n const names = getFormulajsExportNames()\n const out: FormulaBuiltinEntry[] = []\n for (const name of names) {\n const entry = buildEntry(name)\n if (entry) out.push(entry)\n }\n return out\n}\n\nexport const FORMULA_BUILTIN_REGISTRY: readonly FormulaBuiltinEntry[] =\n buildFormulaBuiltinRegistry()\n","import type { FormulaCategoryId, FormulaCategoryMeta } from './types'\n\nexport const FORMULA_CATEGORIES: readonly FormulaCategoryMeta[] = [\n { id: 'math', label: '数学', labelEn: 'Math', formulajsCategory: 'Math and trigonometry' },\n { id: 'statistical', label: '统计', labelEn: 'Statistics', formulajsCategory: 'Statistical' },\n { id: 'financial', label: '财务', labelEn: 'Financial', formulajsCategory: 'Financial' },\n { id: 'engineering', label: '工程', labelEn: 'Engineering', formulajsCategory: 'Engineering' },\n { id: 'text', label: '文本', labelEn: 'Text', formulajsCategory: 'Text' },\n { id: 'logical', label: '逻辑', labelEn: 'Logical', formulajsCategory: 'Logical' },\n { id: 'date', label: '日期', labelEn: 'Date', formulajsCategory: 'Date and time' },\n { id: 'lookup', label: '查找', labelEn: 'Lookup', formulajsCategory: 'Lookup and reference' },\n { id: 'information', label: '信息', labelEn: 'Information', formulajsCategory: 'Information' },\n { id: 'database', label: '数据库', labelEn: 'Database', formulajsCategory: 'Database' },\n { id: 'compatibility', label: '兼容', labelEn: 'Compatibility', formulajsCategory: 'Compatibility' },\n] as const\n\nexport function getCategoryMeta(id: FormulaCategoryId): FormulaCategoryMeta | undefined {\n return FORMULA_CATEGORIES.find((c) => c.id === id)\n}\n\nexport function categoryLabel(id: FormulaCategoryId, locale: 'zh' | 'en' = 'zh'): string {\n const meta = getCategoryMeta(id)\n if (!meta) return id\n return locale === 'en' ? meta.labelEn : meta.label\n}\n","import type { FormulaCategoryId, FormulaBuiltinEntry } from './types'\nimport { FORMULA_BUILTIN_REGISTRY } from './buildRegistry'\nimport { FORMULA_CATEGORIES, categoryLabel, getCategoryMeta } from './categories'\n\nexport type { FormulaBuiltinEntry, FormulaCategoryId, FormulaCategoryMeta } from './types'\nexport { FORMULA_BUILTIN_REGISTRY } from './buildRegistry'\nexport { FORMULA_META_OVERRIDES } from './meta'\nexport { FORMULA_CATEGORIES, categoryLabel, getCategoryMeta } from './categories'\n\nconst _canonical = new Map<string, string>()\n\nfunction rebuildCanonical(): void {\n if (_canonical.size) return\n for (const b of FORMULA_BUILTIN_REGISTRY) {\n const upper = b.name.toUpperCase()\n _canonical.set(upper, upper)\n for (const a of b.aliases ?? []) {\n _canonical.set(a.toUpperCase(), upper)\n }\n }\n}\n\nexport function resolveBuiltinName(name: string): string | undefined {\n rebuildCanonical()\n return _canonical.get(name.toUpperCase())\n}\n\nexport function isRegisteredBuiltin(name: string): boolean {\n rebuildCanonical()\n return _canonical.has(name.toUpperCase())\n}\n\nexport function getBuiltinEntry(name: string): FormulaBuiltinEntry | undefined {\n const canonical = resolveBuiltinName(name)\n if (!canonical) return undefined\n return FORMULA_BUILTIN_REGISTRY.find((b) => b.name === canonical)\n}\n\nexport function getFeaturedBuiltins(): FormulaBuiltinEntry[] {\n return FORMULA_BUILTIN_REGISTRY.filter((b) => b.featured)\n}\n\nexport function getBuiltinsByCategory(category: FormulaCategoryId): FormulaBuiltinEntry[] {\n return FORMULA_BUILTIN_REGISTRY.filter((b) => b.category === category)\n}\n\nexport function getImplementedBuiltins(): FormulaBuiltinEntry[] {\n return FORMULA_BUILTIN_REGISTRY.filter((b) => b.implemented)\n}\n\nexport function getImplementedBuiltinNames(): string[] {\n return getImplementedBuiltins().map((b) => b.name)\n}\n\n/** 菜单用:有函数的分类(保持 FORMULA_CATEGORIES 顺序) */\nexport function getCategoriesWithBuiltins(): FormulaCategoryId[] {\n const ids = new Set<FormulaCategoryId>()\n for (const b of FORMULA_BUILTIN_REGISTRY) ids.add(b.category)\n return FORMULA_CATEGORIES.map((c) => c.id).filter((id) => ids.has(id))\n}\n\nexport function searchBuiltins(query: string): FormulaBuiltinEntry[] {\n const q = query.trim().toUpperCase()\n if (!q) return [...FORMULA_BUILTIN_REGISTRY]\n return FORMULA_BUILTIN_REGISTRY.filter((b) => {\n if (b.name.includes(q)) return true\n if (b.label.includes(query.trim())) return true\n if (b.hint.includes(query.trim())) return true\n return (b.aliases ?? []).some((a) => a.toUpperCase().includes(q))\n })\n}\n\n/** 从公式文本解析当前正在输入的函数名(=SUM( → SUM) */\nexport function parseActiveFunctionName(formula: string, caret: number): string | null {\n const head = formula.slice(0, caret)\n const m = head.match(/([A-Za-z][\\w.]*)$/)\n if (!m) return null\n const name = m[1].toUpperCase().replace(/\\./g, '')\n if (!name) return null\n const after = head.slice(head.length - m[1].length)\n if (!/^[A-Za-z]/.test(after)) return null\n return resolveBuiltinName(name) ?? null\n}\n\nexport function buildFunctionNamePattern(): RegExp {\n const names = [...new Set(FORMULA_BUILTIN_REGISTRY.map((b) => b.name))]\n const escaped = names.sort((a, b) => b.length - a.length).map((n) =>\n n.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'),\n )\n return new RegExp(`\\\\b(${escaped.join('|')})\\\\s*\\\\(`, 'gi')\n}\n","import * as formulajs from '@formulajs/formulajs'\nimport { buildFunctionNamePattern, getImplementedBuiltinNames } from './registry'\n\nexport type FormulaFn = (values: number[]) => number\n\nfunction buildFnMap(): Record<string, FormulaFn> {\n const map: Record<string, FormulaFn> = {}\n const lib = formulajs as Record<string, unknown>\n for (const name of getImplementedBuiltinNames()) {\n const fn = lib[name]\n if (typeof fn !== 'function') continue\n map[name] = fn as FormulaFn\n }\n return map\n}\n\nexport const FN_MAP = buildFnMap()\nexport const FN_RE = buildFunctionNamePattern()\n","/**\n * 公式编辑态字符串操作(headless,与 UI 框架无关)。\n * 供 vue3 / 其他宿主在公式栏、单元格内联编辑、点选引用时复用。\n */\nimport type { Sheet } from '@speed-sheet/core'\nimport type { CellAttributes } from '@speed-sheet/shared'\nimport { createFormulaContext } from './context'\nimport { internalFormulaToDisplay } from './formula-bindings'\nimport { overlapsInternalRef } from './internal-ref-scan'\nimport { formatA1 } from './refs'\n\nconst REF_TOKEN_RE =\n /(?:'[^']+'!)?[A-Za-z]{1,4}\\d+(?::[A-Za-z]{1,4}\\d+)?/gi\n\nconst OP_END_RE = /[+\\-*/,(]$/\n\n/** 光标前为该字符时,允许点选单元格插入引用(对齐 Luckysheet israngeseleciton) */\nconst REF_PICK_TRIGGER = new Set([\n '(',\n ',',\n '=',\n '+',\n '-',\n '*',\n '/',\n '%',\n '&',\n '^',\n '<',\n '>',\n '|',\n ':',\n])\n\n/**\n * 是否处于「点选插入引用」态(而非仅公式编辑态)。\n * @param refPickSession 已为 true 时等同 Luckysheet rangestart(上一次点选后保持到提交/取消)\n */\nexport function canPickFormulaRefAtCaret(formula: string, caret: number): boolean {\n if (!isFormulaInput(formula)) return false\n const trimmed = formula.trimStart()\n if (trimmed === '=') return true\n const safeCaret = Math.max(0, Math.min(caret, formula.length))\n const before = formula.slice(0, safeCaret).trimEnd()\n if (!before.length) return false\n const last = before[before.length - 1]!\n return REF_PICK_TRIGGER.has(last)\n}\n\nexport function canPickFormulaRef(\n formula: string,\n caret: number,\n refPickSession: boolean,\n): boolean {\n if (!isFormulaInput(formula)) return false\n return refPickSession || canPickFormulaRefAtCaret(formula, caret)\n}\n\nexport function isFormulaInput(text: string): boolean {\n return text.trimStart().startsWith('=')\n}\n\nexport const isFormulaText = isFormulaInput\n\nexport function getCellFormulaInitialFromCell(\n cell: CellAttributes | null | undefined,\n sheet?: Sheet,\n sheetId?: string,\n): string {\n if (cell?.f) {\n const f = String(cell.f)\n if (sheet && f.startsWith('=')) {\n const ctx = createFormulaContext(sheet)\n const sid = sheetId ?? sheet.getActiveSheetId()\n return internalFormulaToDisplay(f, ctx, sid)\n }\n return f\n }\n const raw = cell?.m ?? cell?.v\n if (typeof raw === 'string' && raw.startsWith('=')) return raw\n return '='\n}\n\n/** 进入公式编辑时的初始文本:已有公式则保留,否则为 `=` */\nexport function getCellFormulaInitial(sheet: Sheet, r: number, c: number): string {\n return getCellFormulaInitialFromCell(\n sheet.state.getCellData(r, c),\n sheet,\n sheet.getActiveSheetId(),\n )\n}\n\nexport function formatRangeA1(\n r0: number,\n c0: number,\n r1: number,\n c1: number,\n): string {\n const ra = Math.min(r0, r1)\n const rb = Math.max(r0, r1)\n const ca = Math.min(c0, c1)\n const cb = Math.max(c0, c1)\n if (ra === rb && ca === cb) return formatA1(ra, ca)\n return `${formatA1(ra, ca)}:${formatA1(rb, cb)}`\n}\n\nexport function buildSheetRefToken(\n sheet: Sheet,\n r0: number,\n c0: number,\n r1?: number,\n c1?: number,\n sheetId?: string,\n): string {\n const sid = sheetId ?? sheet.getActiveSheetId()\n const activeId = sheet.getActiveSheetId()\n const local =\n r1 !== undefined && c1 !== undefined\n ? formatRangeA1(r0, c0, r1, c1)\n : formatA1(r0, c0)\n if (sid === activeId) return local\n const name = sheet.getSheetName(sid)\n return `'${name.replace(/'/g, \"''\")}'!${local}`\n}\n\nfunction findRefSpanAt(formula: string, index: number): { start: number; end: number } | null {\n REF_TOKEN_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = REF_TOKEN_RE.exec(formula)) !== null) {\n const start = m.index\n const end = start + m[0].length\n if (overlapsInternalRef(formula, start, end)) continue\n if (index >= start && index <= end) return { start, end }\n }\n return null\n}\n\nfunction findLastRefSpan(formula: string): { start: number; end: number } | null {\n REF_TOKEN_RE.lastIndex = 0\n let last: { start: number; end: number } | null = null\n let m: RegExpExecArray | null\n while ((m = REF_TOKEN_RE.exec(formula)) !== null) {\n const start = m.index\n const end = start + m[0].length\n if (overlapsInternalRef(formula, start, end)) continue\n last = { start, end }\n }\n return last\n}\n\n/** 在公式中插入/替换引用:运算符后拼接,否则替换光标处引用(或最后一个引用) */\nexport function patchFormulaWithRef(\n formula: string,\n caret: number,\n refToken: string,\n): { text: string; caret: number } {\n if (!isFormulaInput(formula)) {\n return { text: `=${refToken}`, caret: 1 + refToken.length }\n }\n\n const safeCaret = Math.max(0, Math.min(caret, formula.length))\n const before = formula.slice(0, safeCaret)\n const after = formula.slice(safeCaret)\n\n if (formula === '=' || OP_END_RE.test(before.trimEnd())) {\n const text = before + refToken + after\n return { text, caret: before.length + refToken.length }\n }\n\n const span =\n findRefSpanAt(formula, safeCaret) ??\n findRefSpanAt(formula, safeCaret - 1) ??\n findLastRefSpan(formula)\n\n if (span) {\n const text = formula.slice(0, span.start) + refToken + formula.slice(span.end)\n return { text, caret: span.start + refToken.length }\n }\n\n const sep = OP_END_RE.test(before.trimEnd()) ? '' : '+'\n const text = before + sep + refToken + after\n return { text, caret: before.length + sep.length + refToken.length }\n}\n","import type { FormulaContext } from './context'\nimport { collectIdRangeScalars, coerceNumber } from './context'\nimport { formulaErrorResult, type FormulaErrorCode } from './errors'\nimport {\n extractInternalRefTokens,\n hasInternalRefs,\n parseInternalRefToken,\n} from './formula-bindings'\nimport { FN_MAP, FN_RE } from './fnMap'\nimport { isRegisteredBuiltin } from './registry'\n\nexport type { FormulaErrorCode }\nexport { formulaErrorResult, isFormulaErrorDisplay, getFormulaErrorMessage, FORMULA_ERRORS } from './errors'\n\nexport interface FormulaResult {\n value: number | string | boolean | null\n m: string\n error?: FormulaErrorCode\n errorMessage?: string\n}\n\ntype FnName = keyof typeof FN_MAP\nconst IDENT_FN_RE = /\\b([A-Za-z_][\\w.]*)\\s*\\(/g\nconst NULL_RANGE_RE = /[A-Za-z]{1,4}\\d+:[A-Za-z]{1,4}\\d+\\s+[A-Za-z]{1,4}/\n\nfunction splitTopLevelArgs(inner: string): string[] {\n const parts: string[] = []\n let depth = 0\n let start = 0\n for (let i = 0; i < inner.length; i++) {\n const ch = inner[i]\n if (ch === '(') depth++\n else if (ch === ')') depth--\n else if (ch === ',' && depth === 0) {\n parts.push(inner.slice(start, i).trim())\n start = i + 1\n }\n }\n parts.push(inner.slice(start).trim())\n return parts.filter(Boolean)\n}\n\nfunction detectNameError(expr: string): boolean {\n IDENT_FN_RE.lastIndex = 0\n let m: RegExpExecArray | null\n while ((m = IDENT_FN_RE.exec(expr)) !== null) {\n const name = m[1].toUpperCase().replace(/\\./g, '')\n if (!isRegisteredBuiltin(name)) return true\n }\n return false\n}\n\nfunction detectNullRangeError(expr: string): boolean {\n return NULL_RANGE_RE.test(expr)\n}\n\nfunction resolveRefSheetId(\n ctx: FormulaContext,\n sheetIdOrName: string | undefined,\n): string | { error: 'REF' } {\n if (!sheetIdOrName) return ctx.activeSheetId\n const id = ctx.resolveSheetId(sheetIdOrName)\n if (!id) return { error: 'REF' }\n return id\n}\n\nfunction resolveArgNumbers(\n arg: string,\n ctx: FormulaContext,\n visiting: Set<string>,\n): number[] | { error: FormulaErrorCode } {\n if (arg.startsWith('#')) {\n const ref = parseInternalRefToken(arg)\n if (!ref) return { error: 'REF' }\n const sheetResolved = resolveRefSheetId(ctx, ref.sheetId)\n if (typeof sheetResolved !== 'string') return sheetResolved\n const sheetId = sheetResolved\n if (ref.endRowId != null && ref.endColId != null) {\n return collectIdRangeScalars(\n ctx,\n sheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n visiting,\n )\n }\n const raw = ctx.getScalarById(sheetId, ref.rowId, ref.colId, visiting)\n if (typeof raw === 'string' && raw.startsWith('#')) return { error: 'REF' }\n if (typeof raw === 'string' && raw !== '' && Number.isNaN(Number(raw))) {\n return { error: 'VALUE' }\n }\n return [coerceNumber(raw)]\n }\n const n = Number(arg)\n if (Number.isFinite(n)) return [n]\n if (arg.startsWith('\"') || /[A-Za-z\\u4e00-\\u9fff]/.test(arg)) return { error: 'VALUE' }\n return []\n}\n\nfunction evalFunctions(\n expr: string,\n ctx: FormulaContext,\n visiting: Set<string>,\n): string | { error: FormulaErrorCode } {\n let out = expr\n let guard = 0\n while (guard++ < 32) {\n FN_RE.lastIndex = 0\n const m = FN_RE.exec(out)\n if (!m) break\n const fnName = m[1].toUpperCase().replace(/\\./g, '') as FnName\n const fn = FN_MAP[fnName]\n if (!fn) {\n FN_RE.lastIndex = m.index + m[0].length\n continue\n }\n\n const open = m.index + m[0].length\n let depth = 1\n let i = open\n for (; i < out.length && depth > 0; i++) {\n if (out[i] === '(') depth++\n else if (out[i] === ')') depth--\n }\n if (depth !== 0) return { error: 'ERROR' }\n\n const inner = out.slice(open, i - 1)\n const args = splitTopLevelArgs(inner)\n const values: number[] = []\n for (const a of args) {\n const resolved = resolveArgNumbers(a, ctx, visiting)\n if (!Array.isArray(resolved)) return resolved\n values.push(...resolved)\n }\n\n let computed: number\n computed = fn(values)\n\n if (!Number.isFinite(computed)) return { error: 'NUM' }\n\n const replacement = String(computed)\n out = out.slice(0, m.index) + replacement + out.slice(i)\n }\n return out\n}\n\nfunction replaceInternalRefs(\n expr: string,\n ctx: FormulaContext,\n visiting: Set<string>,\n): string | { error: FormulaErrorCode } {\n const tokens = extractInternalRefTokens(expr)\n let out = expr\n for (const token of tokens) {\n const ref = parseInternalRefToken(token)\n if (!ref) continue\n const sheetResolved = resolveRefSheetId(ctx, ref.sheetId)\n if (typeof sheetResolved !== 'string') return sheetResolved\n const sheetId = sheetResolved\n if (ref.endRowId != null && ref.endColId != null) {\n const nums = collectIdRangeScalars(\n ctx,\n sheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n visiting,\n )\n const sumFn = FN_MAP.SUM\n if (!sumFn) return { error: 'NAME' }\n const sum = sumFn(nums)\n if (!Number.isFinite(sum)) return { error: 'NUM' }\n out = out.split(token).join(String(sum))\n continue\n }\n const raw = ctx.getScalarById(sheetId, ref.rowId, ref.colId, visiting)\n if (typeof raw === 'string' && raw.startsWith('#')) return { error: 'REF' }\n if (typeof raw === 'string' && raw !== '' && Number.isNaN(Number(raw))) {\n return { error: 'VALUE' }\n }\n const v = coerceNumber(raw)\n out = out.split(token).join(String(v))\n }\n return out\n}\n\nfunction safeArithmetic(expr: string): FormulaResult {\n const trimmed = expr.replace(/\\s/g, '')\n if (!trimmed) return formulaErrorResult('ERROR')\n\n if (/[a-zA-Z\"]/.test(trimmed)) {\n return formulaErrorResult('VALUE')\n }\n\n if (!/^[0-9+\\-*/().]+$/.test(trimmed)) {\n return formulaErrorResult('ERROR')\n }\n\n if (/\\/\\s*0+(?:\\.0*)?(?:[+\\-*/)]|$)/.test(trimmed)) {\n return formulaErrorResult('DIV0')\n }\n\n try {\n // eslint-disable-next-line no-new-func\n const v = new Function(`return (${trimmed})`)()\n if (typeof v !== 'number' || Number.isNaN(v)) {\n return formulaErrorResult('VALUE')\n }\n if (!Number.isFinite(v)) {\n return formulaErrorResult(Math.abs(v) === Infinity ? 'DIV0' : 'NUM')\n }\n const m = Number.isInteger(v) ? String(v) : String(Math.round(v * 1e9) / 1e9)\n return { value: v, m }\n } catch {\n return formulaErrorResult('ERROR')\n }\n}\n\nexport function evaluateFormulaString(\n raw: string,\n ctx: FormulaContext,\n visiting: Set<string> = new Set(),\n): FormulaResult {\n const text = raw.trim()\n if (!text.startsWith('=')) {\n return { value: text, m: text }\n }\n\n let expr = text.slice(1).trim()\n if (!expr) {\n return formulaErrorResult('ERROR')\n }\n\n if (detectNullRangeError(expr)) {\n return formulaErrorResult('NULL')\n }\n\n if (detectNameError(expr)) {\n return formulaErrorResult('NAME')\n }\n\n try {\n const afterFn = evalFunctions(expr, ctx, visiting)\n if (typeof afterFn !== 'string') {\n return formulaErrorResult(afterFn.error)\n }\n expr = afterFn\n\n if (hasInternalRefs(expr)) {\n const afterRefs = replaceInternalRefs(expr, ctx, visiting)\n if (typeof afterRefs !== 'string') {\n return formulaErrorResult(afterRefs.error)\n }\n expr = afterRefs\n }\n\n return safeArithmetic(expr)\n } catch {\n return formulaErrorResult('ERROR')\n }\n}\n\nexport { isFormulaInput } from './edit'\n","import { getFormulaErrorMessage } from './errors'\nimport type { FormulaResult } from './evaluate'\nimport type { CellAttributes } from '@speed-sheet/shared'\n\nexport function cellPatchFromFormulaResult(\n formula: string,\n result: FormulaResult,\n): Partial<CellAttributes> {\n const f = formula.trim()\n if (result.error) {\n return {\n f,\n v: null,\n m: result.m,\n ef: result.error,\n em: result.errorMessage ?? getFormulaErrorMessage(result.error),\n }\n }\n return {\n f,\n v: result.value,\n m: result.m,\n ef: undefined,\n em: undefined,\n }\n}\n","import { extractInternalRefTokens, hasInternalRefs } from './internal-ref-scan'\nimport { extractRefTokens } from './refs'\n\nexport const FORMULA_REF_COLORS = [\n '#1a73e8',\n '#0d9d57',\n '#e37400',\n '#9c27b0',\n '#d93025',\n] as const\n\nexport interface FormulaRefSpan {\n start: number\n end: number\n token: string\n color: string\n}\n\nfunction spansForTokens(formula: string, tokens: string[]): FormulaRefSpan[] {\n const spans: FormulaRefSpan[] = []\n let searchFrom = 0\n tokens.forEach((token, i) => {\n const idx = formula.indexOf(token, searchFrom)\n if (idx < 0) return\n spans.push({\n start: idx,\n end: idx + token.length,\n token,\n color: FORMULA_REF_COLORS[i % FORMULA_REF_COLORS.length],\n })\n searchFrom = idx + token.length\n })\n return spans\n}\n\n/** 公式内引用 token 着色区间 */\nexport function getFormulaRefSpans(formula: string): FormulaRefSpan[] {\n if (hasInternalRefs(formula)) {\n return spansForTokens(formula, extractInternalRefTokens(formula))\n }\n return spansForTokens(formula, extractRefTokens(formula))\n}\n","import * as Y from 'yjs'\nimport type { Sheet } from '@speed-sheet/core'\nimport { SheetState, transactSystem } from '@speed-sheet/core'\nimport { depKey, parseDepKey } from '@speed-sheet/shared'\nimport { createFormulaContext } from './context'\nimport { evaluateFormulaString } from './evaluate'\nimport {\n displayFormulaToInternal,\n extractInternalRefTokens,\n hasInternalRefs,\n parseInternalRefToken,\n} from './formula-bindings'\nimport { cellPatchFromFormulaResult } from './result'\nimport { extractRefTokens, parseRefToken } from './refs'\nimport { FORMULA_REF_COLORS } from './refSpans'\n\nexport interface FormulaRangeHighlight {\n sheetId: string\n row: [number, number]\n column: [number, number]\n color: string\n}\n\nconst HIGHLIGHT_COLORS = [...FORMULA_REF_COLORS]\n\nfunction refToHighlight(\n ctx: ReturnType<typeof createFormulaContext>,\n sheetId: string,\n r: number,\n c: number,\n color: string,\n): FormulaRangeHighlight {\n return { sheetId, row: [r, r], column: [c, c], color }\n}\n\nexport function buildHighlightsFromFormula(\n formula: string,\n ctx: ReturnType<typeof createFormulaContext>,\n): FormulaRangeHighlight[] {\n const out: FormulaRangeHighlight[] = []\n\n if (hasInternalRefs(formula)) {\n const tokens = extractInternalRefTokens(formula)\n tokens.forEach((token, i) => {\n const ref = parseInternalRefToken(token)\n if (!ref) return\n const sheetId = ref.sheetId ?? ctx.activeSheetId\n const color = HIGHLIGHT_COLORS[i % HIGHLIGHT_COLORS.length]\n if (ref.endRowId != null && ref.endColId != null) {\n const cells = ctx.expandIdRange(\n sheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n )\n if (!cells.length) return\n let rMin = Infinity\n let rMax = -Infinity\n let cMin = Infinity\n let cMax = -Infinity\n for (const { rowId, colId } of cells) {\n const pos = ctx.idsToDisplay(sheetId, rowId, colId)\n if (!pos) continue\n rMin = Math.min(rMin, pos.r)\n rMax = Math.max(rMax, pos.r)\n cMin = Math.min(cMin, pos.c)\n cMax = Math.max(cMax, pos.c)\n }\n if (rMin !== Infinity) {\n out.push({ sheetId, row: [rMin, rMax], column: [cMin, cMax], color })\n }\n } else {\n const pos = ctx.idsToDisplay(sheetId, ref.rowId, ref.colId)\n if (pos) out.push(refToHighlight(ctx, sheetId, pos.r, pos.c, color))\n }\n })\n return out\n }\n\n const tokens = extractRefTokens(formula)\n tokens.forEach((token, i) => {\n const ref = parseRefToken(token)\n if (!ref) return\n const sheetId = ctx.resolveSheetId(ref.sheet) ?? ctx.activeSheetId\n const color = HIGHLIGHT_COLORS[i % HIGHLIGHT_COLORS.length]\n if (ref.range) {\n out.push({ sheetId, row: ref.range.row, column: ref.range.column, color })\n } else if (ref.cell) {\n out.push(refToHighlight(ctx, sheetId, ref.cell.r, ref.cell.c, color))\n }\n })\n return out\n}\n\nexport function recalculateWorkbook(sheet: Sheet): void {\n const ctx = createFormulaContext(sheet)\n const sheetsMap = sheet.ydoc.getMap('sheets')\n const formulas: Array<{ sheetId: string; r: number; c: number; f: string }> = []\n\n for (const sheetId of sheet.getSheetIds()) {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) continue\n const state = new SheetState(ySheet)\n for (const { r, c, data } of state.getAllCells()) {\n if (data.f && String(data.f).startsWith('=') && hasInternalRefs(String(data.f))) {\n formulas.push({ sheetId, r, c, f: String(data.f) })\n }\n }\n }\n\n for (let pass = 0; pass < 8; pass++) {\n let changed = false\n for (const item of formulas) {\n const visiting = new Set<string>()\n const result = evaluateFormulaString(item.f, ctx, visiting)\n const ySheet = sheetsMap.get(item.sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) continue\n const state = new SheetState(ySheet)\n const prev = state.getCellData(item.r, item.c)\n const patch = cellPatchFromFormulaResult(item.f, result)\n if (prev?.v !== patch.v || prev?.m !== patch.m || prev?.ef !== patch.ef) {\n changed = true\n transactSystem(sheet.ydoc, () => {\n state.setCell(item.r, item.c, patch, false)\n })\n }\n }\n if (!changed) break\n }\n}\n\nexport function normalizeWorkbookFormulas(sheet: Sheet, dependents: Map<string, Set<string>>): void {\n const ctx = createFormulaContext(sheet)\n const sheetsMap = sheet.ydoc.getMap('sheets')\n\n for (const sheetId of sheet.getSheetIds()) {\n const ySheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!ySheet) continue\n const state = new SheetState(ySheet)\n\n for (const { r, c, data } of state.getAllCells()) {\n const f = data.f ? String(data.f) : ''\n if (!f.startsWith('=') || hasInternalRefs(f)) continue\n\n const internal = displayFormulaToInternal(f, ctx, sheetId)\n const ids = state.resolveCellIds(r, c)\n if (!ids) continue\n\n transactSystem(sheet.ydoc, () => {\n state.setCell(r, c, { f: internal }, false)\n })\n registerFormulaDeps(sheetId, ids.rowId, ids.colId, internal, ctx, dependents)\n }\n }\n}\n\nexport function updateDependents(\n sheet: Sheet,\n changedSheetId: string,\n r: number,\n c: number,\n dependents: Map<string, Set<string>>,\n): void {\n const ySheet = sheet.ydoc.getMap('sheets').get(changedSheetId) as Y.Map<unknown> | undefined\n if (!ySheet) return\n const state = new SheetState(ySheet)\n const ids = state.resolveCellIds(r, c)\n if (!ids) return\n\n const key = depKey(changedSheetId, ids.rowId, ids.colId)\n const targets = dependents.get(key)\n if (!targets?.size) return\n\n const ctx = createFormulaContext(sheet)\n const sheetsMap = sheet.ydoc.getMap('sheets')\n\n for (const targetKey of targets) {\n const parsed = parseDepKey(targetKey)\n if (!parsed) continue\n const { sheetId, rowId, colId } = parsed\n const targetSheet = sheetsMap.get(sheetId) as Y.Map<unknown> | undefined\n if (!targetSheet) continue\n const targetState = new SheetState(targetSheet)\n const pos = ctx.idsToDisplay(sheetId, rowId, colId)\n if (!pos) continue\n const data = targetState.getCellData(pos.r, pos.c)\n if (!data?.f) continue\n const f = String(data.f)\n if (!hasInternalRefs(f)) continue\n const result = evaluateFormulaString(f, ctx)\n transactSystem(sheet.ydoc, () => {\n targetState.setCell(pos.r, pos.c, cellPatchFromFormulaResult(f, result), false)\n })\n }\n}\n\nexport function registerFormulaDeps(\n sheetId: string,\n rowId: string,\n colId: string,\n internalFormula: string,\n ctx: ReturnType<typeof createFormulaContext>,\n dependents: Map<string, Set<string>>,\n): void {\n const targetKey = depKey(sheetId, rowId, colId)\n\n for (const dep of dependents.values()) {\n dep.delete(targetKey)\n }\n for (const k of [...dependents.keys()]) {\n const set = dependents.get(k)!\n if (set.has(targetKey)) set.delete(targetKey)\n }\n\n for (const token of extractInternalRefTokens(internalFormula)) {\n const ref = parseInternalRefToken(token)\n if (!ref) continue\n const refSheetId = ref.sheetId ?? sheetId\n\n const link = (depRowId: string, depColId: string): void => {\n const depKeyStr = depKey(refSheetId, depRowId, depColId)\n if (!dependents.has(depKeyStr)) dependents.set(depKeyStr, new Set())\n dependents.get(depKeyStr)!.add(targetKey)\n }\n\n if (ref.endRowId != null && ref.endColId != null) {\n for (const cell of ctx.expandIdRange(\n refSheetId,\n ref.rowId,\n ref.colId,\n ref.endRowId,\n ref.endColId,\n )) {\n link(cell.rowId, cell.colId)\n }\n } else {\n link(ref.rowId, ref.colId)\n }\n }\n}\n","import type { Sheet } from '@speed-sheet/core'\nimport {\n Extension,\n type CommandContext,\n type ExtensionCommandContext,\n} from '@speed-sheet/core'\nimport { depKey } from '@speed-sheet/shared'\nimport { createFormulaContext } from './context'\nimport { evaluateFormulaString, isFormulaInput } from './evaluate'\nimport {\n buildHighlightsFromFormula,\n normalizeWorkbookFormulas,\n recalculateWorkbook,\n registerFormulaDeps,\n updateDependents,\n} from './engine'\nimport { displayFormulaToInternal } from './formula-bindings'\nimport { cellPatchFromFormulaResult } from './result'\n\nexport interface FormulaStorage {\n evaluating: boolean\n dependents: Map<string, Set<string>>\n sheet: Sheet | null\n}\n\nfunction afterLayoutChange(sheet: Sheet, storage: FormulaStorage): void {\n storage.evaluating = true\n try {\n recalculateWorkbook(sheet)\n } finally {\n storage.evaluating = false\n }\n sheet.notifyLayoutChange()\n}\n\nexport const FormulaExtension = Extension.create<FormulaStorage>({\n name: 'formula',\n priority: 10,\n\n addStorage() {\n return {\n evaluating: false,\n dependents: new Map(),\n sheet: null,\n }\n },\n\n addCommands(ctx: ExtensionCommandContext) {\n const boundSheet = ctx.sheet\n\n return {\n setCellValue: (props: { r: number; c: number; value: string }) => {\n return ({ state }: CommandContext) => {\n const raw = props.value\n const sheetId = boundSheet.getActiveSheetId()\n const ids = state.resolveCellIds(props.r, props.c)\n\n if (isFormulaInput(raw)) {\n const fctx = createFormulaContext(boundSheet)\n const internal = displayFormulaToInternal(raw, fctx, sheetId)\n const result = evaluateFormulaString(internal, fctx)\n state.setCell(props.r, props.c, cellPatchFromFormulaResult(internal, result))\n if (ids) {\n registerFormulaDeps(\n sheetId,\n ids.rowId,\n ids.colId,\n internal,\n fctx,\n this.storage.dependents,\n )\n }\n } else {\n const num = Number(raw)\n const v: string | number = !Number.isNaN(num) && raw !== '' ? num : raw\n state.setCell(props.r, props.c, {\n v,\n m: raw,\n ef: undefined,\n em: undefined,\n })\n const cell = state.getCell(props.r, props.c)\n cell?.delete('f')\n if (ids) {\n const tk = depKey(sheetId, ids.rowId, ids.colId)\n for (const set of this.storage.dependents.values()) set.delete(tk)\n }\n }\n\n return true\n }\n },\n\n setCellFormula: (props: { r: number; c: number; formula: string }) => {\n return ({ state }: CommandContext) => {\n const display = props.formula.startsWith('=') ? props.formula : `=${props.formula}`\n const fctx = createFormulaContext(boundSheet)\n const sheetId = boundSheet.getActiveSheetId()\n const internal = displayFormulaToInternal(display, fctx, sheetId)\n const result = evaluateFormulaString(internal, fctx)\n const ids = state.resolveCellIds(props.r, props.c)\n state.setCell(props.r, props.c, cellPatchFromFormulaResult(internal, result))\n if (ids) {\n registerFormulaDeps(\n sheetId,\n ids.rowId,\n ids.colId,\n internal,\n fctx,\n this.storage.dependents,\n )\n }\n return true\n }\n },\n\n recalculateFormulas: () => {\n return () => {\n this.storage.evaluating = true\n try {\n recalculateWorkbook(boundSheet)\n } finally {\n this.storage.evaluating = false\n }\n return true\n }\n },\n\n insertRows: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.insertRows(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n deleteRows: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.deleteRows(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n insertCols: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.insertCols(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n deleteCols: (props: { at: number; count?: number }) => {\n return ({ state }: CommandContext) => {\n boundSheet.notifyBeforeLayoutChange()\n state.deleteCols(props.at, props.count ?? 1)\n afterLayoutChange(boundSheet, this.storage)\n return true\n }\n },\n }\n },\n\n onInit(this: Extension<FormulaStorage>, sheet: Sheet) {\n this.storage.sheet = sheet\n this.storage.evaluating = true\n try {\n normalizeWorkbookFormulas(sheet, this.storage.dependents)\n recalculateWorkbook(sheet)\n } finally {\n this.storage.evaluating = false\n }\n },\n\n onCellChange(this: Extension<FormulaStorage>, r: number, c: number) {\n if (this.storage.evaluating || !this.storage.sheet) return\n updateDependents(\n this.storage.sheet,\n this.storage.sheet.getActiveSheetId(),\n r,\n c,\n this.storage.dependents,\n )\n },\n})\n\nexport function getFormulaHighlights(sheet: Sheet, formula: string) {\n if (!isFormulaInput(formula)) return []\n const ctx = createFormulaContext(sheet)\n return buildHighlightsFromFormula(formula, ctx)\n}\n\nexport type { FormulaRangeHighlight } from './engine'\n"]}