exprify 1.0.4 → 1.0.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"exprify.esm.js","sources":["../src/parser/tokenizer.js","../src/utils/matrix.js","../src/parser/evaluator.js","../src/core/context.js","../src/math/operations.js","../src/utils/store.js","../src/utils/globalUnits.js","../src/variables/store.js","../src/function/registry.js","../src/function/internal.js","../src/parser/astBuild.js","../src/core/Exprify.js"],"sourcesContent":["export function tokenize(expr, context = {}) {\n const tokens = [];\n let current = \"\";\n let quote = \"\";\n\n const operators = [\"+\", \"-\", \"*\", \"/\", \"%\", \"^\", \"=\", \">\", \"<\", \"!\", \"&\", \"|\"];\n const multiOps = [\n \"==\", \">=\", \"<=\", \"&&\", \"||\",\n \"+=\", \"-=\", \"*=\", \"/=\", \"%=\",\n \"?.\", \"??\", \"|>\"\n ];\n\n const parentheses = \"()\";\n const comma = \",\";\n const semicolon = \";\";\n const keywords = [\"to\", \"in\"];\n // const functions = context.functions?.getAllFunctionsName?.() || [];\n const units = context.units?.getAllUnitsFlat?.() || [];\n\n const isIdentifier = (s) => /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s);\n\n function getContext(str, charIndex) {\n // 1. Extract all alphanumeric words into an array\n const words = str.match(/[a-z0-9]+/gi) || [];\n \n // 2. Identify the current character and the one immediately before it\n const currentChar = str[charIndex] || null;\n const prevChar = charIndex > 0 ? str[charIndex - 1] : null;\n \n // 3. Find the word that contains the current charIndex\n let start = charIndex;\n // Move pointer back to the start of the current word\n while (start > 0 && /[a-z0-9]/i.test(str[start - 1])) start--;\n \n let end = charIndex;\n // Move pointer forward to the end of the current word\n while (end < str.length && /[a-z0-9]/i.test(str[end])) end++;\n \n const currentWord = str.substring(start, end);\n\n // 4. Find the word that appears before the currentWord in the sequence\n const currentWordIdx = words.indexOf(currentWord);\n const prevWord = currentWordIdx > 0 ? words[currentWordIdx - 1] : null;\n\n // 5. Find the word that appears after the currentWord\n const nextWord = (currentWordIdx !== -1 && currentWordIdx < words.length - 1) \n ? words[currentWordIdx + 1] \n : null;\n\n return {\n prevWord: prevWord,\n prevChar: prevChar,\n currentWord: currentWord,\n currentChar: currentChar,\n nextWord: nextWord\n };\n }\n\n const isUnaryContext = (prev) =>\n !prev ||\n prev.type === \"Operator\" ||\n prev.type === \"UnaryOperator\" ||\n (prev.type === \"Parenthesis\" && prev.value !== \")\") ||\n prev.type === \"ArrayStart\" ||\n prev.type === \"Semicolon\" ||\n prev.type === \"Comma\" ||\n prev.type === \"Ternary\";\n\n const flushCurrent = (nextChar, index) => {\n if (!current) return;\n\n // BOOLEAN\n if (/^(true|false)$/i.test(current)) {\n tokens.push({ type: \"Boolean\", value: current.toLowerCase() === \"true\" });\n current = \"\";\n return;\n }\n\n // KEYWORD\n if (keywords.includes(current)) {\n tokens.push({ type: \"Keyword\", value: current, pos: index });\n current = \"\";\n return;\n }\n\n // BIGINT\n if (/^\\d+n$/.test(current)) {\n tokens.push({ type: \"BigInt\", value: BigInt(current.slice(0, -1)), pos: index });\n current = \"\";\n return;\n }\n\n // HEX\n if (/^0x[0-9a-fA-F]+$/.test(current)) {\n tokens.push({ type: \"Number\", value: parseInt(current, 16), pos: index });\n current = \"\";\n return;\n }\n\n // BINARY\n if (/^0b[01]+$/.test(current)) {\n tokens.push({ type: \"Number\", value: parseInt(current, 2), pos: index });\n current = \"\";\n return;\n }\n\n // NUMBER (including scientific)\n if (/^[+-]?(\\d+(\\.\\d+)?|\\.\\d+)(e[+-]?\\d+)?$/i.test(current)) {\n tokens.push({ type: \"Number\", value: parseFloat(current), pos: index });\n current = \"\";\n return;\n }\n\n // IMAGINARY NUMBER\n if (/^[+-]?(\\d+(\\.\\d+)?|\\.\\d+)(e[+-]?\\d+)?i$/i.test(current)) {\n tokens.push({\n type: \"ImaginaryLiteral\",\n value: parseFloat(current.slice(0, -1)),\n pos: index\n });\n current = \"\";\n return;\n }\n\n // IMAGINARY UNIT\n if (/^[+-]?i$/i.test(current)) {\n const sign = current[0] === \"-\" ? -1 : 1;\n tokens.push({\n type: \"ImaginaryLiteral\",\n value: sign,\n pos: index\n });\n current = \"\";\n return;\n }\n\n // NUMBER + UNIT\n const numUnit = current.match(/^([+-]?\\d+(\\.\\d+)?)([a-zA-Z]+)$/);\n if (numUnit) {\n const value = parseFloat(numUnit[1]);\n const unit = numUnit[3];\n\n tokens.push({\n type: units.includes(unit) ? \"NumberWithUnit\" : \"UnknownUnit\",\n value,\n unit,\n pos: index\n });\n\n current = \"\";\n return;\n }\n\n // UNIT\n if (units.includes(current)) {\n const {prevWord} = getContext(expr, index);\n if (nextChar !== \"(\") {\n if (prevWord){\n if (!isNaN(parseFloat(prevWord)) || prevWord === \"to\" || prevWord === \"in\") {\n // console.log(\"Context for unit detection:\", {current, prevWord, nextChar});\n\n tokens.push({ type: \"Unit\", value: current, pos: index });\n current = \"\";\n return;\n }\n }\n }\n }\n\n // IDENTIFIER\n if (isIdentifier(current)) {\n if (nextChar === \"(\") {\n tokens.push({\n type: \"Function\",\n name: current,\n pos: index\n });\n } else {\n tokens.push({\n type: \"Identifier\",\n name: current,\n pos: index\n });\n }\n\n current = \"\";\n return;\n }\n\n throw new Error(`Invalid token \"${current}\" at index ${index}`);\n };\n \n\n for (let i = 0; i < expr.length; i++) {\n let char = expr[i];\n let next = expr[i + 1];\n\n // comments\n if (char === \"/\" && next === \"/\") {\n while (i < expr.length && expr[i] !== \"\\n\") i++;\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n i += 2;\n while (i < expr.length && !(expr[i] === \"*\" && expr[i + 1] === \"/\")) i++;\n i++;\n continue;\n }\n\n // string\n if (`\"'`.includes(char)) {\n if (!quote) {\n quote = char;\n current += char;\n } else if (quote === char) {\n current += char;\n tokens.push({\n type: \"String\",\n value: current.slice(1, -1),\n pos: i\n });\n current = \"\";\n quote = \"\";\n } else {\n current += char;\n }\n continue;\n }\n\n if (quote) {\n if (char === \"\\\\\") {\n current += char + expr[++i];\n } else {\n current += char;\n }\n continue;\n }\n\n // multi operators\n const twoChar = char + next;\n if (multiOps.includes(twoChar)) {\n flushCurrent(char, i);\n tokens.push({ type: \"Operator\", value: twoChar, pos: i });\n i++;\n continue;\n }\n\n if (char === \"?\") {\n tokens.push({ type: \"Ternary\", value: \"?\" });\n continue;\n }\n\n // only treat ':' as ternary IF previous token was '?'\n if (char === \":\") {\n flushCurrent(char, i);\n const prev = tokens[tokens.length - 1];\n\n if (prev && prev.type === \"Ternary\") {\n tokens.push({ type: \"Ternary\", value: \":\" });\n } else {\n tokens.push({ type: \"Colon\" });\n }\n continue;\n }\n\n // dot\n if (char === \".\" && /\\d/.test(current) && /\\d/.test(next)) {\n current += char;\n continue;\n }\n\n if (char === \".\") {\n flushCurrent(char, i);\n tokens.push({ type: \"Dot\", pos: i });\n continue;\n }\n\n // operators\n if (operators.includes(char)) {\n flushCurrent(char, i);\n\n const prev = tokens[tokens.length - 1];\n if ((char === \"-\" || char === \"!\") && isUnaryContext(prev)) {\n tokens.push({ type: \"UnaryOperator\", value: char, pos: i });\n } else {\n tokens.push({ type: \"Operator\", value: char, pos: i });\n }\n continue;\n }\n\n // parenthesis\n if (parentheses.includes(char)) {\n flushCurrent(char, i);\n tokens.push({ type: \"Parenthesis\", value: char, pos: i });\n continue;\n }\n\n // array\n if (char === \"[\") {\n flushCurrent(char, i);\n tokens.push({ type: \"ArrayStart\", pos: i });\n continue;\n }\n\n if (char === \"]\") {\n flushCurrent(char, i);\n tokens.push({ type: \"ArrayEnd\", pos: i });\n continue;\n }\n\n // OBJECT START\n if (char === \"{\") {\n flushCurrent(char, i);\n tokens.push({ type: \"BlockStart\", pos: i });\n continue;\n }\n\n // OBJECT END\n if (char === \"}\") {\n flushCurrent(char, i);\n tokens.push({ type: \"BlockEnd\", pos: i });\n continue;\n }\n\n // comma\n if (char === comma) {\n flushCurrent(char, i);\n tokens.push({ type: \"Comma\", pos: i });\n continue;\n }\n\n // semicolon\n if (char === semicolon) {\n flushCurrent(char, i);\n tokens.push({ type: \"Semicolon\", pos: i });\n continue;\n }\n\n // space\n if (char === \" \") {\n flushCurrent(next, i);\n continue;\n }\n\n // build token\n current += char;\n\n if (i === expr.length - 1) {\n flushCurrent(null, i);\n }\n }\n\n if (quote) throw new Error(\"Unclosed string literal\");\n\n // merge number + unit\n const merged = [];\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n const next = tokens[i + 1];\n\n if (t?.type === \"Number\" && next?.type === \"Unit\") {\n merged.push({\n type: \"NumberWithUnit\",\n value: t.value,\n unit: next.value,\n pos: t.pos\n });\n i++;\n continue;\n }\n\n merged.push(t);\n }\n\n // implicit multiplication\n const final = [];\n for (let i = 0; i < merged.length; i++) {\n const a = merged[i];\n const b = merged[i + 1];\n\n final.push(a);\n\n if (\n a && b &&\n (\n ([\"Number\", \"Identifier\"].includes(a.type) ||\n (a.type === \"Parenthesis\" && a.value === \")\") ||\n a.type === \"ArrayEnd\") &&\n ([\"Identifier\", \"Function\"].includes(b.type) ||\n (b.type === \"Parenthesis\" && b.value === \"(\"))\n )\n ) {\n final.push({ type: \"Operator\", value: \"*\", implicit: true });\n }\n }\n\n return final;\n}\n","export const isDenseMatrixWrapper = (value) =>\n value &&\n typeof value === \"object\" &&\n value.exprify === \"DenseMatrix\" &&\n \"data\" in value &&\n \"size\" in value;\n\nexport const cloneMatrixData = (value) => {\n if (Array.isArray(value)) {\n return value.map(cloneMatrixData);\n }\n\n return value;\n};\n\nexport const getMatrixSize = (data) => {\n if (Array.isArray(data) && data.every(Array.isArray)) {\n return [data.length, data[0]?.length || 0];\n }\n\n if (Array.isArray(data)) {\n return [data.length];\n }\n\n throw new Error(\"Matrix data must be an array\");\n};\n\nexport const wrapDenseMatrix = (data) => ({\n exprify: \"DenseMatrix\",\n data: cloneMatrixData(data),\n size: getMatrixSize(data)\n});\n\nexport const unwrapDenseMatrix = (value) =>\n isDenseMatrixWrapper(value) ? cloneMatrixData(value.data) : value;\n\nexport const serializeExprifyValue = (value) => {\n if (isDenseMatrixWrapper(value)) {\n return JSON.stringify(value);\n }\n\n if (Array.isArray(value) || (value && typeof value === \"object\")) {\n return JSON.stringify(value, (_, current) => {\n if (isDenseMatrixWrapper(current)) {\n return current;\n }\n\n return current;\n });\n }\n\n return value;\n};\n","import { unwrapDenseMatrix, wrapDenseMatrix } from \"../utils/matrix.js\";\n\nexport function evaluateAST(node, context = {}) {\n\n const vars = context.variables;\n const fns = context.functions;\n const units = context.units;\n\n\n const isUnitObj = (v) =>\n v && typeof v === \"object\" && \"value\" in v && \"unit\" in v;\n\n const isComplex = (v) =>\n v && typeof v === \"object\" && \"re\" in v && \"im\" in v;\n\n const isSliceNode = (v) =>\n v && typeof v === \"object\" && v.type === \"SliceExpression\";\n\n const isMatrix = (v) =>\n Array.isArray(v) && v.length > 0 && v.every(Array.isArray);\n\n const cloneValue = (value) => {\n if (Array.isArray(value)) {\n return value.map(cloneValue);\n }\n\n if (value && typeof value === \"object\") {\n return { ...value };\n }\n\n return value;\n };\n\n const normalizeMatrix = (value) => {\n value = unwrapDenseMatrix(value);\n if (isMatrix(value)) return value.map((row) => [...row]);\n if (Array.isArray(value)) return [value];\n throw new Error(\"Expected matrix-compatible value\");\n };\n\n const toOneBasedIndex = (value) => {\n if (typeof value !== \"number\" || !Number.isInteger(value) || value < 1) {\n throw new Error(\"Matrix indices must be positive integers\");\n }\n\n return value - 1;\n };\n\n const resolveSelector = (selector, contextLength) => {\n if (isSliceNode(selector)) {\n const startValue = selector.start == null ? 1 : evaluateAST(selector.start, context);\n const endValue = selector.end == null ? contextLength : evaluateAST(selector.end, context);\n const start = toOneBasedIndex(startValue);\n const end = toOneBasedIndex(endValue);\n\n if (end < start) {\n return [];\n }\n\n const result = [];\n for (let index = start; index <= end; index++) {\n result.push(index);\n }\n return result;\n }\n\n return [toOneBasedIndex(evaluateAST(selector, context))];\n };\n\n const indexMatrix = (matrix, selectors) => {\n const target = normalizeMatrix(matrix);\n\n if (selectors.length === 1) {\n const rowIndexes = resolveSelector(selectors[0], target.length);\n const rows = rowIndexes.map((rowIndex) => {\n if (rowIndex >= target.length) {\n throw new Error(\"Row index out of range\");\n }\n return [...target[rowIndex]];\n });\n\n return rows.length === 1 ? rows[0] : rows;\n }\n\n const rowIndexes = resolveSelector(selectors[0], target.length);\n const colIndexes = resolveSelector(selectors[1], target[0]?.length || 0);\n\n const values = rowIndexes.map((rowIndex) => {\n if (rowIndex >= target.length) {\n throw new Error(\"Row index out of range\");\n }\n\n return colIndexes.map((colIndex) => {\n if (colIndex >= target[rowIndex].length) {\n throw new Error(\"Column index out of range\");\n }\n return target[rowIndex][colIndex];\n });\n });\n\n if (rowIndexes.length === 1 && colIndexes.length === 1) {\n return values[0][0];\n }\n\n if (rowIndexes.length === 1) {\n return values[0];\n }\n\n if (colIndexes.length === 1) {\n return values.map((row) => [row[0]]);\n }\n\n return values;\n };\n\n const assignMatrixIndex = (matrix, selectors, value) => {\n const target = isMatrix(matrix)\n ? matrix.map((row) => [...row])\n : Array.isArray(matrix)\n ? [matrix.slice()]\n : [];\n\n const rowSelector = selectors[0];\n const colSelector = selectors[1];\n\n if (!rowSelector) {\n throw new Error(\"Matrix assignment requires at least one index\");\n }\n\n const rowContextLength = Math.max(target.length, 1);\n const rowIndexes = resolveSelector(rowSelector, rowContextLength);\n\n if (selectors.length === 1) {\n const rowsValue = isMatrix(value) ? value : normalizeMatrix(value);\n\n if (rowsValue.length !== rowIndexes.length) {\n throw new Error(\"Assigned row count does not match slice\");\n }\n\n rowIndexes.forEach((rowIndex, index) => {\n target[rowIndex] = [...rowsValue[index]];\n });\n\n return {\n updatedMatrix: target,\n selectionResult: rowIndexes.length === 1 ? [target[rowIndexes[0]]] : rowIndexes.map((rowIndex) => [target[rowIndex]])\n };\n }\n\n const maxCols = Math.max(...target.map((row) => row.length), 0, 1);\n const colIndexes = resolveSelector(colSelector, maxCols);\n const normalizedValue = normalizeMatrix(value);\n\n if (normalizedValue.length !== rowIndexes.length) {\n throw new Error(\"Assigned row count does not match matrix slice\");\n }\n\n normalizedValue.forEach((row, rowOffset) => {\n if (row.length !== colIndexes.length) {\n throw new Error(\"Assigned column count does not match matrix slice\");\n }\n });\n\n rowIndexes.forEach((rowIndex, rowOffset) => {\n if (!target[rowIndex]) {\n target[rowIndex] = [];\n }\n\n colIndexes.forEach((colIndex, colOffset) => {\n target[rowIndex][colIndex] = normalizedValue[rowOffset][colOffset];\n });\n });\n\n return {\n updatedMatrix: target,\n selectionResult: rowIndexes.length === 1\n ? [colIndexes.map((colIndex) => target[rowIndexes[0]][colIndex])]\n : rowIndexes.map((rowIndex) => colIndexes.map((colIndex) => target[rowIndex][colIndex]))\n };\n };\n\n const multiplyMatrices = (left, right) => {\n const a = normalizeMatrix(left);\n const b = normalizeMatrix(right);\n\n if (a[0].length !== b.length) {\n throw new Error(\"Matrix dimensions do not allow multiplication\");\n }\n\n return a.map((row) =>\n b[0].map((_, colIndex) =>\n row.reduce((sum, value, rowIndex) => sum + (value * b[rowIndex][colIndex]), 0)\n )\n );\n };\n\n const toComplex = (value) => {\n if (isComplex(value)) return value;\n if (typeof value === \"number\") return { re: value, im: 0 };\n throw new Error(\"Complex arithmetic only supports numbers\");\n };\n\n const fromImaginary = (value) => ({ re: 0, im: value });\n\n const simplifyComplex = (value) =>\n value.im === 0 ? value.re : value;\n\n const createFunctionScope = (params, args) => {\n const scopedValues = {};\n\n params.forEach((param, index) => {\n scopedValues[param] = args[index];\n });\n\n return scopedValues;\n };\n\n const evalComplexBinary = (operator, left, right) => {\n const a = toComplex(left);\n const b = toComplex(right);\n\n switch (operator) {\n case \"+\":\n return simplifyComplex({ re: a.re + b.re, im: a.im + b.im });\n case \"-\":\n return simplifyComplex({ re: a.re - b.re, im: a.im - b.im });\n case \"*\":\n return simplifyComplex({\n re: (a.re * b.re) - (a.im * b.im),\n im: (a.re * b.im) + (a.im * b.re)\n });\n case \"/\": {\n const denominator = (b.re ** 2) + (b.im ** 2);\n\n if (denominator === 0) {\n throw new Error(\"Division by zero\");\n }\n\n return simplifyComplex({\n re: ((a.re * b.re) + (a.im * b.im)) / denominator,\n im: ((a.im * b.re) - (a.re * b.im)) / denominator\n });\n }\n default:\n throw new Error(`Operator ${operator} is not supported for complex numbers`);\n }\n };\n\n /* ================= EVALUATOR ================= */\n\n switch (node.type) {\n\n /* ===== LITERAL ===== */\n case \"Literal\":\n return node.value;\n\n case \"ImaginaryLiteral\":\n return fromImaginary(node.value);\n\n case \"UnitLiteral\":\n return { value: node.value, unit: node.unit };\n\n /* ===== VARIABLE ===== */\n case \"Identifier\":\n return vars.get(node.name);\n\n /* ===== ASSIGNMENT ===== */\n case \"AssignmentExpression\": {\n const value = evaluateAST(node.right, context);\n\n if (node.left.type === \"Identifier\") {\n vars.set(node.left.name, value);\n if (node.right.type === \"ArrayExpression\") {\n return wrapDenseMatrix(unwrapDenseMatrix(value));\n }\n return value;\n }\n\n if (node.left.type === \"IndexExpression\" && node.left.object.type === \"Identifier\") {\n const currentValue = vars.get(node.left.object.name);\n const assigned = assignMatrixIndex(currentValue, node.left.selectors, value);\n vars.set(node.left.object.name, assigned.updatedMatrix);\n return assigned.selectionResult;\n }\n\n throw new Error(\"Invalid assignment target\");\n }\n\n case \"FunctionAssignmentExpression\": {\n if (node.operator !== \"=\") {\n throw new Error(`Operator ${node.operator} is not supported for function definitions`);\n }\n\n const fn = (...args) => {\n const scopedContext = context.withScope(createFunctionScope(node.params, args));\n return evaluateAST(node.right, scopedContext);\n };\n\n fns.register(node.left.name, fn);\n return fn;\n }\n\n /* ===== UNARY ===== */\n case \"UnaryExpression\": {\n const val = evaluateAST(node.argument, context);\n\n switch (node.operator) {\n case \"-\":\n return isComplex(val)\n ? simplifyComplex({ re: -val.re, im: -val.im })\n : -val;\n case \"!\": return !val;\n }\n\n throw new Error(`Unknown unary operator ${node.operator}`);\n }\n\n /* ===== BINARY ===== */\n case \"BinaryExpression\": {\n let left = evaluateAST(node.left, context);\n let right = evaluateAST(node.right, context);\n\n // UNIT handling\n if (isUnitObj(left) || isUnitObj(right)) {\n\n if (!units) throw new Error(\"Unit system not available\");\n\n return units.compute(node.operator, left, right);\n }\n\n if (node.operator === \"*\" && (Array.isArray(left) || Array.isArray(right))) {\n return multiplyMatrices(left, right);\n }\n\n if (isComplex(left) || isComplex(right)) {\n return evalComplexBinary(node.operator, left, right);\n }\n\n switch (node.operator) {\n case \"+\": return left + right;\n case \"-\": return left - right;\n case \"*\": return left * right;\n case \"/\": return left / right;\n case \"%\": return left % right;\n case \"^\": return left ** right;\n\n case \">\": return left > right;\n case \"<\": return left < right;\n case \">=\": return left >= right;\n case \"<=\": return left <= right;\n case \"==\": return left === right;\n }\n\n throw new Error(`Unknown operator ${node.operator}`);\n }\n\n /* ===== LOGICAL ===== */\n case \"LogicalExpression\": {\n const left = evaluateAST(node.left, context);\n\n if (node.operator === \"&&\") {\n return left && evaluateAST(node.right, context);\n }\n\n if (node.operator === \"||\") {\n return left || evaluateAST(node.right, context);\n }\n\n if (node.operator === \"??\") {\n return left ?? evaluateAST(node.right, context);\n }\n\n throw new Error(`Unknown logical operator ${node.operator}`);\n }\n\n /* ===== FUNCTION CALL ===== */\n case \"CallExpression\": {\n const fnName = node.callee.name;\n const fn = fns.get(fnName);\n\n const args = node.arguments.map(arg =>\n evaluateAST(arg, context)\n );\n\n return fn(...args);\n }\n\n /* ===== PIPELINE ===== */\n case \"PipelineExpression\": {\n const leftVal = evaluateAST(node.left, context);\n\n // right must be function\n if (node.right.type === \"CallExpression\") {\n const fnName = node.right.callee.name;\n const fn = fns.get(fnName);\n\n const args = [\n leftVal,\n ...node.right.arguments.map(arg =>\n evaluateAST(arg, context)\n )\n ];\n\n return fn(...args);\n }\n\n if (node.right.type === \"Identifier\") {\n const fn = fns.get(node.right.name);\n return fn(leftVal);\n }\n\n throw new Error(\"Invalid pipeline target\");\n }\n\n /* ===== UNIT CONVERSION ===== */\n case \"UnitConversion\": {\n const from = evaluateAST(node.from, context);\n\n if (!isUnitObj(from)) {\n throw new Error(\"Left side must be a unit value\");\n }\n\n if (!units) {\n throw new Error(\"Unit system not available\");\n }\n\n return units.convert(from.value, from.unit, node.to);\n }\n\n /* ===== ARRAY ===== */\n case \"ArrayExpression\":\n return node.elements.map(el => evaluateAST(el, context));\n\n case \"IndexExpression\": {\n const target = evaluateAST(node.object, context);\n return indexMatrix(target, node.selectors);\n }\n\n /* ===== OBJECT ===== */\n case \"ObjectExpression\": {\n const obj = {};\n for (let p of node.properties) {\n obj[p.key] = evaluateAST(p.value, context);\n }\n return obj;\n }\n\n /* ===== MEMBER ===== */\n case \"MemberExpression\": {\n const obj = evaluateAST(node.object, context);\n\n if (node.optional && obj == null) return undefined;\n\n return obj[node.property.name];\n }\n\n default:\n throw new Error(`Unknown AST node type: ${node.type}`);\n }\n}\n","export function createContext({ variables, functions, units, evaluate}) {\n if (!variables) throw new Error(\"Variable store missing\");\n if (!functions) throw new Error(\"Function registry missing\");\n if (!units) throw new Error(\"Units list missing\");\n if (!evaluate) throw new Error(\"evaluate function missing\");\n\n return {\n variables: variables,\n functions: functions,\n units: units,\n evaluate,\n withScope(scope = {}) {\n const tempVars = {\n ...variables.all?.(),\n ...scope\n };\n return createContext({\n functions: functions,\n evaluate,\n units,\n variables: {\n get: (k) => tempVars[k],\n set: (k, v) => (tempVars[k] = v),\n all: () => tempVars\n }\n });\n\n }\n };\n}","const isValidNumberPair = (a, b) =>\n (typeof a === typeof b) &&\n (typeof a === 'number' || typeof a === 'bigint');\n\nexport const mathOperations = Object.freeze({\n power: function(a, b) {\n if (isValidNumberPair(a, b)) return a ** b;\n throw new Error(\"Invalid types for ^\");\n },\n\n multiply: function(a, b) {\n if (isValidNumberPair(a, b)) return a * b;\n throw new Error(\"Invalid types for *\");\n },\n\n divide: function(a, b) {\n if (isValidNumberPair(a, b)) {\n if (b === 0) throw new Error(\"Division by zero\");\n return a / b;\n }\n throw new Error(\"Invalid types for /\");\n },\n\n add: function(a, b) {\n if (isValidNumberPair(a, b)) return a + b;\n if (typeof a === 'string' && typeof b === 'string') return a + b;\n throw new Error(\"Invalid types for +\");\n },\n subtract: function(a, b) {\n if (isValidNumberPair(a, b)) return a - b;\n throw new Error(\"Invalid types for -\");\n },\n\n modulus: function(a, b) {\n if (isValidNumberPair(a, b)) return a % b;\n throw new Error(\"Invalid types for %\");\n }\n});","export function createUnitsStore(initial = {}) {\n let units = { ...initial};\n\n // ---------- Helpers ----------\n\n function getAllUnitsFlat() {\n const result = new Set();\n\n for (const type in units) {\n for (const key in units[type]) {\n const u = units[type][key];\n\n const keyLower = key.toLowerCase();\n result.add(keyLower);\n\n // Unit name\n if (u.unit) {\n const unitLower = u.unit.toLowerCase();\n\n // Avoid duplicate like \"m\" vs \"meter\"\n if (unitLower !== keyLower) {\n // Optional: only single-word units\n if (unitLower.split(/\\s+/).length === 1) {\n result.add(unitLower);\n }\n }\n }\n\n // Symbol\n if (u.symbol) {\n const symbolLower = u.symbol.toLowerCase();\n\n // Avoid duplicate with unit name\n if (!u.unit || symbolLower !== u.unit.toLowerCase()) {\n result.add(symbolLower);\n }\n }\n }\n }\n\n return Array.from(result);\n }\n\n function findUnit(input) {\n input = input.toLowerCase();\n\n for (const type in units) {\n for (const key in units[type]) {\n const u = units[type][key];\n\n if (\n key.toLowerCase() === input ||\n u.unit?.toLowerCase() === input ||\n u.symbol?.toLowerCase() === input\n ) {\n return { type, key , data: u};\n }\n }\n }\n\n return null;\n }\n\n // ---------- Core Convert ----------\n\n function convert(value, fromUnit, toUnit) {\n const from = findUnit(fromUnit);\n const to = findUnit(toUnit);\n\n if (!from) throw new Error(`Unknown unit: ${fromUnit}`);\n if (!to) throw new Error(`Unknown unit: ${toUnit}`);\n\n if (from.type !== to.type) {\n throw new Error(`Cannot convert ${fromUnit} to ${toUnit} (${to.data.unit || to.key}). ${from.data.unit || from.key} conversion units like ${Object.keys(units[from.type]).join(\", \")}`);\n }\n\n const result = value * (from.data.value / to.data.value);\n\n return { value: result, unit: to.key };\n }\n\n // ---------- Public API ----------\n\n return {\n // Get all units\n getUnits: () => units,\n\n // Replace all units\n setUnits: (newUnits) => {\n units = { ...newUnits };\n },\n\n // Update single type\n updateType: (type, data) => {\n units[type] = { ...units[type], ...data };\n },\n\n // Add new unit\n addUnit: (type, key, unitObj) => {\n if (!units[type]) units[type] = {};\n units[type][key] = unitObj;\n },\n compute(op, left, right) {\n\n const isUnit = (v) =>\n v && typeof v === \"object\" && \"value\" in v && \"unit\" in v;\n\n const apply = (a, b) => {\n switch (op) {\n case \"+\": return a + b;\n case \"-\": return a - b;\n case \"*\": return a * b;\n case \"/\": return a / b;\n case \"%\": return a % b;\n case \"^\": return Math.pow(a, b);\n }\n };\n\n // BOTH UNIT\n if (isUnit(left) && isUnit(right)) {\n\n const from = this.findUnit(right.unit);\n const to = this.findUnit(left.unit);\n\n if (from.type !== to.type) {\n throw new Error(`Cannot operate on different unit types`);\n }\n\n // convert right → left unit\n const r = right.value * (from.data.value / to.data.value);\n\n const result = apply(left.value, r);\n\n // multiplication/division produce compound units\n if (op === \"*\") {\n return { value: result, unit: left.unit };\n }\n\n if (op === \"/\") {\n return { value: result, unit: left.unit };\n }\n\n if (op === \"^\") {\n return { value: result, unit: left.unit };\n }\n\n return { value: result, unit: left.unit };\n }\n\n // ================= LEFT UNIT =================\n if (isUnit(left) && !isUnit(right)) {\n const result = apply(left.value, right);\n\n return { value: result, unit: left.unit };\n }\n\n // ================= RIGHT UNIT =================\n if (!isUnit(left) && isUnit(right)) {\n const result = apply(left, right.value);\n\n if (op === \"/\") {\n return { value: result, unit: right.unit };\n }\n\n return { value: result, unit: right.unit };\n }\n\n // ================= NORMAL =================\n return apply(left, right);\n },\n // Convert\n convert,\n\n // Search helpers\n getAllUnitsFlat,\n findUnit\n };\n}\n","export const globalUnits = {\n // Length\n length: {\n m: { value: 1, unit: 'meter', symbol: 'm' },\n cm: { value: 0.01, unit: 'centimeter', symbol: 'cm' },\n mm: { value: 0.001, unit: 'millimeter', symbol: 'mm' },\n km: { value: 1000, unit: 'kilometer', symbol: 'km' },\n um: { value: 0.000001, unit: 'micrometer', symbol: 'um', note: 'also called micron' },\n nm: { value: 0.000000001, unit: 'nanometer', symbol: 'nm' },\n px: { value: 0.000264583, unit: 'pixel', symbol: 'px', note: '96dpi standard' },\n em: { value: 0.000264583 * 16, unit: 'em', symbol: 'em', note: '1em = 16px by default' },\n rem: { value: 0.000264583 * 16, unit: 'rem', symbol: 'rem', note: 'root em = 16px by default' },\n pt: { value: 0.000352778, unit: 'point', symbol: 'pt', note: '1pt = 1/72 inch' },\n pc: { value: 0.00423333, unit: 'pica', symbol: 'pc', note: '1pc = 12pt' },\n inch: { value: 0.0254, unit: 'inch', symbol: 'in' },\n ft: { value: 0.3048, unit: 'foot', symbol: 'ft' },\n yd: { value: 0.9144, unit: 'yard', symbol: 'yd' },\n mi: { value: 1609.344, unit: 'mile', symbol: 'mi' },\n thou: { value: 0.0000254, unit: 'mil', symbol: 'thou', note: 'thousandth of an inch' },\n furlong: { value: 201.168, unit: 'furlong', symbol: 'fur', note: '220 yards' },\n nmi: { value: 1852, unit: 'nautical mile', symbol: 'nmi' },\n fathom: { value: 1.8288, unit: 'fathom', symbol: 'fathom' },\n au: { value: 1.496e11, unit: 'astronomical unit', symbol: 'AU' },\n ly: { value: 9.4607e15, unit: 'light year', symbol: 'ly' },\n pc: { value: 3.0857e16, unit: 'parsec', symbol: 'pc' }\n },\n\n // Weight / Mass\n weight: {\n mg: { value: 1e-6, unit: 'milligram', symbol: 'mg' },\n g: { value: 0.001, unit: 'gram', symbol: 'g' },\n kg: { value: 1, unit: 'kilogram', symbol: 'kg' },\n t: { value: 1000, unit: 'tonne', symbol: 't', note: 'metric ton' },\n lb: { value: 0.453592, unit: 'pound', symbol: 'lb' },\n oz: { value: 0.0283495, unit: 'ounce', symbol: 'oz' },\n stone: { value: 6.35029, unit: 'stone', symbol: 'st', note: '1 stone = 14 lb' }\n },\n\n // Time\n time: {\n s: { value: 1, unit: 'second', symbol: 's' },\n min: { value: 60, unit: 'minute', symbol: 'min' },\n h: { value: 3600, unit: 'hour', symbol: 'h' },\n day: { value: 86400, unit: 'day', symbol: 'd' },\n week: { value: 604800, unit: 'week', symbol: 'wk' },\n month: { value: 2629800, unit: 'month', symbol: 'mo', note: 'average month = 30.44 days' },\n year: { value: 31557600, unit: 'year', symbol: 'yr', note: 'average year = 365.25 days' }\n },\n\n // Voltage\n voltage: {\n V: { value: 1, unit: 'volt', symbol: 'V' },\n mV: { value: 0.001, unit: 'millivolt', symbol: 'mV' },\n kV: { value: 1000, unit: 'kilovolt', symbol: 'kV' },\n MV: { value: 1e6, unit: 'megavolt', symbol: 'MV' },\n GV: { value: 1e9, unit: 'gigavolt', symbol: 'GV' },\n statV: { value: 299.792458, unit: 'statvolt', symbol: 'statV', note: 'CGS unit' },\n abV: { value: 1e-8, unit: 'abvolt', symbol: 'abV', note: 'CGS electromagnetic unit' }\n },\n\n // Frequency\n frequency: {\n Hz: { value: 1, unit: 'hertz', symbol: 'Hz', note: '1 cycle per second' },\n kHz: { value: 1e3, unit: 'kilohertz', symbol: 'kHz' },\n MHz: { value: 1e6, unit: 'megahertz', symbol: 'MHz' },\n GHz: { value: 1e9, unit: 'gigahertz', symbol: 'GHz' },\n THz: { value: 1e12, unit: 'terahertz', symbol: 'THz' }\n },\n\n // Power\n power: {\n W: { value: 1, unit: 'watt', symbol: 'W', note: '1 joule per second' },\n mW: { value: 0.001, unit: 'milliwatt', symbol: 'mW' },\n kW: { value: 1000, unit: 'kilowatt', symbol: 'kW' },\n MW: { value: 1e6, unit: 'megawatt', symbol: 'MW' },\n GW: { value: 1e9, unit: 'gigawatt', symbol: 'GW' },\n HP: { value: 745.7, unit: 'horsepower', symbol: 'HP', note: 'mechanical HP = 745.7 W' },\n kcal_per_h: { value: 1.163, unit: 'kilocalorie per hour', symbol: 'kcal/h', note: '= 1.163 W' },\n BTU_per_h: { value: 0.29307107, unit: 'BTU per hour', symbol: 'BTU/h', note: '= 0.293 W' }\n },\n\n // Sound\n sound: {\n dB: { value: 1, unit: 'decibel', symbol: 'dB', note: 'logarithmic unit of sound intensity' },\n dBA: { value: 1, unit: 'A-weighted decibel', symbol: 'dBA', note: 'Adjusted for human hearing' },\n dBC: { value: 1, unit: 'C-weighted decibel', symbol: 'dBC', note: 'Flat weighting for high-level sounds' }\n },\n\n // Temperature\n temperature: {\n K: { value: 1, unit: 'kelvin', symbol: 'K' },\n C: { value: 1, unit: 'Celsius', symbol: '°C', note: '°C → K: add 273.15' },\n F: { value: 1, unit: 'Fahrenheit', symbol: '°F', note: '°F → K: (°F - 32) * 5/9 + 273.15' }\n },\n\n // Pressure\n pressure: {\n Pa: { value: 1, unit: 'pascal', symbol: 'Pa' },\n kPa: { value: 1000, unit: 'kilopascal', symbol: 'kPa' },\n MPa: { value: 1e6, unit: 'megapascal', symbol: 'MPa' },\n bar: { value: 1e5, unit: 'bar', symbol: 'bar' },\n atm: { value: 101325, unit: 'atmosphere', symbol: 'atm' },\n psi: { value: 6894.757, unit: 'pound per square inch', symbol: 'psi' },\n mmHg:{ value: 133.322, unit: 'millimeter of mercury', symbol: 'mmHg' }\n },\n\n // Energy\n energy: {\n J: { value: 1, unit: 'joule', symbol: 'J' },\n kJ: { value: 1000, unit: 'kilojoule', symbol: 'kJ' },\n cal: { value: 4.184, unit: 'calorie', symbol: 'cal' },\n kcal:{ value: 4184, unit: 'kilocalorie', symbol: 'kcal' },\n eV: { value: 1.60218e-19, unit: 'electronvolt', symbol: 'eV' },\n BTU: { value: 1055.06, unit: 'BTU', symbol: 'BTU' }\n },\n\n // Force\n force: {\n N: { value: 1, unit: 'newton', symbol: 'N' },\n kN: { value: 1000, unit: 'kilonewton', symbol: 'kN' },\n lbf: { value: 4.44822, unit: 'pound-force', symbol: 'lbf' },\n kgf: { value: 9.80665, unit: 'kilogram-force', symbol: 'kgf' },\n dyne:{ value: 1e-5, unit: 'dyne', symbol: 'dyn' }\n },\n\n // Area\n area: {\n m2: { value: 1, unit: 'square meter', symbol: 'm²' },\n cm2: { value: 0.0001, unit: 'square centimeter', symbol: 'cm²' },\n km2: { value: 1e6, unit: 'square kilometer', symbol: 'km²' },\n acre: { value: 4046.856, unit: 'acre', symbol: 'acre' },\n hectare:{ value: 10000, unit: 'hectare', symbol: 'ha' },\n ft2: { value: 0.092903, unit: 'square foot', symbol: 'ft²' },\n yd2: { value: 0.836127, unit: 'square yard', symbol: 'yd²' }\n },\n\n // Volume\n volume: {\n m3: { value: 1, unit: 'cubic meter', symbol: 'm³' },\n L: { value: 0.001, unit: 'liter', symbol: 'L' },\n mL: { value: 1e-6, unit: 'milliliter', symbol: 'mL' },\n gallon:{ value: 0.00378541, unit: 'US gallon', symbol: 'gal' },\n pint: { value: 0.000473176, unit: 'US pint', symbol: 'pt' },\n floz: { value: 2.9574e-5, unit: 'US fluid ounce', symbol: 'fl oz' }\n },\n\n // Electrical Current\n current: {\n A: { value: 1, unit: 'ampere', symbol: 'A' },\n mA: { value: 0.001, unit: 'milliampere', symbol: 'mA' },\n uA: { value: 0.000001, unit: 'microampere', symbol: 'uA' },\n kA: { value: 1000, unit: 'kiloampere', symbol: 'kA' }\n },\n\n // Resistance / Conductance\n resistance: {\n ohm: { value: 1, unit: 'ohm' },\n kohm: { value: 1000, unit: 'kiloohm'},\n megaohm: { value: 1e6, unit: 'megaohm'},\n S: { value: 1, unit: 'siemens', symbol: 'S', note: 'conductance' }\n },\n\n // Capacitance / Inductance\n capacitance: {\n F: { value: 1, unit: 'farad', symbol: 'F' },\n mF: { value: 0.001, unit: 'millifarad'},\n uF: { value: 0.000001, unit: 'microfarad' }\n },\n inductance: {\n H: { value: 1, unit: 'henry', symbol: 'H' },\n mH: { value: 0.001, unit: 'millihenry', symbol: 'mH' },\n uH: { value: 0.000001, unit: 'microhenry', symbol: 'uH' }\n },\n\n // Luminous Intensity / Illuminance\n light: {\n cd: { value: 1, unit: 'candela', symbol: 'cd' },\n lm: { value: 1, unit: 'lumen', symbol: 'lm' },\n lx: { value: 1, unit: 'lux', symbol: 'lx' }\n },\n\n // Data / Digital Storage\n data: {\n bit: { value: 1, unit: 'bit', symbol: 'bit' },\n B: { value: 8, unit: 'byte', symbol: 'B' },\n KB: { value: 8e3, unit: 'kilobyte', symbol: 'KB' },\n MB: { value: 8e6, unit: 'megabyte', symbol: 'MB' },\n GB: { value: 8e9, unit: 'gigabyte', symbol: 'GB' },\n TB: { value: 8e12, unit: 'terabyte', symbol: 'TB' }\n },\n\n // Angle\n angle: {\n deg: { value: 1, unit: 'degree', symbol: '°' },\n rad: { value: 57.2958, unit: 'radian', symbol: 'rad', note: '1 rad = 57.2958°' },\n grad:{ value: 0.9, unit: 'grad', symbol: 'grad', note: '1 grad = 0.9°' }\n },\n radiation: {\n // Absorbed Dose\n Gy: { value: 1, unit: 'gray', symbol: 'Gy', note: 'Absorbed dose: 1 Gy = 1 J/kg' },\n mGy: { value: 0.001, unit: 'milligray', symbol: 'mGy' },\n rad: { value: 0.01, unit: 'rad', symbol: 'rad', note: '1 rad = 0.01 Gy' },\n\n // Dose Equivalent\n Sv: { value: 1, unit: 'sievert', symbol: 'Sv', note: 'Biological effect dose equivalent' },\n mSv: { value: 0.001, unit: 'millisievert', symbol: 'mSv' },\n rem: { value: 0.01, unit: 'rem', symbol: 'rem', note: '1 rem = 0.01 Sv' },\n\n // Radioactivity\n Bq: { value: 1, unit: 'becquerel', symbol: 'Bq', note: '1 decay per second' },\n kBq: { value: 1e3, unit: 'kilobecquerel', symbol: 'kBq' },\n MBq: { value: 1e6, unit: 'megabecquerel', symbol: 'MBq' },\n GBq: { value: 1e9, unit: 'gigabecquerel', symbol: 'GBq' },\n Ci: { value: 3.7e10, unit: 'curie', symbol: 'Ci', note: '1 Ci = 3.7 x 10¹⁰ decays per second' },\n mCi: { value: 3.7e7, unit: 'millicurie', symbol: 'mCi' }\n }\n};","const validVarName = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\nexport function createVarStore(initial = {}) {\n let store = Object.create(null);\n \n\n for (const key in initial) {\n store[key] = initial[key];\n }\n\n return {\n set(name, value, { override = true } = {}) {\n\n // Name validation\n if (typeof name !== \"string\" || !name) {\n throw new Error(\"Variable name must be a non-empty string\");\n }\n\n if (!validVarName.test(name)) {\n throw new Error(`Variable Name Error: '${name}' is not a valid variable name`);\n }\n\n // Value validation\n if (value === undefined) {\n throw new Error(`Variable Value Error: '${name}' cannot be undefined`);\n }\n\n // Prevent overwrite (optional)\n if (!override && name in variablesDB) {\n throw new Error(`Variable '${name}' already exists`);\n }\n\n store[name] = value;\n },\n\n //get variable\n get(name) {\n return store[name];\n },\n\n // check existence\n has(name) {\n return Object.prototype.hasOwnProperty.call(store, name);\n },\n\n // remove variable\n remove(name) {\n delete store[name];\n },\n\n // get all variables (snapshot)\n all() {\n return { ...store };\n },\n\n // clear all\n clear() {\n store = Object.create(null);\n },\n\n // merge multiple variables\n merge(obj = {}) {\n for (const key in obj) {\n store[key] = obj[key];\n }\n },\n\n // clone store (for scoped instances) \n clone() {\n return createVarStore(store);\n }\n };\n}\n\nexport default { createVarStore };","export function createFunctionRegistry(initial = {}) {\n const store = Object.create(null);\n\n for (const key in initial) {\n if (typeof initial[key] === \"function\") {\n store[key] = initial[key];\n }\n }\n\n return {\n getAllFunctionsName() {\n return Object.keys(store);\n },\n // register new formula\n register(name, fn) {\n if (typeof name !== \"string\" || !name) {\n throw new Error(\"Formula name must be a non-empty string\");\n }\n\n if (typeof fn !== \"function\") {\n throw new Error(`Formula \"${name}\" must be callable`);\n }\n\n store[name] = fn;\n },\n\n // get formula\n get(name) {\n return store[name];\n },\n\n // check existence\n has(name) {\n return Object.prototype.hasOwnProperty.call(store, name);\n },\n\n // remove formula\n remove(name) {\n delete store[name];\n },\n\n // list all\n all() {\n return { ...store };\n },\n\n // clear registry\n clear() {\n for (const key in store) {\n delete store[key];\n }\n },\n\n // extend multiple\n extend(formulas = {}) {\n for (const name in formulas) {\n if (typeof formulas[name] === \"function\") {\n store[name] = formulas[name];\n }\n }\n },\n\n // clone (for scoped instances)\n clone() {\n return createFormulaRegistry(store);\n }\n };\n}","import { unwrapDenseMatrix, wrapDenseMatrix } from \"../utils/matrix.js\";\n\nfunction validateSquareMatrix(matrix) {\n matrix = unwrapDenseMatrix(matrix);\n if (!Array.isArray(matrix) || matrix.length === 0) {\n throw new Error(\"det() expects a non-empty matrix\");\n }\n\n if (!matrix.every(Array.isArray)) {\n throw new Error(\"det() expects a 2D matrix\");\n }\n\n const size = matrix.length;\n if (!matrix.every((row) => row.length === size)) {\n throw new Error(\"det() expects a square matrix\");\n }\n\n for (const row of matrix) {\n for (const value of row) {\n if (typeof value !== \"number\" && typeof value !== \"bigint\") {\n throw new Error(\"det() matrix values must be numeric\");\n }\n }\n }\n}\n\nfunction determinant(matrix) {\n matrix = unwrapDenseMatrix(matrix);\n validateSquareMatrix(matrix);\n\n if (matrix.length === 1) {\n return matrix[0][0];\n }\n\n if (matrix.length === 2) {\n return (matrix[0][0] * matrix[1][1]) - (matrix[0][1] * matrix[1][0]);\n }\n\n return matrix[0].reduce((sum, value, columnIndex) => {\n const minor = matrix.slice(1).map((row) =>\n row.filter((_, index) => index !== columnIndex)\n );\n const cofactor = columnIndex % 2 === 0 ? value : -value;\n return sum + (cofactor * determinant(minor));\n }, 0);\n}\n\nfunction toLinearArray(value) {\n const unwrapped = unwrapDenseMatrix(value);\n return Array.isArray(unwrapped) ? unwrapped : value;\n}\n\nfunction asMatrixData(value) {\n const data = unwrapDenseMatrix(value);\n if (!Array.isArray(data)) {\n throw new Error(\"Expected matrix data\");\n }\n return data;\n}\n\nfunction solveLinearSystem(coefficients, constants) {\n const n = coefficients.length;\n const augmented = coefficients.map((row, rowIndex) => [...row, constants[rowIndex]]);\n\n for (let pivot = 0; pivot < n; pivot++) {\n let maxRow = pivot;\n let maxValue = Math.abs(augmented[pivot][pivot]);\n\n for (let row = pivot + 1; row < n; row++) {\n const current = Math.abs(augmented[row][pivot]);\n if (current > maxValue) {\n maxValue = current;\n maxRow = row;\n }\n }\n\n if (maxValue === 0) {\n throw new Error(\"Linear system is singular\");\n }\n\n if (maxRow !== pivot) {\n [augmented[pivot], augmented[maxRow]] = [augmented[maxRow], augmented[pivot]];\n }\n\n const pivotValue = augmented[pivot][pivot];\n for (let col = pivot; col <= n; col++) {\n augmented[pivot][col] /= pivotValue;\n }\n\n for (let row = 0; row < n; row++) {\n if (row === pivot) continue;\n const factor = augmented[row][pivot];\n for (let col = pivot; col <= n; col++) {\n augmented[row][col] -= factor * augmented[pivot][col];\n }\n }\n }\n\n return augmented.map((row) => row[n]);\n}\n\nfunction lupDecomposition(input) {\n const matrix = asMatrixData(input).map((row) => [...row]);\n validateSquareMatrix(matrix);\n\n const n = matrix.length;\n const permutation = Array.from({ length: n }, (_, index) => index);\n\n for (let pivot = 0; pivot < n; pivot++) {\n let maxRow = pivot;\n let maxValue = Math.abs(matrix[pivot][pivot]);\n\n for (let row = pivot + 1; row < n; row++) {\n const current = Math.abs(matrix[row][pivot]);\n if (current > maxValue) {\n maxValue = current;\n maxRow = row;\n }\n }\n\n if (maxValue === 0) {\n throw new Error(\"Matrix is singular\");\n }\n\n if (maxRow !== pivot) {\n [matrix[pivot], matrix[maxRow]] = [matrix[maxRow], matrix[pivot]];\n [permutation[pivot], permutation[maxRow]] = [permutation[maxRow], permutation[pivot]];\n }\n\n for (let row = pivot + 1; row < n; row++) {\n matrix[row][pivot] /= matrix[pivot][pivot];\n for (let col = pivot + 1; col < n; col++) {\n matrix[row][col] -= matrix[row][pivot] * matrix[pivot][col];\n }\n }\n }\n\n const L = matrix.map((row, rowIndex) =>\n row.map((value, colIndex) => {\n if (rowIndex === colIndex) return 1;\n if (rowIndex > colIndex) return value;\n return 0;\n })\n );\n\n const U = matrix.map((row, rowIndex) =>\n row.map((value, colIndex) => (rowIndex <= colIndex ? value : 0))\n );\n\n return {\n L: wrapDenseMatrix(L),\n U: wrapDenseMatrix(U),\n p: permutation\n };\n}\n\nfunction linearSolve(aInput, bInput) {\n const { L, U, p } = lupDecomposition(aInput);\n const a = asMatrixData(aInput);\n const bData = asMatrixData(bInput);\n const bVector = Array.isArray(bData[0]) ? bData.map((row) => row[0]) : bData;\n\n if (a.length !== bVector.length) {\n throw new Error(\"Right-hand side dimension mismatch\");\n }\n\n const permutedB = p.map((index) => bVector[index]);\n const y = new Array(a.length).fill(0);\n\n for (let row = 0; row < a.length; row++) {\n y[row] = permutedB[row];\n for (let col = 0; col < row; col++) {\n y[row] -= L.data[row][col] * y[col];\n }\n }\n\n const x = new Array(a.length).fill(0);\n for (let row = a.length - 1; row >= 0; row--) {\n x[row] = y[row];\n for (let col = row + 1; col < a.length; col++) {\n x[row] -= U.data[row][col] * x[col];\n }\n x[row] /= U.data[row][row];\n }\n\n return wrapDenseMatrix(x.map((value) => [value]));\n}\n\nfunction solveLyapunov(aInput, qInput) {\n const A = asMatrixData(aInput).map((row) => [...row]);\n const Q = asMatrixData(qInput).map((row) => [...row]);\n validateSquareMatrix(A);\n validateSquareMatrix(Q);\n\n const n = A.length;\n if (Q.length !== n) {\n throw new Error(\"A and Q must have the same dimensions\");\n }\n\n const coefficients = [];\n const constants = [];\n\n for (let row = 0; row < n; row++) {\n for (let col = 0; col < n; col++) {\n const equation = new Array(n * n).fill(0);\n\n for (let k = 0; k < n; k++) {\n equation[k * n + col] += A[row][k];\n equation[row * n + k] += A[col][k];\n }\n\n coefficients.push(equation);\n constants.push(-Q[row][col]);\n }\n }\n\n const solution = solveLinearSystem(coefficients, constants);\n const X = [];\n\n for (let row = 0; row < n; row++) {\n X.push(solution.slice(row * n, (row + 1) * n));\n }\n\n return wrapDenseMatrix(X);\n}\n\nfunction evaluatePolynomial(coefficients, x) {\n return coefficients.reduce((sum, coefficient, index) => sum + (coefficient * (x ** index)), 0);\n}\n\nfunction syntheticDivide(coefficients, root) {\n const descending = [...coefficients].reverse();\n const quotient = [descending[0]];\n\n for (let index = 1; index < descending.length - 1; index++) {\n quotient.push(descending[index] + (quotient[index - 1] * root));\n }\n\n const remainder = descending[descending.length - 1] + (quotient[quotient.length - 1] * root);\n return {\n quotient: quotient.reverse(),\n remainder\n };\n}\n\nfunction solveQuadratic(coefficients) {\n const [c, b, a] = coefficients;\n const discriminant = (b ** 2) - (4 * a * c);\n if (discriminant < 0) {\n throw new Error(\"Only real roots are supported\");\n }\n\n const sqrtDisc = Math.sqrt(discriminant);\n return [\n (-b + sqrtDisc) / (2 * a),\n (-b - sqrtDisc) / (2 * a)\n ];\n}\n\nfunction polynomialRoots(...coefficients) {\n while (coefficients.length > 1 && coefficients[coefficients.length - 1] === 0) {\n coefficients.pop();\n }\n\n const degree = coefficients.length - 1;\n if (degree < 1) {\n throw new Error(\"polynomialRoot() expects at least a linear polynomial\");\n }\n\n if (degree === 1) {\n const [b, a] = coefficients;\n return [-b / a];\n }\n\n if (degree === 2) {\n return solveQuadratic(coefficients);\n }\n\n if (degree === 3) {\n const constant = coefficients[0];\n const leading = coefficients[3];\n const candidates = [];\n const limit = Math.abs(constant);\n\n for (let divisor = 1; divisor <= Math.max(1, limit); divisor++) {\n if (limit % divisor === 0) {\n candidates.push(divisor, -divisor);\n }\n }\n\n for (const candidate of candidates) {\n if (evaluatePolynomial(coefficients, candidate) === 0) {\n const reduced = syntheticDivide(coefficients, candidate);\n const remainingRoots = solveQuadratic(reduced.quotient);\n return [candidate, ...remainingRoots];\n }\n }\n }\n\n throw new Error(\"polynomialRoot() currently supports degree up to 3\");\n}\n\nfunction dotProduct(a, b) {\n return a.reduce((sum, value, index) => sum + (value * b[index]), 0);\n}\n\nfunction vectorNorm(vector) {\n return Math.sqrt(dotProduct(vector, vector));\n}\n\nfunction scaleVector(vector, scalar) {\n return vector.map((value) => value * scalar);\n}\n\nfunction subtractVectors(a, b) {\n return a.map((value, index) => value - b[index]);\n}\n\nfunction transpose(matrix) {\n return matrix[0].map((_, colIndex) => matrix.map((row) => row[colIndex]));\n}\n\nfunction qrDecomposition(input) {\n const A = asMatrixData(input).map((row) => [...row]);\n if (!A.length || !A.every((row) => row.length === A[0].length)) {\n throw new Error(\"qr() expects a rectangular matrix\");\n }\n\n const rowCount = A.length;\n const colCount = A[0].length;\n const columns = transpose(A);\n const qColumns = [];\n\n for (let col = 0; col < colCount; col++) {\n let vector = [...columns[col]];\n\n for (let existing = 0; existing < qColumns.length; existing++) {\n const projection = dotProduct(qColumns[existing], columns[col]);\n vector = subtractVectors(vector, scaleVector(qColumns[existing], projection));\n }\n\n const norm = vectorNorm(vector);\n if (norm === 0) {\n throw new Error(\"qr() requires linearly independent columns\");\n }\n\n qColumns.push(scaleVector(vector, 1 / norm));\n }\n\n for (let basisIndex = 0; qColumns.length < rowCount && basisIndex < rowCount; basisIndex++) {\n let candidate = Array.from({ length: rowCount }, (_, index) => (index === basisIndex ? 1 : 0));\n\n for (const column of qColumns) {\n const projection = dotProduct(column, candidate);\n candidate = subtractVectors(candidate, scaleVector(column, projection));\n }\n\n const norm = vectorNorm(candidate);\n if (norm > 1e-10) {\n qColumns.push(scaleVector(candidate, 1 / norm));\n }\n }\n\n const Q = Array.from({ length: rowCount }, (_, rowIndex) =>\n qColumns.map((column) => column[rowIndex])\n );\n\n const fullR = Array.from({ length: rowCount }, () => Array(colCount).fill(0));\n for (let row = 0; row < rowCount; row++) {\n for (let col = 0; col < colCount; col++) {\n fullR[row][col] = dotProduct(qColumns[row], columns[col]);\n }\n }\n\n return {\n Q: wrapDenseMatrix(Q),\n R: wrapDenseMatrix(fullR)\n };\n}\n\nfunction splitTerms(expression) {\n const normalized = expression.replace(/\\s+/g, \"\");\n if (!normalized) {\n return [];\n }\n\n return normalized\n .replace(/-/g, \"+-\")\n .split(\"+\")\n .filter(Boolean);\n}\n\nfunction parsePolynomial(expression, variable) {\n const terms = splitTerms(expression);\n const coefficients = new Map();\n\n for (const term of terms) {\n if (term.includes(variable)) {\n const [rawCoeff, rawPower] = term.split(variable);\n let coefficient;\n\n if (rawCoeff === \"\" || rawCoeff === \"+\") coefficient = 1;\n else if (rawCoeff === \"-\") coefficient = -1;\n else {\n const cleaned = rawCoeff.endsWith(\"*\") ? rawCoeff.slice(0, -1) : rawCoeff;\n coefficient = Number(cleaned);\n }\n\n if (!Number.isFinite(coefficient)) {\n throw new Error(\"Unsupported algebra term\");\n }\n\n let power = 1;\n if (rawPower) {\n if (!rawPower.startsWith(\"^\")) {\n throw new Error(\"Unsupported algebra term\");\n }\n\n power = Number(rawPower.slice(1));\n }\n\n if (!Number.isInteger(power) || power < 0) {\n throw new Error(\"Only non-negative integer powers are supported\");\n }\n\n coefficients.set(power, (coefficients.get(power) || 0) + coefficient);\n } else {\n const constant = Number(term);\n if (!Number.isFinite(constant)) {\n throw new Error(\"Unsupported algebra term\");\n }\n coefficients.set(0, (coefficients.get(0) || 0) + constant);\n }\n }\n\n return coefficients;\n}\n\nfunction formatPolynomial(coefficients, variable) {\n const ordered = [...coefficients.entries()]\n .filter(([, coefficient]) => coefficient !== 0)\n .sort((a, b) => b[0] - a[0]);\n\n if (!ordered.length) {\n return \"0\";\n }\n\n return ordered.map(([power, coefficient], index) => {\n const negative = coefficient < 0;\n const absCoeff = Math.abs(coefficient);\n let body;\n\n if (power === 0) {\n body = `${absCoeff}`;\n } else if (power === 1) {\n body = absCoeff === 1 ? variable : `${absCoeff} * ${variable}`;\n } else {\n body = absCoeff === 1\n ? `${variable}^${power}`\n : `${absCoeff} * ${variable}^${power}`;\n }\n\n if (index === 0) {\n return negative ? `-${body}` : body;\n }\n\n return negative ? `- ${body}` : `+ ${body}`;\n }).join(\" \");\n}\n\nfunction simplifyExpression(expression) {\n const compact = expression.replace(/\\s+/g, \"\");\n const variableMatch = compact.match(/[a-zA-Z]+/);\n const variable = variableMatch?.[0] || \"x\";\n const coefficients = parsePolynomial(expression, variable);\n return formatPolynomial(coefficients, variable);\n}\n\nfunction derivativeExpression(expression, variable) {\n const coefficients = parsePolynomial(expression, variable);\n const derived = new Map();\n\n for (const [power, coefficient] of coefficients.entries()) {\n if (power === 0) continue;\n derived.set(power - 1, (derived.get(power - 1) || 0) + (coefficient * power));\n }\n\n return formatPolynomial(derived, variable);\n}\n\nexport const internalFunctions = {\n max: (...args) => {\n if (!args.length) throw new Error(\"max() requires arguments\");\n return Math.max(...args);\n },\n\n min: (...args) => {\n if (!args.length) throw new Error(\"min() requires arguments\");\n return Math.min(...args);\n },\n\n abs: (x) => Math.abs(x),\n\n round: (x) => Math.round(x),\n\n floor: (x) => Math.floor(x),\n\n ceil: (x) => Math.ceil(x),\n\n sqrt: (x) => {\n if (x < 0) throw new Error(\"sqrt() domain error\");\n return Math.sqrt(x);\n },\n\n pow: (a, b) => a ** b,\n det: (matrix) => determinant(matrix),\n polynomialRoot: (...coefficients) => polynomialRoots(...coefficients),\n lsolve: (a, b) => linearSolve(a, b),\n lup: (matrix) => lupDecomposition(matrix),\n lyap: (a, q) => solveLyapunov(a, q),\n qr: (matrix) => qrDecomposition(matrix),\n simplify: (expression) => {\n if (typeof expression !== \"string\") {\n throw new Error(\"simplify() expects an expression string\");\n }\n return simplifyExpression(expression);\n },\n derivative: (expression, variable = \"x\") => {\n if (typeof expression !== \"string\" || typeof variable !== \"string\") {\n throw new Error(\"derivative() expects expression and variable strings\");\n }\n return derivativeExpression(expression, variable);\n },\n\n /* ================= TRIGONOMETRY ================= */\n\n sin: (x) => Math.sin(x),\n cos: (x) => Math.cos(x),\n tan: (x) => Math.tan(x),\n\n asin: (x) => Math.asin(x),\n acos: (x) => Math.acos(x),\n atan: (x) => Math.atan(x),\n\n /* ================= LOG / EXP ================= */\n\n log: (x) => {\n if (x <= 0) throw new Error(\"log() domain error\");\n return Math.log(x);\n },\n\n log10: (x) => {\n if (x <= 0) throw new Error(\"log10() domain error\");\n return Math.log10(x);\n },\n\n exp: (x) => Math.exp(x),\n\n /* ================= RANDOM ================= */\n\n random: () => Math.random(),\n\n /* ================= BOOLEAN / LOGIC ================= */\n\n and: (a, b) => Boolean(a && b),\n\n or: (a, b) => Boolean(a || b),\n\n not: (a) => !a,\n \"!\": (a) => !a,\n\n /* ================= COMPARISON ================= */\n\n eq: (a, b) => a === b,\n\n neq: (a, b) => a !== b,\n \"notEqual\": (a, b) => a !== b,\n\n gt: (a, b) => a > b,\n \"greaterThan\": (a, b) => a > b,\n\n lt: (a, b) => a < b,\n \"lessThan\": (a, b) => a < b,\n\n gte: (a, b) => a >= b,\n \"greaterThanOrEqual\": (a, b) => a >= b,\n\n lte: (a, b) => a <= b,\n \"lessThanOrEqual\": (a, b) => a <= b,\n\n /* ================= UTILITY ================= */\n\n clamp: (x, min, max) => {\n if (min > max) throw new Error(\"clamp(): min > max\");\n return Math.min(Math.max(x, min), max);\n },\n\n if: (condition, a, b) => (condition ? a : b),\n\n /* ================= TYPE ================= */\n\n typeof: (x) => typeof x,\n\n /* ================= STRING ================= */\n\n length: (x) => {\n if (typeof x === \"string\" || Array.isArray(x)) {\n return x.length;\n }\n throw new Error(\"length() expects string or array\");\n }\n};\n","export function buildAST(tokens) {\n let current = 0;\n\n const peek = () => tokens[current];\n const consume = () => tokens[current++];\n\n const match = (type, value) => {\n const t = peek();\n if (!t) return false;\n\n if (t.type !== type) return false;\n\n if (value !== undefined && t.value !== value) return false;\n\n current++;\n return true;\n };\n\n const parseSliceOrIndex = () => {\n let start = null;\n\n if (!(peek()?.type === \"Colon\" || peek()?.type === \"Comma\" || peek()?.type === \"ArrayEnd\")) {\n start = parseExpression();\n }\n\n if (match(\"Colon\")) {\n let end = null;\n\n if (!(peek()?.type === \"Comma\" || peek()?.type === \"ArrayEnd\")) {\n end = parseExpression();\n }\n\n return {\n type: \"SliceExpression\",\n start,\n end\n };\n }\n\n return start;\n };\n\n /* ================= PRIMARY ================= */\n function parsePrimary() {\n const token = consume();\n if (!token) throw new Error(\"Unexpected end of input\");\n\n switch (token.type) {\n case \"Number\":\n case \"BigInt\":\n case \"Boolean\":\n case \"String\":\n return { type: \"Literal\", value: token.value };\n\n case \"ImaginaryLiteral\":\n return { type: \"ImaginaryLiteral\", value: token.value };\n\n case \"NumberWithUnit\":\n return {\n type: \"UnitLiteral\",\n value: token.value,\n unit: token.unit\n };\n\n case \"Identifier\":\n return { type: \"Identifier\", name: token.name };\n \n case \"Function\":\n return {\n type: \"Identifier\",\n name: token.name\n };\n\n case \"Parenthesis\":\n if (token.value === \"(\") {\n const expr = parseExpression();\n\n if (!match(\"Parenthesis\", \")\")) {\n throw new Error(`Expected ')'`);\n }\n\n return expr;\n }\n \n case \"ArrayStart\": {\n const rows = [];\n let currentRow = [];\n\n if (!match(\"ArrayEnd\")) {\n while (true) {\n currentRow.push(parseExpression());\n\n if (match(\"Comma\")) {\n continue;\n }\n\n if (match(\"Semicolon\")) {\n rows.push(currentRow);\n currentRow = [];\n continue;\n }\n\n if (match(\"ArrayEnd\")) {\n rows.push(currentRow);\n break;\n }\n\n throw new Error(`Expected ',', ';', or ']' at ${current}`);\n }\n }\n\n if (!rows.length) {\n return { type: \"ArrayExpression\", elements: [] };\n }\n\n if (rows.length === 1) {\n return { type: \"ArrayExpression\", elements: rows[0] };\n }\n\n return {\n type: \"ArrayExpression\",\n elements: rows.map((elements) => ({\n type: \"ArrayExpression\",\n elements\n }))\n };\n }\n\n case \"BlockStart\": {\n const properties = [];\n\n if (!match(\"BlockEnd\")) {\n do {\n const keyToken = consume();\n\n if (\n keyToken.type !== \"Identifier\" &&\n keyToken.type !== \"String\"\n ) {\n throw new Error(\"Invalid object key\");\n }\n\n if (!match(\"Colon\")) {\n throw new Error(\"Expected ':' after key\");\n }\n\n const value = parseExpression();\n\n properties.push({\n key: keyToken.value,\n value\n });\n\n } while (match(\"Comma\"));\n\n if (!match(\"BlockEnd\")) {\n throw new Error(`Expected '}' at ${current}`);\n }\n }\n\n return { type: \"ObjectExpression\", properties };\n }\n }\n\n throw new Error(`Unexpected token: ${JSON.stringify(token)}`);\n }\n\n /* ================= MEMBER ================= */\n function parseMember() {\n let object = parsePrimary();\n\n while (true) {\n if (match(\"ArrayStart\")) {\n const selectors = [];\n\n if (!match(\"ArrayEnd\")) {\n do {\n selectors.push(parseSliceOrIndex());\n } while (match(\"Comma\"));\n\n if (!match(\"ArrayEnd\")) {\n throw new Error(`Expected ']' at ${current}`);\n }\n }\n\n object = {\n type: \"IndexExpression\",\n object,\n selectors\n };\n continue;\n }\n\n if (match(\"Dot\")) {\n const property = consume();\n\n if (property.type !== \"Identifier\") {\n throw new Error(\"Expected property after '.'\");\n }\n\n object = {\n type: \"MemberExpression\",\n object,\n property: { type: \"Identifier\", name: property.value },\n optional: false\n };\n continue;\n }\n\n if (match(\"Operator\", \"?.\")) {\n const property = consume();\n\n object = {\n type: \"MemberExpression\",\n object,\n property: { type: \"Identifier\", name: property.value },\n optional: true\n };\n continue;\n }\n\n break;\n }\n\n return object;\n }\n\n /* ================= CALL ================= */\n function parseCallChain() {\n let expr = parseMember();\n\n while (peek()?.type === \"Parenthesis\" && peek()?.value === \"(\") {\n consume(); // '('\n\n const args = [];\n\n if (!(peek()?.type === \"Parenthesis\" && peek()?.value === \")\")) {\n do {\n args.push(parseExpression());\n } while (match(\"Comma\"));\n }\n\n if (!match(\"Parenthesis\", \")\")) {\n throw new Error(`Expected ')' at ${current}`);\n }\n\n expr = {\n type: \"CallExpression\",\n callee: expr,\n arguments: args\n };\n }\n\n return expr;\n }\n\n /* ================= UNARY ================= */\n function parseUnary() {\n if (match(\"UnaryOperator\")) {\n const operator = tokens[current - 1].value;\n\n return {\n type: \"UnaryExpression\",\n operator,\n argument: parseUnary()\n };\n }\n\n return parseCallChain();\n }\n\n /* ================= POWER ================= */\n function parsePower() {\n let left = parseUnary();\n\n if (match(\"Operator\", \"^\")) {\n const right = parsePower();\n return {\n type: \"BinaryExpression\",\n operator: \"^\",\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= MULT ================= */\n function parseMultiplication() {\n let left = parsePower();\n\n while (\n match(\"Operator\", \"*\") ||\n match(\"Operator\", \"/\") ||\n match(\"Operator\", \"%\")\n ) {\n const operator = tokens[current - 1].value;\n const right = parsePower();\n\n left = {\n type: \"BinaryExpression\",\n operator,\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= ADD ================= */\n function parseAddition() {\n let left = parseMultiplication();\n\n while (match(\"Operator\", \"+\") || match(\"Operator\", \"-\")) {\n const operator = tokens[current - 1].value;\n const right = parseMultiplication();\n\n left = {\n type: \"BinaryExpression\",\n operator,\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= UNIT CONVERSION ================= */\n function parseUnitConversion() {\n let left = parseAddition();\n\n const nextKeyword = peek();\n if (nextKeyword?.type === \"Keyword\" && [\"to\", \"in\"].includes(nextKeyword.value)) {\n consume();\n const next = consume();\n\n if (!next || next.type !== \"Unit\") {\n throw new Error(`Expected unit after '${nextKeyword.value}'`);\n }\n\n return {\n type: \"UnitConversion\",\n from: left,\n to: next.value\n };\n }\n\n return left;\n }\n\n /* ================= COMPARISON ================= */\n function parseComparison() {\n let left = parseUnitConversion();\n\n while (\n match(\"Operator\", \">\") ||\n match(\"Operator\", \"<\") ||\n match(\"Operator\", \">=\") ||\n match(\"Operator\", \"<=\") ||\n match(\"Operator\", \"==\")\n ) {\n const operator = tokens[current - 1].value;\n const right = parseUnitConversion();\n\n left = {\n type: \"BinaryExpression\",\n operator,\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= LOGICAL ================= */\n function parseLogical() {\n let left = parseComparison();\n\n while (\n match(\"Operator\", \"&&\") ||\n match(\"Operator\", \"||\")\n ) {\n const operator = tokens[current - 1].value;\n const right = parseComparison();\n\n left = {\n type: \"LogicalExpression\",\n operator,\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= NULLISH ================= */\n function parseNullish() {\n let left = parseLogical();\n\n while (match(\"Operator\", \"??\")) {\n const right = parseLogical();\n\n left = {\n type: \"LogicalExpression\",\n operator: \"??\",\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= TERNARY ================= */\n function parseTernary() {\n let test = parseNullish();\n\n if (match(\"Ternary\", \"?\")) {\n const consequent = parseExpression();\n\n if (!match(\"Ternary\", \":\")) {\n throw new Error(\"Expected ':' in ternary\");\n }\n\n const alternate = parseExpression();\n\n return {\n type: \"ConditionalExpression\",\n test,\n consequent,\n alternate\n };\n }\n\n return test;\n }\n\n /* ================= PIPELINE ================= */\n function parsePipeline() {\n let left = parseTernary();\n\n while (match(\"Operator\", \"|>\")) {\n const right = parseTernary();\n\n left = {\n type: \"PipelineExpression\",\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= ASSIGNMENT ================= */\n function parseAssignment() {\n let left = parsePipeline();\n\n if (\n match(\"Operator\", \"=\") ||\n match(\"Operator\", \"+=\") ||\n match(\"Operator\", \"-=\") ||\n match(\"Operator\", \"*=\") ||\n match(\"Operator\", \"/=\")\n ) {\n const operator = tokens[current - 1].value;\n\n if (left.type === \"CallExpression\") {\n const isFunctionTarget =\n left.callee?.type === \"Identifier\" &&\n left.arguments.every((arg) => arg.type === \"Identifier\");\n\n if (!isFunctionTarget) {\n throw new Error(\"Invalid function definition\");\n }\n\n const right = parseAssignment();\n\n return {\n type: \"FunctionAssignmentExpression\",\n operator,\n left: {\n type: \"Identifier\",\n name: left.callee.name\n },\n params: left.arguments.map((arg) => arg.name),\n right\n };\n }\n\n if (\n left.type !== \"Identifier\" &&\n left.type !== \"MemberExpression\" &&\n left.type !== \"IndexExpression\"\n ) {\n throw new Error(\"Invalid assignment target\");\n }\n\n const right = parseAssignment();\n\n return {\n type: \"AssignmentExpression\",\n operator,\n left,\n right\n };\n }\n\n return left;\n }\n\n /* ================= ENTRY ================= */\n function parseExpression() {\n return parseAssignment();\n }\n\n const ast = parseExpression();\n\n if (current < tokens.length) {\n throw new Error(\n `Unexpected token at end: ${JSON.stringify(peek())}`\n );\n }\n\n return ast;\n}\n","import { tokenize } from \"../parser/tokenizer.js\";\n// import { infixToPostfix } from \"../parser/infixToPostfix.js\";\nimport { evaluateAST } from \"../parser/evaluator.js\";\nimport { createContext } from \"./context.js\";\nimport { mathOperations } from \"../math/operations.js\";\n\nimport { createUnitsStore } from \"../utils/store.js\";\nimport { globalUnits } from \"../utils/globalUnits.js\";\n\nimport { createVarStore } from \"../variables/store.js\";\nimport { createFunctionRegistry } from \"../function/registry.js\";\nimport { internalFunctions } from \"../function/internal.js\";\nimport { isDenseMatrixWrapper, serializeExprifyValue, wrapDenseMatrix } from \"../utils/matrix.js\";\n\nimport { buildAST } from \"../parser/astBuild.js\";\n\n\n//\n\nconst isComplex = (value) =>\n value && typeof value === \"object\" && \"re\" in value && \"im\" in value;\n\nconst isUnitValue = (value) =>\n value && typeof value === \"object\" && \"value\" in value && \"unit\" in value;\n\nconst isMatrix = (value) =>\n Array.isArray(value) && value.length > 0 && value.every(Array.isArray);\n\nconst formatComplex = (value) => {\n if (!isComplex(value)) return value;\n\n const real = value.re;\n const imaginary = Math.abs(value.im);\n const sign = value.im < 0 ? \"-\" : \"+\";\n\n if (real === 0) {\n if (value.im === 1) return \"i\";\n if (value.im === -1) return \"-i\";\n return `${value.im}i`;\n }\n\n const imagPart = imaginary === 1 ? \"i\" : `${imaginary}i`;\n return `${real} ${sign} ${imagPart}`;\n};\n\nconst formatScalar = (value) => {\n if (typeof value !== \"number\") {\n return String(value);\n }\n\n if (Number.isInteger(value)) {\n return String(value);\n }\n\n return Number(value.toFixed(14)).toString();\n};\n\nconst formatResult = (value) => {\n if (isComplex(value)) {\n return formatComplex(value);\n }\n\n if (isUnitValue(value)) {\n return `${value.value} ${value.unit}`;\n }\n\n if (isDenseMatrixWrapper(value)) {\n return serializeExprifyValue(value);\n }\n\n if (isMatrix(value)) {\n return value.map((row) => row.map(formatScalar).join(\"\\t\")).join(\"\\n\");\n }\n\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n\n if (value && typeof value === \"object\") {\n return serializeExprifyValue(value);\n }\n\n return value;\n};\n\nclass exprify {\n constructor() {\n // Shared state\n this.math = mathOperations;\n this.units = createUnitsStore(globalUnits);\n this.functions = createFunctionRegistry(internalFunctions);\n this.variables = createVarStore();\n this._cache = new Map();\n this.variables.set(\"pi\", Math.PI);\n this.variables.set(\"e\", Math.E);\n this.addFunction(\"parse\", (expression) => {\n if (typeof expression !== \"string\") {\n throw new Error(\"parse() expects an expression string\");\n }\n return expression;\n });\n this.addFunction(\"leafCount\", (value) => {\n const countLeafTokens = (expression) => {\n const strippedKeys = expression.replace(/(^|[{,]\\s*)[a-zA-Z_][a-zA-Z0-9_]*\\s*:/g, \"$1\");\n const matches = strippedKeys.match(/\\d+(\\.\\d+)?(e[+-]?\\d+)?n?|[a-zA-Z_][a-zA-Z0-9_]*/gi);\n return matches ? matches.length : 0;\n };\n\n let ast = value;\n if (typeof value === \"string\") {\n try {\n ast = this.parse(value).ast;\n } catch {\n return countLeafTokens(value);\n }\n }\n\n const countLeaves = (node) => {\n if (!node || typeof node !== \"object\") return 0;\n\n switch (node.type) {\n case \"Literal\":\n case \"ImaginaryLiteral\":\n case \"UnitLiteral\":\n case \"Identifier\":\n return 1;\n default:\n return Object.values(node).reduce((sum, child) => {\n if (Array.isArray(child)) {\n return sum + child.reduce((inner, item) => inner + countLeaves(item), 0);\n }\n\n return sum + countLeaves(child);\n }, 0);\n }\n };\n\n return countLeaves(ast);\n });\n this.addFunction(\"matrix\", (value) => wrapDenseMatrix(value));\n this.addFunction(\"sparse\", (value) => wrapDenseMatrix(value));\n this.addFunction(\"rationalize\", (expression, withDetails = false) => {\n if (typeof expression !== \"string\") {\n throw new Error(\"rationalize() expects an expression string\");\n }\n\n const normalizedExpression = expression\n .replace(/\\s+/g, \"\")\n .replace(/(\\d)([a-zA-Z(])/g, \"$1*$2\")\n .replace(/([a-zA-Z)])(\\d)/g, \"$1*$2\");\n\n const polyKey = (powers) => JSON.stringify(Object.entries(powers).sort(([a], [b]) => a.localeCompare(b)));\n const keyToPowers = (key) => Object.fromEntries(JSON.parse(key));\n const makePoly = (terms = new Map()) => terms;\n const constPoly = (value) => new Map([[polyKey({}), value]]);\n const varPoly = (name) => new Map([[polyKey({ [name]: 1 }), 1]]);\n const cleanPoly = (poly) => new Map([...poly.entries()].filter(([, coeff]) => coeff !== 0));\n const addPoly = (a, b, sign = 1) => {\n const result = new Map(a);\n for (const [key, coeff] of b.entries()) {\n result.set(key, (result.get(key) || 0) + (sign * coeff));\n }\n return cleanPoly(result);\n };\n const multiplyPoly = (a, b) => {\n const result = new Map();\n for (const [keyA, coeffA] of a.entries()) {\n const powersA = keyToPowers(keyA);\n for (const [keyB, coeffB] of b.entries()) {\n const powersB = keyToPowers(keyB);\n const merged = { ...powersA };\n for (const [name, power] of Object.entries(powersB)) {\n merged[name] = (merged[name] || 0) + power;\n }\n const key = polyKey(merged);\n result.set(key, (result.get(key) || 0) + (coeffA * coeffB));\n }\n }\n return cleanPoly(result);\n };\n const powPoly = (poly, exponent) => {\n let result = constPoly(1);\n for (let index = 0; index < exponent; index++) {\n result = multiplyPoly(result, poly);\n }\n return result;\n };\n const rational = (num, den = constPoly(1)) => ({ num, den });\n const addRat = (a, b, sign = 1) => rational(\n addPoly(\n multiplyPoly(a.num, b.den),\n multiplyPoly(b.num, a.den),\n sign\n ),\n multiplyPoly(a.den, b.den)\n );\n const mulRat = (a, b) => rational(multiplyPoly(a.num, b.num), multiplyPoly(a.den, b.den));\n const divRat = (a, b) => rational(multiplyPoly(a.num, b.den), multiplyPoly(a.den, b.num));\n const negRat = (value) => rational(addPoly(new Map(), value.num, -1), value.den);\n const astToRat = (node) => {\n switch (node.type) {\n case \"Literal\":\n return rational(constPoly(node.value));\n case \"Identifier\":\n return rational(varPoly(node.name));\n case \"UnaryExpression\":\n if (node.operator === \"-\") return negRat(astToRat(node.argument));\n throw new Error(\"Unsupported unary operator\");\n case \"BinaryExpression\": {\n const left = astToRat(node.left);\n const right = astToRat(node.right);\n switch (node.operator) {\n case \"+\": return addRat(left, right);\n case \"-\": return addRat(left, right, -1);\n case \"*\": return mulRat(left, right);\n case \"/\": return divRat(left, right);\n case \"^\": {\n if (node.right.type !== \"Literal\" || !Number.isInteger(node.right.value) || node.right.value < 0) {\n throw new Error(\"Unsupported exponent\");\n }\n return rational(\n powPoly(left.num, node.right.value),\n powPoly(left.den, node.right.value)\n );\n }\n default:\n throw new Error(\"Unsupported operator in rationalize()\");\n }\n }\n default:\n throw new Error(\"Unsupported expression in rationalize()\");\n }\n };\n const formatPoly = (poly) => {\n const entries = [...poly.entries()]\n .filter(([, coeff]) => coeff !== 0)\n .sort(([keyA], [keyB]) => {\n const powersA = keyToPowers(keyA);\n const powersB = keyToPowers(keyB);\n const firstVarA = Object.keys(powersA).sort()[0] || \"\";\n const firstVarB = Object.keys(powersB).sort()[0] || \"\";\n\n if (firstVarA !== firstVarB) {\n return firstVarA.localeCompare(firstVarB);\n }\n\n const degreeA = Object.values(powersA).reduce((sum, value) => sum + value, 0);\n const degreeB = Object.values(powersB).reduce((sum, value) => sum + value, 0);\n return degreeB - degreeA;\n });\n\n if (!entries.length) return \"0\";\n\n return entries.map(([key, coeff], index) => {\n const powers = keyToPowers(key);\n const absCoeff = Math.abs(coeff);\n const variablePart = Object.entries(powers)\n .map(([name, power]) => power === 1 ? name : `${name} ^ ${power}`)\n .join(\" * \");\n let body = variablePart;\n\n if (!body) {\n body = `${absCoeff}`;\n } else if (absCoeff !== 1) {\n body = `${absCoeff} * ${body}`;\n }\n\n if (index === 0) {\n return coeff < 0 ? `- ${body}`.replace(\"- \", \"-\") : body;\n }\n\n return coeff < 0 ? `- ${body}` : `+ ${body}`;\n }).join(\" \");\n };\n\n const ast = this.parse(normalizedExpression).ast;\n const result = astToRat(ast);\n const numerator = formatPoly(result.num);\n const denominator = formatPoly(result.den);\n const variableSet = new Set();\n\n for (const poly of [result.num, result.den]) {\n for (const key of poly.keys()) {\n for (const name of Object.keys(keyToPowers(key))) {\n variableSet.add(name);\n }\n }\n }\n\n if (!withDetails) {\n return `(${numerator}) / (${denominator})`;\n }\n\n return {\n numerator,\n denominator,\n coefficients: [],\n variables: [...variableSet].sort(),\n expression: `(${numerator}) / (${denominator})`\n };\n });\n }\n\n setVariable(name, value) {\n this.variables.set(name, value);\n }\n\n getVariable(name) {\n return this.variables.get(name);\n }\n\n addFunction(name, fn) {\n this.functions.register(name, fn);\n }\n\n _createContext() {\n return createContext({\n functions: this.functions,\n variables: this.variables,\n units: this.units,\n evaluate: this.evaluate.bind(this)\n });\n }\n\n tokenize(expr) {\n if (typeof expr !== \"string\") {\n throw new Error(\"Expression must be a string\");\n }\n return tokenize(expr, this._createContext());\n }\n\n parse(expr) {\n const tokens = this.tokenize(expr);\n const ast = buildAST(tokens);\n return { tokens, ast };\n }\n\n evaluate(expr) {\n const { ast } = this.parse(expr);\n return formatResult(evaluateAST(\n ast,\n this._createContext()\n ));\n }\n\n compile(expr) {\n if (this._cache.has(expr)) {\n return this._cache.get(expr);\n }\n\n const { ast } = this.parse(expr);\n\n const compiledFn = (scope = {}) => {\n const baseContext = this._createContext();\n const scopedContext = baseContext.withScope(scope);\n return formatResult(evaluateAST(ast, scopedContext));\n };\n\n this._cache.set(expr, compiledFn);\n return compiledFn;\n }\n\n clearCache() {\n this._cache.clear();\n }\n\n}\n\nexport default exprify;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exprify.esm.js","sources":["../src/parser/tokenizer.js","../src/utils/matrix.js","../src/math/fraction.js","../src/utils/decimal.js","../src/math/bignumber.js","../src/parser/evaluator.js","../src/core/context.js","../src/math/operations.js","../src/utils/store.js","../src/utils/globalUnits.js","../src/variables/store.js","../src/function/registry.js","../src/function/internal.js","../src/parser/astBuild.js","../src/core/exprify.js"],"sourcesContent":["/** @param {string | any[]} expr */\nexport function tokenize(expr, context = {}) {\n const tokens = [];\n let current = '';\n let quote = '';\n\n const operators = ['+', '-', '*', '/', '%', '^', '=', '>', '<', '!', '&', '|'];\n // Two-char operators checked before single-char to avoid ambiguity (e.g., == vs =)\n const multiOps = [\n '==',\n '>=',\n '<=',\n '&&',\n '||',\n '+=',\n '-=',\n '*=',\n '/=',\n '%=',\n '?.',\n '??',\n '|>',\n '->',\n ];\n\n const parentheses = '()';\n const comma = ',';\n const semicolon = ';';\n const keywords = ['to', 'in'];\n\n const units = context.units?.getAllUnitsFlat?.() || [];\n const isIdentifier = (/** @type {string} */ s) => /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(s);\n\n /**\n * @param {any} str\n * @param {number} charIndex\n */\n function getContext(str, charIndex) {\n const words = str.match(/[a-z0-9]+/gi) || [];\n\n // 2. Identify the current character and the one immediately before it\n const currentChar = str[charIndex] || null;\n const prevChar = charIndex > 0 ? str[charIndex - 1] : null;\n\n // 3. Find the word that contains the current charIndex\n let start = charIndex;\n\n while (start > 0 && /[a-z0-9]/i.test(str[start - 1])) {\n start--;\n }\n\n let end = charIndex;\n\n while (end < str.length && /[a-z0-9]/i.test(str[end])) {\n end++;\n }\n\n const currentWord = str.substring(start, end);\n\n // 4. Find the word that appears before the currentWord in the sequence\n const currentWordIdx = words.indexOf(currentWord);\n const prevWord = currentWordIdx > 0 ? words[currentWordIdx - 1] : null;\n\n // 5. Find the word that appears after the currentWord\n const nextWord =\n currentWordIdx !== -1 && currentWordIdx < words.length - 1 ? words[currentWordIdx + 1] : null;\n\n return {\n prevWord: prevWord,\n prevChar: prevChar,\n currentWord: currentWord,\n currentChar: currentChar,\n nextWord: nextWord,\n };\n }\n\n const isUnaryContext = (\n /** @type {{ type: string; value: any; pos: number; } | { type: string; value: string; pos?: undefined; } | { type: string; value?: undefined; pos?: undefined; } | { type: string; pos: number; value?: undefined; }} */ prev\n ) =>\n !prev ||\n prev.type === 'Operator' ||\n prev.type === 'UnaryOperator' ||\n (prev.type === 'Parenthesis' && prev.value !== ')') ||\n prev.type === 'ArrayStart' ||\n prev.type === 'Semicolon' ||\n prev.type === 'Comma' ||\n prev.type === 'Ternary';\n\n const flushCurrent = (/** @type {string | null} */ nextChar, /** @type {number} */ index) => {\n if (!current) {\n return;\n }\n\n // BOOLEAN\n if (/^(true|false)$/i.test(current)) {\n tokens.push({ type: 'Boolean', value: current.toLowerCase() === 'true' });\n current = '';\n return;\n }\n\n // KEYWORD\n if (keywords.includes(current)) {\n tokens.push({ type: 'Keyword', value: current, pos: index });\n current = '';\n return;\n }\n\n // BIGINT\n if (/^\\d+n$/.test(current)) {\n tokens.push({ type: 'BigInt', value: BigInt(current.slice(0, -1)), pos: index });\n current = '';\n return;\n }\n\n // HEX\n if (/^0x[0-9a-fA-F]+$/.test(current)) {\n tokens.push({ type: 'Number', value: parseInt(current, 16), pos: index });\n current = '';\n return;\n }\n\n // BINARY\n if (/^0b[01]+$/.test(current)) {\n tokens.push({ type: 'Number', value: parseInt(current, 2), pos: index });\n current = '';\n return;\n }\n\n // NUMBER (including scientific)\n if (/^[+-]?(\\d+(\\.\\d+)?|\\.\\d+)(e[+-]?\\d+)?$/i.test(current)) {\n tokens.push({ type: 'Number', value: parseFloat(current), pos: index });\n current = '';\n return;\n }\n\n // IMAGINARY NUMBER\n if (/^[+-]?(\\d+(\\.\\d+)?|\\.\\d+)(e[+-]?\\d+)?i$/i.test(current)) {\n tokens.push({\n type: 'ImaginaryLiteral',\n value: parseFloat(current.slice(0, -1)),\n pos: index,\n });\n current = '';\n return;\n }\n\n // IMAGINARY UNIT\n if (/^[+-]?i$/i.test(current)) {\n const sign = current[0] === '-' ? -1 : 1;\n tokens.push({\n type: 'ImaginaryLiteral',\n value: sign,\n pos: index,\n });\n current = '';\n return;\n }\n\n // NUMBER + UNIT\n const numUnit = current.match(/^([+-]?\\d+(\\.\\d+)?)([a-zA-Z]+)$/);\n if (numUnit) {\n const value = parseFloat(numUnit[1]);\n const unit = numUnit[3];\n\n tokens.push({\n type: units.includes(unit) ? 'NumberWithUnit' : 'UnknownUnit',\n value,\n unit,\n pos: index,\n });\n\n current = '';\n return;\n }\n\n // UNIT\n if (units.includes(current)) {\n const { prevWord } = getContext(expr, index);\n if (nextChar !== '(') {\n if (prevWord) {\n if (!isNaN(parseFloat(prevWord)) || prevWord === 'to' || prevWord === 'in') {\n // console.log(\"Context for unit detection:\", {current, prevWord, nextChar});\n\n tokens.push({ type: 'Unit', value: current, pos: index });\n current = '';\n return;\n }\n }\n }\n }\n\n // IDENTIFIER\n if (isIdentifier(current)) {\n if (nextChar === '(') {\n tokens.push({\n type: 'Function',\n name: current,\n pos: index,\n });\n } else {\n tokens.push({\n type: 'Identifier',\n name: current,\n pos: index,\n });\n }\n\n current = '';\n return;\n }\n\n throw new Error(`Invalid token \"${current}\" at index ${index}`);\n };\n\n for (let i = 0; i < expr.length; i++) {\n const char = expr[i];\n const next = expr[i + 1];\n\n // comments\n if (char === '/' && next === '/') {\n while (i < expr.length && expr[i] !== '\\n') {\n i++;\n }\n continue;\n }\n\n if (char === '/' && next === '*') {\n i += 2;\n while (i < expr.length && !(expr[i] === '*' && expr[i + 1] === '/')) {\n i++;\n }\n i++;\n continue;\n }\n\n // string\n if (`\"'`.includes(char)) {\n if (!quote) {\n quote = char;\n current += char;\n } else if (quote === char) {\n current += char;\n tokens.push({\n type: 'String',\n value: current.slice(1, -1),\n pos: i,\n });\n current = '';\n quote = '';\n } else {\n current += char;\n }\n continue;\n }\n\n if (quote) {\n if (char === '\\\\') {\n current += char + expr[++i];\n } else {\n current += char;\n }\n continue;\n }\n\n // multi operators\n const twoChar = char + next;\n if (multiOps.includes(twoChar)) {\n flushCurrent(char, i);\n tokens.push({ type: 'Operator', value: twoChar, pos: i });\n i++;\n continue;\n }\n\n if (char === '?') {\n tokens.push({ type: 'Ternary', value: '?' });\n continue;\n }\n\n // Colon after '?' is ternary separator; otherwise standalone (range, object key)\n if (char === ':') {\n flushCurrent(char, i);\n const prev = tokens[tokens.length - 1];\n\n if (prev && prev.type === 'Ternary') {\n tokens.push({ type: 'Ternary', value: ':' });\n } else {\n tokens.push({ type: 'Colon' });\n }\n continue;\n }\n\n // Three dots form the spread operator (...)\n if (char === '.' && next === '.' && expr[i + 2] === '.') {\n flushCurrent(char, i);\n tokens.push({ type: 'Spread', pos: i });\n i += 2;\n continue;\n }\n\n // Dot between digits is a decimal separator, not property access\n if (char === '.' && /\\d/.test(current) && /\\d/.test(next)) {\n current += char;\n continue;\n }\n\n if (char === '.') {\n flushCurrent(char, i);\n tokens.push({ type: 'Dot', pos: i });\n continue;\n }\n\n // operators\n if (operators.includes(char)) {\n flushCurrent(char, i);\n\n const prev = tokens[tokens.length - 1];\n if ((char === '-' || char === '!') && isUnaryContext(prev)) {\n tokens.push({ type: 'UnaryOperator', value: char, pos: i });\n } else {\n tokens.push({ type: 'Operator', value: char, pos: i });\n }\n continue;\n }\n\n // parenthesis\n if (parentheses.includes(char)) {\n flushCurrent(char, i);\n tokens.push({ type: 'Parenthesis', value: char, pos: i });\n continue;\n }\n\n // array\n if (char === '[') {\n flushCurrent(char, i);\n tokens.push({ type: 'ArrayStart', pos: i });\n continue;\n }\n\n if (char === ']') {\n flushCurrent(char, i);\n tokens.push({ type: 'ArrayEnd', pos: i });\n continue;\n }\n\n // OBJECT START\n if (char === '{') {\n flushCurrent(char, i);\n tokens.push({ type: 'BlockStart', pos: i });\n continue;\n }\n\n // OBJECT END\n if (char === '}') {\n flushCurrent(char, i);\n tokens.push({ type: 'BlockEnd', pos: i });\n continue;\n }\n\n // comma\n if (char === comma) {\n flushCurrent(char, i);\n tokens.push({ type: 'Comma', pos: i });\n continue;\n }\n\n // semicolon\n if (char === semicolon) {\n flushCurrent(char, i);\n tokens.push({ type: 'Semicolon', pos: i });\n continue;\n }\n\n // space\n if (char === ' ') {\n flushCurrent(next, i);\n continue;\n }\n\n // build token\n current += char;\n\n if (i === expr.length - 1) {\n flushCurrent(null, i);\n }\n }\n\n if (quote) {\n throw new Error('Unclosed string literal');\n }\n\n // merge number + unit\n const merged = [];\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n const next = tokens[i + 1];\n\n if (t?.type === 'Number' && next?.type === 'Unit') {\n merged.push({\n type: 'NumberWithUnit',\n value: t.value,\n unit: next.value,\n pos: t.pos,\n });\n i++;\n continue;\n }\n\n merged.push(t);\n }\n\n // Insert implicit * between tokens where multiplication is implied (e.g., \"2x\" -> \"2*x\", \")(a)\" -> \")*(a)\")\n const final = [];\n for (let i = 0; i < merged.length; i++) {\n const a = merged[i];\n const b = merged[i + 1];\n\n final.push(a);\n\n if (\n a &&\n b &&\n (['Number', 'Identifier'].includes(a.type) ||\n (a.type === 'Parenthesis' && a.value === ')') ||\n a.type === 'ArrayEnd') &&\n (['Identifier', 'Function'].includes(b.type) || (b.type === 'Parenthesis' && b.value === '('))\n ) {\n final.push({ type: 'Operator', value: '*', implicit: true });\n }\n }\n\n return final;\n}\n","export const isDenseMatrixWrapper = (/** @type {any} */ value) =>\n value &&\n typeof value === 'object' &&\n value.exprify === 'DenseMatrix' &&\n 'data' in value &&\n 'size' in value;\n\nexport const cloneMatrixData = (/** @type {any[]} */ value) => {\n if (Array.isArray(value)) {\n return value.map(cloneMatrixData);\n }\n\n return value;\n};\n\nexport const getMatrixSize = (/** @type {any[]} */ data) => {\n if (Array.isArray(data) && data.every(Array.isArray)) {\n return [data.length, data[0]?.length || 0];\n }\n\n if (Array.isArray(data)) {\n return [data.length];\n }\n\n throw new Error('Matrix data must be an array');\n};\n\nexport const wrapDenseMatrix = (/** @type {any[][]} */ data) => ({\n exprify: 'DenseMatrix',\n data: cloneMatrixData(data),\n size: getMatrixSize(data),\n});\n\nexport const unwrapDenseMatrix = (/** @type {any} */ value) =>\n isDenseMatrixWrapper(value) ? cloneMatrixData(value.data) : value;\n\nexport const serializeExprifyValue = (/** @type {any} */ value) => {\n if (isDenseMatrixWrapper(value)) {\n return JSON.stringify(value);\n }\n\n if (Array.isArray(value) || (value && typeof value === 'object')) {\n return JSON.stringify(value, (_, current) => {\n if (isDenseMatrixWrapper(current)) {\n return current;\n }\n\n return current;\n });\n }\n\n return value;\n};\n","const gcd = (/** @type {number} */ a, /** @type {number} */ b) => {\n a = Math.abs(a);\n b = Math.abs(b);\n while (b) {\n [a, b] = [b, a % b];\n }\n return a;\n};\n\n/**\n * @param {any} n\n */\nexport function fraction(n, d = 1) {\n if (typeof n !== 'number' || typeof d !== 'number') {\n throw new Error('Fraction requires numeric arguments');\n }\n if (!Number.isInteger(n) || !Number.isInteger(d)) {\n throw new Error('Fraction requires integer arguments');\n }\n if (d === 0) {\n throw new Error('Fraction denominator cannot be zero');\n }\n if (d < 0) {\n n = -n;\n d = -d;\n }\n const g = gcd(n, d);\n return { n: n / g, d: d / g };\n}\n\n/**\n * @param {any} v\n */\nexport function isFraction(v) {\n return v && typeof v === 'object' && 'n' in v && 'd' in v && !('re' in v) && !('unit' in v);\n}\n\n/**\n * @param {{ n: number; d: number; }} a\n * @param {{ d: number; n: number; }} b\n */\nexport function addFrac(a, b) {\n return fraction(a.n * b.d + b.n * a.d, a.d * b.d);\n}\n\n/**\n * @param {{ n: number; d: number; }} a\n * @param {{ d: number; n: number; }} b\n */\nexport function subFrac(a, b) {\n return fraction(a.n * b.d - b.n * a.d, a.d * b.d);\n}\n\n/**\n * @param {{ n: number; d: number; }} a\n * @param {{ n: number; d: number; }} b\n */\nexport function mulFrac(a, b) {\n return fraction(a.n * b.n, a.d * b.d);\n}\n\n/**\n * @param {{ n: number; d: number; }} a\n * @param {{ d: number; n: number; }} b\n */\nexport function divFrac(a, b) {\n return fraction(a.n * b.d, a.d * b.n);\n}\n\n/**\n * @param {{ n: number; d: number; }} a\n * @param {any} exp\n */\nexport function powFrac(a, exp) {\n if (!Number.isInteger(exp) || exp < 0) {\n return null;\n }\n return fraction(a.n ** exp, a.d ** exp);\n}\n\n/**\n * @param {{ n: any; }} v\n */\nexport function numer(v) {\n if (!isFraction(v)) {\n throw new Error('numer() expects a fraction');\n }\n return v.n;\n}\n\n/**\n * @param {{ d: any; }} v\n */\nexport function denom(v) {\n if (!isFraction(v)) {\n throw new Error('denom() expects a fraction');\n }\n return v.d;\n}\n\n/**\n * @param {{ d: number; n: any; }} v\n */\nexport function formatFraction(v) {\n if (!isFraction(v)) {\n return String(v);\n }\n if (v.d === 1) {\n return String(v.n);\n }\n return `${v.n}/${v.d}`;\n}\n","const MAX_SAFE_DP = 100;\n\nexport class ExprDecimal {\n static DP = 20;\n\n #sign;\n #int;\n #dp;\n\n constructor(value) {\n if (value instanceof ExprDecimal) {\n this.#sign = value.#sign;\n this.#int = value.#int;\n this.#dp = value.#dp;\n return;\n }\n\n if (typeof value === 'bigint') {\n this.#sign = value >= 0n ? 1 : -1;\n this.#int = value >= 0n ? value : -value;\n this.#dp = 0;\n return;\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new Error(`Cannot create ExprDecimal from ${value}`);\n }\n value = String(value);\n }\n\n if (typeof value !== 'string') {\n throw new Error('ExprDecimal expects a number, string, bigint, or ExprDecimal');\n }\n\n let s = value.trim();\n if (s === '') {\n throw new Error('Cannot create ExprDecimal from empty string');\n }\n\n this.#sign = 1;\n if (s[0] === '-') {\n this.#sign = -1;\n s = s.slice(1);\n } else if (s[0] === '+') {\n s = s.slice(1);\n }\n\n let exp = 0;\n const eIdx = s.search(/[eE]/);\n if (eIdx !== -1) {\n exp = parseInt(s.slice(eIdx + 1), 10);\n s = s.slice(0, eIdx);\n }\n\n const dotIdx = s.indexOf('.');\n if (dotIdx === -1) {\n this.#int = BigInt(s || '0');\n this.#dp = 0;\n } else {\n const intPart = s.slice(0, dotIdx) || '0';\n const fracPart = s.slice(dotIdx + 1);\n const combined = intPart + fracPart;\n this.#int = BigInt(combined || '0');\n this.#dp = fracPart.length;\n }\n\n this.#dp -= exp;\n if (this.#dp < 0) {\n this.#int *= 10n ** BigInt(-this.#dp);\n this.#dp = 0;\n }\n\n this.#normalize();\n }\n\n #normalize() {\n while (this.#dp > 0 && this.#int % 10n === 0n) {\n this.#int /= 10n;\n this.#dp--;\n }\n if (this.#int === 0n) {\n this.#sign = 1;\n this.#dp = 0;\n }\n }\n\n #align(other) {\n if (this.#dp === other.#dp) {\n return [this.#int * BigInt(this.#sign), other.#int * BigInt(other.#sign), this.#dp];\n }\n if (this.#dp < other.#dp) {\n const factor = 10n ** BigInt(other.#dp - this.#dp);\n return [this.#int * factor * BigInt(this.#sign), other.#int * BigInt(other.#sign), other.#dp];\n }\n const factor = 10n ** BigInt(this.#dp - other.#dp);\n return [this.#int * BigInt(this.#sign), other.#int * factor * BigInt(other.#sign), this.#dp];\n }\n\n #fromParts(sign, int, dp) {\n const d = new ExprDecimal(0);\n d.#sign = sign;\n d.#int = int < 0n ? -int : int;\n if (int < 0n) {\n d.#sign = -sign;\n }\n d.#dp = dp;\n d.#normalize();\n return d;\n }\n\n plus(other) {\n other = other instanceof ExprDecimal ? other : new ExprDecimal(other);\n const [a, b, dp] = this.#align(other);\n return this.#fromParts(1, a + b, dp);\n }\n\n minus(other) {\n other = other instanceof ExprDecimal ? other : new ExprDecimal(other);\n const [a, b, dp] = this.#align(other);\n return this.#fromParts(1, a - b, dp);\n }\n\n times(other) {\n other = other instanceof ExprDecimal ? other : new ExprDecimal(other);\n const int = this.#int * other.#int;\n const dp = this.#dp + other.#dp;\n return this.#fromParts(this.#sign * other.#sign, int, dp);\n }\n\n div(other) {\n other = other instanceof ExprDecimal ? other : new ExprDecimal(other);\n if (other.#int === 0n) {\n throw new Error('Division by zero');\n }\n const targetDp = Math.min(ExprDecimal.DP, MAX_SAFE_DP);\n const scale = 10n ** BigInt(targetDp + other.#dp);\n const dividend = this.#int * scale;\n const quotient = dividend / other.#int;\n const sign = this.#sign * other.#sign;\n if (quotient === 0n) {\n return new ExprDecimal(0);\n }\n return this.#fromParts(sign, quotient, targetDp);\n }\n\n mod(other) {\n other = other instanceof ExprDecimal ? other : new ExprDecimal(other);\n const quotient = this.div(other);\n const truncated = quotient.#fromParts(\n quotient.#sign,\n quotient.#int - (quotient.#int % 10n ** BigInt(quotient.#dp > 0 ? 1 : 0)),\n 0\n );\n return this.minus(truncated.times(other));\n }\n\n pow(other) {\n other = other instanceof ExprDecimal ? other : new ExprDecimal(other);\n if (other.#dp > 0 || other.#sign !== 1) {\n throw new Error('ExprDecimal pow() supports non-negative integer exponents only');\n }\n const exp = Number(other.#int);\n if (exp > 100) {\n throw new Error('ExprDecimal pow() exponent too large');\n }\n let result = new ExprDecimal(1);\n for (let i = 0; i < exp; i++) {\n result = result.times(this);\n }\n return result;\n }\n\n negated() {\n const d = new ExprDecimal(this);\n d.#sign = -d.#sign;\n if (d.#int === 0n) {\n d.#sign = 1;\n }\n return d;\n }\n\n eq(other) {\n other = other instanceof ExprDecimal ? other : new ExprDecimal(other);\n const [a, b] = this.#align(other);\n return a === b;\n }\n\n gt(other) {\n other = other instanceof ExprDecimal ? other : new ExprDecimal(other);\n const [a, b] = this.#align(other);\n return a > b;\n }\n\n lt(other) {\n other = other instanceof ExprDecimal ? other : new ExprDecimal(other);\n const [a, b] = this.#align(other);\n return a < b;\n }\n\n gte(other) {\n return this.gt(other) || this.eq(other);\n }\n\n lte(other) {\n return this.lt(other) || this.eq(other);\n }\n\n toString() {\n let s = this.#int.toString();\n const edp = this.#dp;\n\n const toScientific = (intStr, exponent) => {\n const coeffInt = intStr[0];\n const coeffFrac = intStr.slice(1).replace(/0+$/, '');\n let r = coeffInt;\n if (coeffFrac) {\n r += `.${coeffFrac}`;\n }\n r += 'e';\n r += exponent >= 0 ? '+' : '';\n r += exponent;\n return this.#sign === -1 ? `-${r}` : r;\n };\n\n if (edp === 0) {\n if (s.length > 15) {\n return toScientific(s, s.length - 1);\n }\n return this.#sign === -1 ? `-${s}` : s;\n }\n\n while (s.length <= edp) {\n s = `0${s}`;\n }\n const dotPos = s.length - edp;\n const intPartRaw = s.slice(0, dotPos);\n const intTrimmed = intPartRaw.replace(/^0+/, '') || '0';\n const fracRaw = s.slice(dotPos);\n\n if (intTrimmed.length > 15 || (intTrimmed === '0' && fracRaw.replace(/0+$/, '').length > 15)) {\n const normalized = s.replace(/^0+/, '') || '0';\n const leadZeros = s.length - normalized.length;\n return toScientific(normalized, dotPos - leadZeros - 1);\n }\n\n const intPart = intPartRaw || '0';\n const fracPart = fracRaw.replace(/0+$/, '');\n if (fracPart === '') {\n return this.#sign === -1 ? `-${intPart}` : intPart;\n }\n return `${this.#sign === -1 ? '-' : ''}${intPart}.${fracPart}`;\n }\n\n toNumber() {\n return Number(this.toString());\n }\n\n static isDecimal(value) {\n return value instanceof ExprDecimal;\n }\n}\n\nexport default ExprDecimal;\n","import { ExprDecimal } from '../utils/decimal.js';\n\n/**\n * @param {any} value\n */\nexport function bigNumber(value) {\n if (ExprDecimal.isDecimal(value)) {\n return value;\n }\n if (typeof value === 'number' || typeof value === 'string' || typeof value === 'bigint') {\n return new ExprDecimal(value);\n }\n throw new Error('bignumber() expects a number, string, or bigint');\n}\n\n/**\n * @param {unknown} v\n */\nexport function isBigNumber(v) {\n return ExprDecimal.isDecimal(v);\n}\n\n/**\n * @param {ExprDecimal} v\n */\nexport function formatBigNumber(v) {\n if (!ExprDecimal.isDecimal(v)) {\n return String(v);\n }\n return v.toString();\n}\n","import { unwrapDenseMatrix, wrapDenseMatrix, isDenseMatrixWrapper } from '../utils/matrix.js';\nimport {\n isFraction,\n fraction as createFrac,\n addFrac,\n subFrac,\n mulFrac,\n divFrac,\n powFrac,\n} from '../math/fraction.js';\nimport { isBigNumber, bigNumber as createBN } from '../math/bignumber.js';\n\n/** @param {any } node*/\nexport function evaluateAST(node, context = {}) {\n const vars = context.variables;\n const fns = context.functions;\n const units = context.units;\n\n const isUnitObj = (/** @type {any} */ v) =>\n v && typeof v === 'object' && 'value' in v && 'unit' in v;\n const isComplex = (/** @type {any} */ v) => v && typeof v === 'object' && 're' in v && 'im' in v;\n const isSliceNode = (/** @type {any} */ v) =>\n v && typeof v === 'object' && v.type === 'SliceExpression';\n const isMatrix = (/** @type {any[]} */ v) =>\n Array.isArray(v) && v.length > 0 && v.every(Array.isArray);\n const isMatrixLike = (/** @type {any} */ v) => isMatrix(v) || isDenseMatrixWrapper(v);\n\n const normalizeMatrix = (/** @type {any[]} */ value) => {\n value = unwrapDenseMatrix(value);\n if (isMatrix(value)) {\n return value.map((/** @type {any} */ row) => [...row]);\n }\n if (Array.isArray(value)) {\n return [value];\n }\n throw new Error('Expected matrix-compatible value');\n };\n\n const nodeError = (/** @type {string} */ msg) => {\n const pos = node && node.pos !== undefined ? ` at position ${node.pos}` : '';\n return new Error(`${msg}${pos}`);\n };\n\n const toOneBasedIndex = (/** @type {unknown} */ value) => {\n if (typeof value !== 'number' || !Number.isInteger(value) || value < 1) {\n throw new Error('Matrix indices must be positive integers');\n }\n\n return value - 1;\n };\n\n const resolveSelector = (\n /** @type {{ start: null | undefined; end: null | undefined; }} */ selector,\n /** @type {number} */ contextLength\n ) => {\n if (isSliceNode(selector)) {\n const startValue =\n selector.start === null || selector.start === undefined\n ? 1\n : evaluateAST(selector.start, context);\n const endValue =\n selector.end === null || selector.end === undefined\n ? contextLength\n : evaluateAST(selector.end, context);\n const start = toOneBasedIndex(startValue);\n const end = toOneBasedIndex(endValue);\n\n if (end < start) {\n return [];\n }\n\n const result = [];\n for (let index = start; index <= end; index++) {\n result.push(index);\n }\n return result;\n }\n\n return [toOneBasedIndex(evaluateAST(selector, context))];\n };\n\n const indexMatrix = (/** @type {any} */ matrix, /** @type {string | any[]} */ selectors) => {\n const target = normalizeMatrix(matrix);\n\n if (selectors.length === 1) {\n const rowIndexes = resolveSelector(selectors[0], target.length);\n const rows = rowIndexes.map((/** @type {number} */ rowIndex) => {\n if (rowIndex >= target.length) {\n throw new Error('Row index out of range');\n }\n return [...target[rowIndex]];\n });\n\n return rows.length === 1 ? rows[0] : rows;\n }\n\n const rowIndexes = resolveSelector(selectors[0], target.length);\n const colIndexes = resolveSelector(selectors[1], target[0]?.length || 0);\n\n const values = rowIndexes.map((/** @type {number} */ rowIndex) => {\n if (rowIndex >= target.length) {\n throw new Error('Row index out of range');\n }\n\n return colIndexes.map((/** @type {number} */ colIndex) => {\n if (colIndex >= target[rowIndex].length) {\n throw new Error('Column index out of range');\n }\n return target[rowIndex][colIndex];\n });\n });\n\n if (rowIndexes.length === 1 && colIndexes.length === 1) {\n return values[0][0];\n }\n\n if (rowIndexes.length === 1) {\n return values[0];\n }\n\n if (colIndexes.length === 1) {\n return values.map((/** @type {any[]} */ row) => [row[0]]);\n }\n\n return values;\n };\n\n const assignMatrixIndex = (\n /** @type {any[]} */ matrix,\n /** @type {string | any[]} */ selectors,\n /** @type {any} */ value\n ) => {\n const target = isMatrix(matrix)\n ? matrix.map((/** @type {any} */ row) => [...row])\n : Array.isArray(matrix)\n ? [matrix.slice()]\n : [];\n\n const rowSelector = selectors[0];\n const colSelector = selectors[1];\n\n if (!rowSelector) {\n throw new Error('Matrix assignment requires at least one index');\n }\n\n const rowContextLength = Math.max(target.length, 1);\n const rowIndexes = resolveSelector(rowSelector, rowContextLength);\n\n if (selectors.length === 1) {\n const rowsValue = isMatrix(value) ? value : normalizeMatrix(value);\n\n if (rowsValue.length !== rowIndexes.length) {\n throw new Error('Assigned row count does not match slice');\n }\n\n rowIndexes.forEach(\n (/** @type {string | number} */ rowIndex, /** @type {string | number} */ index) => {\n target[rowIndex] = [...rowsValue[index]];\n }\n );\n\n return {\n updatedMatrix: target,\n selectionResult:\n rowIndexes.length === 1\n ? [target[rowIndexes[0]]]\n : rowIndexes.map((/** @type {string | number} */ rowIndex) => [target[rowIndex]]),\n };\n }\n\n const maxCols = Math.max(\n ...target.map((/** @type {string | any[]} */ row) => row.length),\n 0,\n 1\n );\n const colIndexes = resolveSelector(colSelector, maxCols);\n const normalizedValue = normalizeMatrix(value);\n\n if (normalizedValue.length !== rowIndexes.length) {\n throw new Error('Assigned row count does not match matrix slice');\n }\n\n normalizedValue.forEach((/** @type {string | any[]} */ row, /** @type {any} */ _rowOffset) => {\n if (row.length !== colIndexes.length) {\n throw new Error('Assigned column count does not match matrix slice');\n }\n });\n\n rowIndexes.forEach(\n (/** @type {string | number} */ rowIndex, /** @type {string | number} */ rowOffset) => {\n if (!target[rowIndex]) {\n target[rowIndex] = [];\n }\n\n colIndexes.forEach(\n (/** @type {string | number} */ colIndex, /** @type {string | number} */ colOffset) => {\n target[rowIndex][colIndex] = normalizedValue[rowOffset][colOffset];\n }\n );\n }\n );\n\n return {\n updatedMatrix: target,\n selectionResult:\n rowIndexes.length === 1\n ? [\n colIndexes.map(\n (/** @type {string | number} */ colIndex) => target[rowIndexes[0]][colIndex]\n ),\n ]\n : rowIndexes.map((/** @type {string | number} */ rowIndex) =>\n colIndexes.map(\n (/** @type {string | number} */ colIndex) => target[rowIndex][colIndex]\n )\n ),\n };\n };\n\n const isScalar = (/** @type {any} */ v) => typeof v === 'number' || typeof v === 'bigint';\n\n const multiplyMatrices = (/** @type {any} */ left, /** @type {any} */ right) => {\n if (isScalar(left)) {\n const b = normalizeMatrix(right);\n return b.map((/** @type {any[]} */ row) =>\n row.map((/** @type {number} */ v) => Number(left) * v)\n );\n }\n if (isScalar(right)) {\n const a = normalizeMatrix(left);\n return a.map((/** @type {any[]} */ row) =>\n row.map((/** @type {number} */ v) => v * Number(right))\n );\n }\n const a = normalizeMatrix(left);\n const b = normalizeMatrix(right);\n\n if (a[0].length !== b.length) {\n throw new Error('Matrix dimensions do not allow multiplication');\n }\n\n return a.map((/** @type {any[]} */ row) =>\n b[0].map((/** @type {any} */ _, /** @type {string | number} */ colIndex) =>\n row.reduce(\n (\n /** @type {number} */ sum,\n /** @type {number} */ value,\n /** @type {string | number} */ rowIndex\n ) => sum + value * b[rowIndex][colIndex],\n 0\n )\n )\n );\n };\n\n const addMatrices = (/** @type {any} */ left, /** @type {any} */ right) => {\n const a = normalizeMatrix(left);\n const b = normalizeMatrix(right);\n if (a.length !== b.length || a[0].length !== b[0].length) {\n throw new Error('Matrix dimensions must match for addition');\n }\n return a.map((/** @type {any[]} */ row, /** @type {string | number} */ i) =>\n row.map((/** @type {any} */ v, /** @type {string | number} */ j) => v + b[i][j])\n );\n };\n\n const subtractMatrices = (/** @type {any} */ left, /** @type {any} */ right) => {\n const a = normalizeMatrix(left);\n const b = normalizeMatrix(right);\n if (a.length !== b.length || a[0].length !== b[0].length) {\n throw new Error('Matrix dimensions must match for subtraction');\n }\n return a.map((/** @type {any[]} */ row, /** @type {string | number} */ i) =>\n row.map((/** @type {number} */ v, /** @type {string | number} */ j) => v - b[i][j])\n );\n };\n\n const identityMatrix = (/** @type {any} */ n) =>\n Array.from({ length: n }, (_, i) => Array.from({ length: n }, (_, j) => (i === j ? 1 : 0)));\n\n const powerMatrix = (/** @type {any} */ left, /** @type {any} */ right) => {\n const a = normalizeMatrix(left);\n if (a.length !== a[0].length) {\n throw new Error('Matrix power requires a square matrix');\n }\n if (!Number.isInteger(right) || right < 0) {\n throw new Error('Matrix power requires a non-negative integer exponent');\n }\n if (right === 0) {\n return identityMatrix(a.length);\n }\n let result = a;\n for (let i = 1; i < right; i++) {\n result = multiplyMatrices(result, a);\n }\n return result;\n };\n\n const toComplex = (/** @type {any} */ value) => {\n if (isComplex(value)) {\n return value;\n }\n if (typeof value === 'number') {\n return { re: value, im: 0 };\n }\n throw new Error('Complex arithmetic only supports numbers');\n };\n\n const fromImaginary = (/** @type {any} */ value) => ({ re: 0, im: value });\n\n const simplifyComplex = (/** @type {{ re: any; im: any; }} */ value) =>\n value.im === 0 ? value.re : value;\n\n const createFunctionScope = (/** @type {any[]} */ params, /** @type {any[]} */ args) => {\n const scopedValues = {};\n\n params.forEach((/** @type {string | number} */ param, /** @type {string | number} */ index) => {\n scopedValues[param] = args[index];\n });\n\n return scopedValues;\n };\n\n const evalComplexBinary = (\n /** @type {any} */ operator,\n /** @type {any} */ left,\n /** @type {any} */ right\n ) => {\n const a = toComplex(left);\n const b = toComplex(right);\n\n switch (operator) {\n case '+':\n return simplifyComplex({ re: a.re + b.re, im: a.im + b.im });\n case '-':\n return simplifyComplex({ re: a.re - b.re, im: a.im - b.im });\n case '*':\n return simplifyComplex({\n re: a.re * b.re - a.im * b.im,\n im: a.re * b.im + a.im * b.re,\n });\n case '/': {\n const denominator = b.re ** 2 + b.im ** 2;\n\n if (denominator === 0) {\n throw new Error('Division by zero');\n }\n\n return simplifyComplex({\n re: (a.re * b.re + a.im * b.im) / denominator,\n im: (a.im * b.re - a.re * b.im) / denominator,\n });\n }\n default:\n throw new Error(`Operator ${operator} is not supported for complex numbers`);\n }\n };\n\n // EVALUATOR\n switch (node.type) {\n case 'Literal':\n return node.value;\n\n case 'ImaginaryLiteral':\n return fromImaginary(node.value);\n\n case 'UnitLiteral':\n return { value: node.value, unit: node.unit };\n\n // VARIABLE\n case 'Identifier':\n return vars.get(node.name);\n\n // Assignment with optional compound operator (+=, -=, *=, /=): read current, apply, write\n case 'AssignmentExpression': {\n let value;\n if (node.operator !== '=') {\n const current = vars.get(node.left.name);\n const right = evaluateAST(node.right, context);\n const op = node.operator.slice(0, -1);\n switch (op) {\n case '+':\n value = current + right;\n break;\n case '-':\n value = current - right;\n break;\n case '*':\n value = current * right;\n break;\n case '/':\n value = current / right;\n break;\n case '%':\n value = current % right;\n break;\n default:\n throw nodeError(`Unknown compound operator ${node.operator}`);\n }\n } else {\n value = evaluateAST(node.right, context);\n }\n\n if (node.left.type === 'Identifier') {\n vars.set(node.left.name, value);\n if (node.right.type === 'ArrayExpression') {\n return wrapDenseMatrix(unwrapDenseMatrix(value));\n }\n return value;\n }\n\n if (node.left.type === 'IndexExpression' && node.left.object.type === 'Identifier') {\n const currentValue = vars.get(node.left.object.name);\n const assigned = assignMatrixIndex(currentValue, node.left.selectors, value);\n vars.set(node.left.object.name, assigned.updatedMatrix);\n return assigned.selectionResult;\n }\n\n throw nodeError('Invalid assignment target');\n }\n\n // User-defined function via f(a,b)=expr: closure evaluates body in a new scope with params bound\n case 'FunctionAssignmentExpression': {\n if (node.operator !== '=') {\n throw nodeError(`Operator ${node.operator} is not supported for function definitions`);\n }\n\n const fn = (/** @type {any} */ ...args) => {\n const scopedContext = context.withScope(createFunctionScope(node.params, args));\n return evaluateAST(node.right, scopedContext);\n };\n\n fns.register(node.left.name, fn);\n return fn;\n }\n\n // UNARY\n case 'UnaryExpression': {\n const val = evaluateAST(node.argument, context);\n\n switch (node.operator) {\n case '-':\n if (isBigNumber(val)) {\n return val.negated();\n }\n if (isComplex(val)) {\n return simplifyComplex({ re: -val.re, im: -val.im });\n }\n return -val;\n case '!':\n return !val;\n }\n\n throw nodeError(`Unknown unary operator ${node.operator}`);\n }\n\n // Dispatch order: unit arithmetic -> matrix arithmetic -> complex arithmetic -> scalar arithmetic\n case 'BinaryExpression': {\n const left = evaluateAST(node.left, context);\n const right = evaluateAST(node.right, context);\n\n // UNIT handling\n if (isUnitObj(left) || isUnitObj(right)) {\n if (!units) {\n throw new Error('Unit system not available');\n }\n\n return units.compute(node.operator, left, right);\n }\n\n if (\n isMatrixLike(left) ||\n isMatrixLike(right) ||\n (node.operator === '*' && (Array.isArray(left) || Array.isArray(right)))\n ) {\n switch (node.operator) {\n case '+':\n return addMatrices(left, right);\n case '-':\n return subtractMatrices(left, right);\n case '*':\n return multiplyMatrices(left, right);\n case '^':\n return powerMatrix(left, right);\n default:\n throw nodeError(`Operator ${node.operator} not supported for matrices`);\n }\n }\n\n if (isFraction(left) || isFraction(right)) {\n const a = isFraction(left) ? left : createFrac(left, 1);\n const b = isFraction(right) ? right : createFrac(right, 1);\n switch (node.operator) {\n case '+':\n return addFrac(a, b);\n case '-':\n return subFrac(a, b);\n case '*':\n return mulFrac(a, b);\n case '/':\n return divFrac(a, b);\n case '^': {\n const p = powFrac(a, right);\n if (p) {\n return p;\n }\n throw nodeError('Fraction power requires non-negative integer exponent');\n }\n default:\n throw nodeError(`Operator ${node.operator} not supported for fractions`);\n }\n }\n\n if (isBigNumber(left) || isBigNumber(right)) {\n const a = isBigNumber(left) ? left : createBN(left);\n const b = isBigNumber(right) ? right : createBN(right);\n switch (node.operator) {\n case '+':\n return a.plus(b);\n case '-':\n return a.minus(b);\n case '*':\n return a.times(b);\n case '/':\n return a.div(b);\n case '%':\n return a.mod(b);\n case '^':\n return a.pow(b);\n case '>':\n return a.gt(b);\n case '<':\n return a.lt(b);\n case '>=':\n return a.gte(b);\n case '<=':\n return a.lte(b);\n case '==':\n return a.eq(b);\n default:\n throw nodeError(`Operator ${node.operator} not supported for BigNumber`);\n }\n }\n\n if (isComplex(left) || isComplex(right)) {\n return evalComplexBinary(node.operator, left, right);\n }\n\n switch (node.operator) {\n case '+':\n return left + right;\n case '-':\n return left - right;\n case '*':\n return left * right;\n case '/':\n return left / right;\n case '%':\n return left % right;\n case '^':\n return left ** right;\n\n case '>':\n return left > right;\n case '<':\n return left < right;\n case '>=':\n return left >= right;\n case '<=':\n return left <= right;\n case '==':\n return left === right;\n }\n\n throw nodeError(`Unknown operator ${node.operator}`);\n }\n\n // Short-circuit: && returns first falsy, || returns first truthy, ?? returns first non-nullish\n case 'LogicalExpression': {\n const left = evaluateAST(node.left, context);\n\n if (node.operator === '&&') {\n return left && evaluateAST(node.right, context);\n }\n\n if (node.operator === '||') {\n return left || evaluateAST(node.right, context);\n }\n\n if (node.operator === '??') {\n return left ?? evaluateAST(node.right, context);\n }\n\n throw nodeError(`Unknown logical operator ${node.operator}`);\n }\n\n // Range [start..end] inclusive: returns array of integers from floor(start) to floor(end)\n case 'RangeExpression': {\n const start = evaluateAST(node.start, context);\n const end = evaluateAST(node.end, context);\n if (typeof start !== 'number' || typeof end !== 'number') {\n throw nodeError('Range requires numeric bounds');\n }\n const result = [];\n for (let i = Math.floor(start); i <= Math.floor(end); i++) {\n result.push(i);\n }\n return result;\n }\n\n // Lambda: return a callable function evaluating the body with params bound in a new scope\n case 'ArrowFunctionExpression': {\n const fn = (/** @type {any[]} */ ...args) => {\n const scopedContext = context.withScope(createFunctionScope(node.params, args));\n return evaluateAST(node.body, scopedContext);\n };\n return fn;\n }\n\n // Function call: flatten spread (...array) arguments, then invoke\n case 'CallExpression': {\n const fnName = node.callee.name;\n const fn = fns.get(fnName);\n\n const rawArgs = node.arguments.map((/** @type {{ type: string; argument: any; }} */ arg) => {\n if (arg.type === 'SpreadElement') {\n const val = evaluateAST(arg.argument, context);\n if (!Array.isArray(val)) {\n throw new Error('Spread operator requires an array');\n }\n return { spread: true, values: val };\n }\n return { spread: false, value: evaluateAST(arg, context) };\n });\n const args = [];\n for (const arg of rawArgs) {\n if (arg.spread) {\n args.push(...arg.values);\n } else {\n args.push(arg.value);\n }\n }\n\n return fn(...args);\n }\n\n // Pipeline: left value is passed as first argument to the right function/expression\n case 'PipelineExpression': {\n const leftVal = evaluateAST(node.left, context);\n\n // right must be function\n if (node.right.type === 'CallExpression') {\n const fnName = node.right.callee.name;\n const fn = fns.get(fnName);\n\n const args = [\n leftVal,\n ...node.right.arguments.map((/** @type {any} */ arg) => evaluateAST(arg, context)),\n ];\n\n return fn(...args);\n }\n\n if (node.right.type === 'Identifier') {\n const fn = fns.get(node.right.name);\n return fn(leftVal);\n }\n\n throw nodeError('Invalid pipeline target');\n }\n\n // Unit conversion: value fromUnit -> toUnit\n case 'UnitConversion': {\n const from = evaluateAST(node.from, context);\n\n if (!isUnitObj(from)) {\n throw nodeError('Left side must be a unit value');\n }\n\n if (!units) {\n throw nodeError('Unit system not available');\n }\n\n return units.convert(from.value, from.unit, node.to);\n }\n\n // ARRAY\n case 'ArrayExpression':\n return node.elements.map((/** @type {any} */ el) => evaluateAST(el, context));\n\n // Matrix/array indexing: target[selector1, selector2] with 1-based and slice support\n case 'IndexExpression': {\n const target = evaluateAST(node.object, context);\n return indexMatrix(target, node.selectors);\n }\n\n // OBJECT\n case 'ObjectExpression': {\n const obj = {};\n for (const p of node.properties) {\n obj[p.key] = evaluateAST(p.value, context);\n }\n return obj;\n }\n\n // Property access: obj.prop; optional chaining (?.) returns undefined if obj is null/undefined\n case 'MemberExpression': {\n const obj = evaluateAST(node.object, context);\n\n if (node.optional && (obj === null || obj === undefined)) {\n return undefined;\n }\n\n return obj[node.property.name];\n }\n\n default:\n throw nodeError(`Unknown AST node type: ${node.type}`);\n }\n}\n","export function createContext({ variables, functions, units, evaluate }) {\n if (!variables) {\n throw new Error('Variable store missing');\n }\n if (!functions) {\n throw new Error('Function registry missing');\n }\n if (!units) {\n throw new Error('Units list missing');\n }\n if (!evaluate) {\n throw new Error('evaluate function missing');\n }\n\n return {\n variables: variables,\n functions: functions,\n units: units,\n evaluate,\n\n withScope(scope = {}) {\n const tempVars = {\n ...variables.all?.(),\n ...scope,\n };\n return createContext({\n functions: functions,\n evaluate,\n units,\n variables: {\n get: (/** @type {string | number} */ k) => tempVars[k],\n set: (/** @type {string | number} */ k, /** @type {any} */ v) => (tempVars[k] = v),\n all: () => tempVars,\n },\n });\n },\n };\n}\n","const isValidNumberPair = (/** @type {any} */ a, /** @type {any} */ b) =>\n typeof a === typeof b && (typeof a === 'number' || typeof a === 'bigint');\n\nexport const mathOperations = Object.freeze({\n power: function (/** @type {number} */ a, /** @type {number} */ b) {\n if (isValidNumberPair(a, b)) {\n return a ** b;\n }\n throw new Error('Invalid types for ^');\n },\n\n multiply: function (/** @type {number} */ a, /** @type {number} */ b) {\n if (isValidNumberPair(a, b)) {\n return a * b;\n }\n throw new Error('Invalid types for *');\n },\n\n divide: function (/** @type {number} */ a, /** @type {number} */ b) {\n if (isValidNumberPair(a, b)) {\n if (b === 0) {\n throw new Error('Division by zero');\n }\n return a / b;\n }\n throw new Error('Invalid types for /');\n },\n\n add: function (/** @type {string} */ a, /** @type {string} */ b) {\n if (isValidNumberPair(a, b)) {\n return a + b;\n }\n if (typeof a === 'string' && typeof b === 'string') {\n return a + b;\n }\n throw new Error('Invalid types for +');\n },\n\n subtract: function (/** @type {number} */ a, /** @type {number} */ b) {\n if (isValidNumberPair(a, b)) {\n return a - b;\n }\n throw new Error('Invalid types for -');\n },\n\n modulus: function (/** @type {number} */ a, /** @type {number} */ b) {\n if (isValidNumberPair(a, b)) {\n return a % b;\n }\n throw new Error('Invalid types for %');\n },\n});\n","export function createUnitsStore(initial = {}) {\n let units = { ...initial };\n\n // Helpers\n function getAllUnitsFlat() {\n const result = new Set();\n\n for (const type in units) {\n for (const key in units[type]) {\n const u = units[type][key];\n\n const keyLower = key.toLowerCase();\n result.add(keyLower);\n\n // Unit name\n if (u.unit) {\n const unitLower = u.unit.toLowerCase();\n\n // Avoid duplicate like \"m\" vs \"meter\"\n if (unitLower !== keyLower) {\n if (unitLower.split(/\\s+/).length === 1) {\n result.add(unitLower);\n }\n }\n }\n\n // Symbol\n if (u.symbol) {\n const symbolLower = u.symbol.toLowerCase();\n\n // Avoid duplicate with unit name\n if (!u.unit || symbolLower !== u.unit.toLowerCase()) {\n result.add(symbolLower);\n }\n }\n }\n }\n\n return Array.from(result);\n }\n\n /**\n * @param {string} input\n */\n function findUnit(input) {\n input = input.toLowerCase();\n\n for (const type in units) {\n for (const key in units[type]) {\n const u = units[type][key];\n\n if (\n key.toLowerCase() === input ||\n u.unit?.toLowerCase() === input ||\n u.symbol?.toLowerCase() === input\n ) {\n return { type, key, data: u };\n }\n }\n }\n\n return null;\n }\n\n /**\n * @param {number} value\n * @param {any} fromUnit\n * @param {any} toUnit\n */\n function convert(value, fromUnit, toUnit) {\n const from = findUnit(fromUnit);\n const to = findUnit(toUnit);\n\n if (!from) {\n throw new Error(`Unknown unit: ${fromUnit}`);\n }\n if (!to) {\n throw new Error(`Unknown unit: ${toUnit}`);\n }\n\n if (from.type !== to.type) {\n throw new Error(\n `Cannot convert ${fromUnit} to ${toUnit} (${to.data.unit || to.key}). ${from.data.unit || from.key} conversion units like ${Object.keys(units[from.type]).join(', ')}`\n );\n }\n\n const result = value * (from.data.value / to.data.value);\n\n return { value: result, unit: to.key };\n }\n\n // Public API\n return {\n // Get all units\n getUnits: () => units,\n\n setUnits: (/** @type {{}} */ newUnits) => {\n units = { ...newUnits };\n },\n\n updateType: (/** @type {string | number} */ type, /** @type {any} */ data) => {\n units[type] = { ...units[type], ...data };\n },\n\n addUnit: (\n /** @type {string | number} */ type,\n /** @type {string | number} */ key,\n /** @type {any} */ unitObj\n ) => {\n if (!units[type]) {\n units[type] = {};\n }\n units[type][key] = unitObj;\n },\n // Unit-aware arithmetic: unify operands to same unit type, then apply operator\n /**\n * @param {string} op\n * @param {{ unit: any; value: any; }} left\n * @param {{ unit: any; value: number; }} right\n */\n compute(op, left, right) {\n const isUnit = (/** @type {any} */ v) =>\n v && typeof v === 'object' && 'value' in v && 'unit' in v;\n\n const apply = (/** @type {any} */ a, /** @type {any} */ b) => {\n switch (op) {\n case '+':\n return a + b;\n case '-':\n return a - b;\n case '*':\n return a * b;\n case '/':\n return a / b;\n case '%':\n return a % b;\n case '^':\n return Math.pow(a, b);\n }\n };\n\n // BOTH UNIT\n if (isUnit(left) && isUnit(right)) {\n const from = this.findUnit(right.unit);\n const to = this.findUnit(left.unit);\n\n if (!from || !to || from.type !== to.type) {\n throw new Error(`Cannot operate on different unit types`);\n }\n\n // convert right → left unit\n const r = right.value * (from.data.value / to.data.value);\n\n const result = apply(left.value, r);\n\n // multiplication/division produce compound units\n if (op === '*') {\n return { value: result, unit: left.unit };\n }\n\n if (op === '/') {\n return { value: result, unit: left.unit };\n }\n\n if (op === '^') {\n return { value: result, unit: left.unit };\n }\n\n return { value: result, unit: left.unit };\n }\n\n // LEFT UNIT\n if (isUnit(left) && !isUnit(right)) {\n const result = apply(left.value, right);\n\n return { value: result, unit: left.unit };\n }\n\n // RIGHT UNIT\n if (!isUnit(left) && isUnit(right)) {\n const result = apply(left, right.value);\n\n if (op === '/') {\n return { value: result, unit: right.unit };\n }\n\n return { value: result, unit: right.unit };\n }\n\n // NORMAL\n return apply(left, right);\n },\n\n convert,\n\n // Search helpers\n getAllUnitsFlat,\n findUnit,\n };\n}\n","export const globalUnits = {\n length: {\n m: { value: 1, unit: 'meter', symbol: 'm' },\n cm: { value: 0.01, unit: 'centimeter', symbol: 'cm' },\n mm: { value: 0.001, unit: 'millimeter', symbol: 'mm' },\n km: { value: 1000, unit: 'kilometer', symbol: 'km' },\n um: { value: 0.000001, unit: 'micrometer', symbol: 'um', note: 'also called micron' },\n nm: { value: 0.000000001, unit: 'nanometer', symbol: 'nm' },\n px: { value: 0.000264583, unit: 'pixel', symbol: 'px', note: '96dpi standard' },\n em: { value: 0.000264583 * 16, unit: 'em', symbol: 'em', note: '1em = 16px by default' },\n rem: { value: 0.000264583 * 16, unit: 'rem', symbol: 'rem', note: 'root em = 16px by default' },\n pt: { value: 0.000352778, unit: 'point', symbol: 'pt', note: '1pt = 1/72 inch' },\n pica: { value: 0.00423333, unit: 'pica', symbol: 'pc', note: '1pc = 12pt' },\n inch: { value: 0.0254, unit: 'inch', symbol: 'in' },\n ft: { value: 0.3048, unit: 'foot', symbol: 'ft' },\n yd: { value: 0.9144, unit: 'yard', symbol: 'yd' },\n mi: { value: 1609.344, unit: 'mile', symbol: 'mi' },\n thou: { value: 0.0000254, unit: 'mil', symbol: 'thou', note: 'thousandth of an inch' },\n furlong: { value: 201.168, unit: 'furlong', symbol: 'fur', note: '220 yards' },\n nmi: { value: 1852, unit: 'nautical mile', symbol: 'nmi' },\n fathom: { value: 1.8288, unit: 'fathom', symbol: 'fathom' },\n au: { value: 1.496e11, unit: 'astronomical unit', symbol: 'AU' },\n ly: { value: 9.4607e15, unit: 'light year', symbol: 'ly' },\n pc: { value: 3.0857e16, unit: 'parsec', symbol: 'pc' },\n },\n\n // Weight / Mass\n weight: {\n mg: { value: 1e-6, unit: 'milligram', symbol: 'mg' },\n g: { value: 0.001, unit: 'gram', symbol: 'g' },\n kg: { value: 1, unit: 'kilogram', symbol: 'kg' },\n t: { value: 1000, unit: 'tonne', symbol: 't', note: 'metric ton' },\n lb: { value: 0.453592, unit: 'pound', symbol: 'lb' },\n oz: { value: 0.0283495, unit: 'ounce', symbol: 'oz' },\n stone: { value: 6.35029, unit: 'stone', symbol: 'st', note: '1 stone = 14 lb' },\n },\n\n // Time\n time: {\n s: { value: 1, unit: 'second', symbol: 's' },\n min: { value: 60, unit: 'minute', symbol: 'min' },\n h: { value: 3600, unit: 'hour', symbol: 'h' },\n day: { value: 86400, unit: 'day', symbol: 'd' },\n week: { value: 604800, unit: 'week', symbol: 'wk' },\n month: { value: 2629800, unit: 'month', symbol: 'mo', note: 'average month = 30.44 days' },\n year: { value: 31557600, unit: 'year', symbol: 'yr', note: 'average year = 365.25 days' },\n },\n\n // Voltage\n voltage: {\n V: { value: 1, unit: 'volt', symbol: 'V' },\n mV: { value: 0.001, unit: 'millivolt', symbol: 'mV' },\n kV: { value: 1000, unit: 'kilovolt', symbol: 'kV' },\n MV: { value: 1e6, unit: 'megavolt', symbol: 'MV' },\n GV: { value: 1e9, unit: 'gigavolt', symbol: 'GV' },\n statV: { value: 299.792458, unit: 'statvolt', symbol: 'statV', note: 'CGS unit' },\n abV: { value: 1e-8, unit: 'abvolt', symbol: 'abV', note: 'CGS electromagnetic unit' },\n },\n\n // Frequency\n frequency: {\n Hz: { value: 1, unit: 'hertz', symbol: 'Hz', note: '1 cycle per second' },\n kHz: { value: 1e3, unit: 'kilohertz', symbol: 'kHz' },\n MHz: { value: 1e6, unit: 'megahertz', symbol: 'MHz' },\n GHz: { value: 1e9, unit: 'gigahertz', symbol: 'GHz' },\n THz: { value: 1e12, unit: 'terahertz', symbol: 'THz' },\n },\n\n // Power\n power: {\n W: { value: 1, unit: 'watt', symbol: 'W', note: '1 joule per second' },\n mW: { value: 0.001, unit: 'milliwatt', symbol: 'mW' },\n kW: { value: 1000, unit: 'kilowatt', symbol: 'kW' },\n MW: { value: 1e6, unit: 'megawatt', symbol: 'MW' },\n GW: { value: 1e9, unit: 'gigawatt', symbol: 'GW' },\n HP: { value: 745.7, unit: 'horsepower', symbol: 'HP', note: 'mechanical HP = 745.7 W' },\n 'kcal/h': { value: 1.163, unit: 'kilocalorie per hour', symbol: 'kcal/h', note: '= 1.163 W' },\n 'BTU/h': { value: 0.29307107, unit: 'BTU per hour', symbol: 'BTU/h', note: '= 0.293 W' },\n },\n\n // Sound\n sound: {\n dB: { value: 1, unit: 'decibel', symbol: 'dB', note: 'logarithmic unit of sound intensity' },\n dBA: {\n value: 1,\n unit: 'A-weighted decibel',\n symbol: 'dBA',\n note: 'Adjusted for human hearing',\n },\n dBC: {\n value: 1,\n unit: 'C-weighted decibel',\n symbol: 'dBC',\n note: 'Flat weighting for high-level sounds',\n },\n },\n\n // Temperature\n temperature: {\n K: { value: 1, unit: 'kelvin', symbol: 'K' },\n C: { value: 1, unit: 'Celsius', symbol: '°C', note: '°C → K: add 273.15' },\n F: { value: 1, unit: 'Fahrenheit', symbol: '°F', note: '°F → K: (°F - 32) * 5/9 + 273.15' },\n },\n\n // Pressure\n pressure: {\n Pa: { value: 1, unit: 'pascal', symbol: 'Pa' },\n kPa: { value: 1000, unit: 'kilopascal', symbol: 'kPa' },\n MPa: { value: 1e6, unit: 'megapascal', symbol: 'MPa' },\n bar: { value: 1e5, unit: 'bar', symbol: 'bar' },\n atm: { value: 101325, unit: 'atmosphere', symbol: 'atm' },\n psi: { value: 6894.757, unit: 'pound per square inch', symbol: 'psi' },\n mmHg: { value: 133.322, unit: 'millimeter of mercury', symbol: 'mmHg' },\n },\n\n // Energy\n energy: {\n J: { value: 1, unit: 'joule', symbol: 'J' },\n kJ: { value: 1000, unit: 'kilojoule', symbol: 'kJ' },\n cal: { value: 4.184, unit: 'calorie', symbol: 'cal' },\n kcal: { value: 4184, unit: 'kilocalorie', symbol: 'kcal' },\n eV: { value: 1.60218e-19, unit: 'electronvolt', symbol: 'eV' },\n BTU: { value: 1055.06, unit: 'BTU', symbol: 'BTU' },\n },\n\n // Force\n force: {\n N: { value: 1, unit: 'newton', symbol: 'N' },\n kN: { value: 1000, unit: 'kilonewton', symbol: 'kN' },\n lbf: { value: 4.44822, unit: 'pound-force', symbol: 'lbf' },\n kgf: { value: 9.80665, unit: 'kilogram-force', symbol: 'kgf' },\n dyne: { value: 1e-5, unit: 'dyne', symbol: 'dyn' },\n },\n\n // Area\n area: {\n m2: { value: 1, unit: 'square meter', symbol: 'm²' },\n cm2: { value: 0.0001, unit: 'square centimeter', symbol: 'cm²' },\n km2: { value: 1e6, unit: 'square kilometer', symbol: 'km²' },\n acre: { value: 4046.856, unit: 'acre', symbol: 'acre' },\n hectare: { value: 10000, unit: 'hectare', symbol: 'ha' },\n ft2: { value: 0.092903, unit: 'square foot', symbol: 'ft²' },\n yd2: { value: 0.836127, unit: 'square yard', symbol: 'yd²' },\n },\n\n // Volume\n volume: {\n m3: { value: 1, unit: 'cubic meter', symbol: 'm³' },\n L: { value: 0.001, unit: 'liter', symbol: 'L' },\n mL: { value: 1e-6, unit: 'milliliter', symbol: 'mL' },\n gallon: { value: 0.00378541, unit: 'US gallon', symbol: 'gal' },\n pint: { value: 0.000473176, unit: 'US pint', symbol: 'pt' },\n floz: { value: 2.9574e-5, unit: 'US fluid ounce', symbol: 'fl oz' },\n },\n\n // Electrical Current\n current: {\n A: { value: 1, unit: 'ampere', symbol: 'A' },\n mA: { value: 0.001, unit: 'milliampere', symbol: 'mA' },\n uA: { value: 0.000001, unit: 'microampere', symbol: 'uA' },\n kA: { value: 1000, unit: 'kiloampere', symbol: 'kA' },\n },\n\n // Resistance / Conductance\n resistance: {\n ohm: { value: 1, unit: 'ohm' },\n kohm: { value: 1000, unit: 'kiloohm' },\n megaohm: { value: 1e6, unit: 'megaohm' },\n S: { value: 1, unit: 'siemens', symbol: 'S', note: 'conductance' },\n },\n\n // Capacitance / Inductance\n capacitance: {\n F: { value: 1, unit: 'farad', symbol: 'F' },\n mF: { value: 0.001, unit: 'millifarad' },\n uF: { value: 0.000001, unit: 'microfarad' },\n },\n inductance: {\n H: { value: 1, unit: 'henry', symbol: 'H' },\n mH: { value: 0.001, unit: 'millihenry', symbol: 'mH' },\n uH: { value: 0.000001, unit: 'microhenry', symbol: 'uH' },\n },\n\n // Luminous Intensity / Illuminance\n light: {\n cd: { value: 1, unit: 'candela', symbol: 'cd' },\n lm: { value: 1, unit: 'lumen', symbol: 'lm' },\n lx: { value: 1, unit: 'lux', symbol: 'lx' },\n },\n\n // Data / Digital Storage\n data: {\n bit: { value: 1, unit: 'bit', symbol: 'bit' },\n B: { value: 8, unit: 'byte', symbol: 'B' },\n KB: { value: 8e3, unit: 'kilobyte', symbol: 'KB' },\n MB: { value: 8e6, unit: 'megabyte', symbol: 'MB' },\n GB: { value: 8e9, unit: 'gigabyte', symbol: 'GB' },\n TB: { value: 8e12, unit: 'terabyte', symbol: 'TB' },\n },\n\n // Angle\n angle: {\n deg: { value: 1, unit: 'degree', symbol: '°' },\n rad: { value: 57.2958, unit: 'radian', symbol: 'rad', note: '1 rad = 57.2958°' },\n grad: { value: 0.9, unit: 'grad', symbol: 'grad', note: '1 grad = 0.9°' },\n },\n radiation: {\n Gy: { value: 1, unit: 'gray', symbol: 'Gy', note: 'Absorbed dose: 1 Gy = 1 J/kg' },\n mGy: { value: 0.001, unit: 'milligray', symbol: 'mGy' },\n rad: { value: 0.01, unit: 'rad', symbol: 'rad', note: '1 rad = 0.01 Gy' },\n\n // Dose Equivalent\n Sv: { value: 1, unit: 'sievert', symbol: 'Sv', note: 'Biological effect dose equivalent' },\n mSv: { value: 0.001, unit: 'millisievert', symbol: 'mSv' },\n rem: { value: 0.01, unit: 'rem', symbol: 'rem', note: '1 rem = 0.01 Sv' },\n\n // Radioactivity\n Bq: { value: 1, unit: 'becquerel', symbol: 'Bq', note: '1 decay per second' },\n kBq: { value: 1e3, unit: 'kilobecquerel', symbol: 'kBq' },\n MBq: { value: 1e6, unit: 'megabecquerel', symbol: 'MBq' },\n GBq: { value: 1e9, unit: 'gigabecquerel', symbol: 'GBq' },\n Ci: { value: 3.7e10, unit: 'curie', symbol: 'Ci', note: '1 Ci = 3.7 x 10¹⁰ decays per second' },\n mCi: { value: 3.7e7, unit: 'millicurie', symbol: 'mCi' },\n },\n};\n","const validVarName = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\nexport function createVarStore(initial = {}) {\n let store = Object.create(null);\n\n for (const key in initial) {\n store[key] = initial[key];\n }\n\n return {\n /**\n * @param {string} name\n * @param {number | undefined} value\n */\n set(name, value, { override = true } = {}) {\n if (typeof name !== 'string' || !name) {\n throw new Error('Variable name must be a non-empty string');\n }\n\n if (!validVarName.test(name)) {\n throw new Error(`Variable Name Error: '${name}' is not a valid variable name`);\n }\n\n // Value validation\n if (value === undefined) {\n throw new Error(`Variable Value Error: '${name}' cannot be undefined`);\n }\n\n // Prevent overwrite (optional)\n if (!override && name in store) {\n throw new Error(`Variable '${name}' already exists`);\n }\n\n store[name] = value;\n },\n\n /**\n * @param {string | number} name\n */\n get(name) {\n return store[name];\n },\n\n /**\n * @param {any} name\n */\n has(name) {\n return Object.prototype.hasOwnProperty.call(store, name);\n },\n\n /**\n * @param {string | number} name\n */\n remove(name) {\n delete store[name];\n },\n\n all() {\n return { ...store };\n },\n\n clear() {\n store = Object.create(null);\n },\n\n merge(obj = {}) {\n for (const key in obj) {\n store[key] = obj[key];\n }\n },\n\n clone() {\n return createVarStore(store);\n },\n };\n}\n\nexport default { createVarStore };\n","export function createFunctionRegistry(initial = {}) {\n // Object.create(null) avoids prototype pollution (no inherited properties)\n const store = Object.create(null);\n\n for (const key in initial) {\n if (typeof initial[key] === 'function') {\n store[key] = initial[key];\n }\n }\n\n return {\n getAllFunctionsName() {\n return Object.keys(store);\n },\n\n /**\n * @param {string} name\n * @param {any} fn\n */\n register(name, fn) {\n if (typeof name !== 'string' || !name) {\n throw new Error('Formula name must be a non-empty string');\n }\n\n if (typeof fn !== 'function') {\n throw new Error(`Formula \"${name}\" must be callable`);\n }\n\n store[name] = fn;\n },\n\n /**\n * @param {string} name\n */\n get(name) {\n return store[name];\n },\n\n /**\n * @param {any} name\n */\n has(name) {\n return Object.prototype.hasOwnProperty.call(store, name);\n },\n\n /**\n * @param {string | number} name\n */\n remove(name) {\n delete store[name];\n },\n\n all() {\n return { ...store };\n },\n\n clear() {\n for (const key in store) {\n delete store[key];\n }\n },\n\n extend(formulas = {}) {\n for (const name in formulas) {\n if (typeof formulas[name] === 'function') {\n store[name] = formulas[name];\n }\n }\n },\n\n clone() {\n return createFunctionRegistry(store);\n },\n };\n}\n","import { unwrapDenseMatrix, wrapDenseMatrix } from '../utils/matrix.js';\nimport { fraction as makeFrac, isFraction, numer, denom } from '../math/fraction.js';\nimport { bigNumber as makeBN, isBigNumber } from '../math/bignumber.js';\n\n/** @param {any[]} matrix */\nfunction validateSquareMatrix(matrix) {\n matrix = unwrapDenseMatrix(matrix);\n if (!Array.isArray(matrix) || matrix.length === 0) {\n throw new Error('det() expects a non-empty matrix');\n }\n\n if (!matrix.every(Array.isArray)) {\n throw new Error('det() expects a 2D matrix');\n }\n\n const size = matrix.length;\n if (!matrix.every((row) => row.length === size)) {\n throw new Error('det() expects a square matrix');\n }\n\n for (const row of matrix) {\n for (const value of row) {\n if (typeof value !== 'number' && typeof value !== 'bigint') {\n throw new Error('det() matrix values must be numeric');\n }\n }\n }\n}\n\n/** @param {any[]} matrix */\nfunction determinant(matrix) {\n matrix = unwrapDenseMatrix(matrix);\n validateSquareMatrix(matrix);\n\n if (matrix.length === 1) {\n return matrix[0][0];\n }\n\n if (matrix.length === 2) {\n return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];\n }\n\n // Laplace expansion: sum of (-1)^col * M[0][col] * det(minor)\n return matrix[0].reduce(\n (/** @type {number} */ sum, /** @type {number} */ value, /** @type {number} */ columnIndex) => {\n const minor = matrix\n .slice(1)\n .map((row) =>\n row.filter((/** @type {any} */ _, /** @type {number} */ index) => index !== columnIndex)\n );\n const cofactor = columnIndex % 2 === 0 ? value : -value;\n return sum + cofactor * determinant(minor);\n },\n 0\n );\n}\n\n/** @param {any} value */\nfunction asMatrixData(value) {\n const data = unwrapDenseMatrix(value);\n if (!Array.isArray(data)) {\n throw new Error('Expected matrix data');\n }\n return data;\n}\n\n/**\n * @param {any[]} coefficients\n * @param {number[]} constants\n */\nfunction solveLinearSystem(coefficients, constants) {\n const n = coefficients.length;\n const augmented = coefficients.map((row, rowIndex) => [...row, constants[rowIndex]]);\n\n for (let pivot = 0; pivot < n; pivot++) {\n let maxRow = pivot;\n let maxValue = Math.abs(augmented[pivot][pivot]);\n\n for (let row = pivot + 1; row < n; row++) {\n const current = Math.abs(augmented[row][pivot]);\n if (current > maxValue) {\n maxValue = current;\n maxRow = row;\n }\n }\n\n if (maxValue === 0) {\n throw new Error('Linear system is singular');\n }\n\n if (maxRow !== pivot) {\n [augmented[pivot], augmented[maxRow]] = [augmented[maxRow], augmented[pivot]];\n }\n\n const pivotValue = augmented[pivot][pivot];\n for (let col = pivot; col <= n; col++) {\n augmented[pivot][col] /= pivotValue;\n }\n\n for (let row = 0; row < n; row++) {\n if (row === pivot) {\n continue;\n }\n const factor = augmented[row][pivot];\n for (let col = pivot; col <= n; col++) {\n augmented[row][col] -= factor * augmented[pivot][col];\n }\n }\n }\n\n return augmented.map((row) => row[n]);\n}\n\n/** @param {any} input */\nfunction lupDecomposition(input) {\n const matrix = asMatrixData(input).map((row) => [...row]);\n validateSquareMatrix(matrix);\n\n const n = matrix.length;\n const permutation = Array.from({ length: n }, (_, index) => index);\n\n for (let pivot = 0; pivot < n; pivot++) {\n let maxRow = pivot;\n let maxValue = Math.abs(matrix[pivot][pivot]);\n\n for (let row = pivot + 1; row < n; row++) {\n const current = Math.abs(matrix[row][pivot]);\n if (current > maxValue) {\n maxValue = current;\n maxRow = row;\n }\n }\n\n if (maxValue === 0) {\n throw new Error('Matrix is singular');\n }\n\n if (maxRow !== pivot) {\n [matrix[pivot], matrix[maxRow]] = [matrix[maxRow], matrix[pivot]];\n [permutation[pivot], permutation[maxRow]] = [permutation[maxRow], permutation[pivot]];\n }\n\n for (let row = pivot + 1; row < n; row++) {\n matrix[row][pivot] /= matrix[pivot][pivot];\n for (let col = pivot + 1; col < n; col++) {\n matrix[row][col] -= matrix[row][pivot] * matrix[pivot][col];\n }\n }\n }\n\n const L = matrix.map((row, rowIndex) =>\n row.map((value, colIndex) => {\n if (rowIndex === colIndex) {\n return 1;\n }\n if (rowIndex > colIndex) {\n return value;\n }\n return 0;\n })\n );\n\n const U = matrix.map((row, rowIndex) =>\n row.map((value, colIndex) => (rowIndex <= colIndex ? value : 0))\n );\n\n return {\n L: wrapDenseMatrix(L),\n U: wrapDenseMatrix(U),\n p: permutation,\n };\n}\n\n/**\n * @param {any} aInput\n * @param {{ exprify: string; data: any; size: number[]; }} bInput\n */\nfunction linearSolve(aInput, bInput) {\n const { L, U, p } = lupDecomposition(aInput);\n const a = asMatrixData(aInput);\n const bData = asMatrixData(bInput);\n const bVector = Array.isArray(bData[0]) ? bData.map((row) => row[0]) : bData;\n\n if (a.length !== bVector.length) {\n throw new Error('Right-hand side dimension mismatch');\n }\n\n const permutedB = p.map((index) => bVector[index]);\n const y = new Array(a.length).fill(0);\n\n for (let row = 0; row < a.length; row++) {\n y[row] = permutedB[row];\n for (let col = 0; col < row; col++) {\n y[row] -= L.data[row][col] * y[col];\n }\n }\n\n const x = new Array(a.length).fill(0);\n for (let row = a.length - 1; row >= 0; row--) {\n x[row] = y[row];\n for (let col = row + 1; col < a.length; col++) {\n x[row] -= U.data[row][col] * x[col];\n }\n x[row] /= U.data[row][row];\n }\n\n return wrapDenseMatrix(x.map((value) => [value]));\n}\n\n/**\n * @param {any} aInput\n * @param {any} qInput\n */\nfunction solveLyapunov(aInput, qInput) {\n const A = asMatrixData(aInput).map((row) => [...row]);\n const Q = asMatrixData(qInput).map((row) => [...row]);\n validateSquareMatrix(A);\n validateSquareMatrix(Q);\n\n const n = A.length;\n if (Q.length !== n) {\n throw new Error('A and Q must have the same dimensions');\n }\n\n const coefficients = [];\n const constants = [];\n\n for (let row = 0; row < n; row++) {\n for (let col = 0; col < n; col++) {\n const equation = new Array(n * n).fill(0);\n\n for (let k = 0; k < n; k++) {\n equation[k * n + col] += A[row][k];\n equation[row * n + k] += A[col][k];\n }\n\n coefficients.push(equation);\n constants.push(-Q[row][col]);\n }\n }\n\n const solution = solveLinearSystem(coefficients, constants);\n const X = [];\n\n for (let row = 0; row < n; row++) {\n X.push(solution.slice(row * n, (row + 1) * n));\n }\n\n return wrapDenseMatrix(X);\n}\n\n/**\n * @param {any[]} coefficients\n * @param {number} x\n */\nfunction evaluatePolynomial(coefficients, x) {\n return coefficients.reduce((sum, coefficient, index) => sum + coefficient * x ** index, 0);\n}\n\n/**\n * @param {any[]} coefficients\n * @param {number} root\n */\nfunction syntheticDivide(coefficients, root) {\n const descending = [...coefficients].reverse();\n const quotient = [descending[0]];\n\n for (let index = 1; index < descending.length - 1; index++) {\n quotient.push(descending[index] + quotient[index - 1] * root);\n }\n\n const remainder = descending[descending.length - 1] + quotient[quotient.length - 1] * root;\n return {\n quotient: quotient.reverse(),\n remainder,\n };\n}\n\n/**\n * @param {any[]} coefficients\n */\nfunction solveQuadratic(coefficients) {\n const [c, b, a] = coefficients;\n const discriminant = b ** 2 - 4 * a * c;\n if (discriminant < 0) {\n throw new Error('Only real roots are supported');\n }\n\n const sqrtDisc = Math.sqrt(discriminant);\n return [(-b + sqrtDisc) / (2 * a), (-b - sqrtDisc) / (2 * a)];\n}\n\n/**\n * @param {any[]} coefficients\n */\nfunction polynomialRoots(...coefficients) {\n while (coefficients.length > 1 && coefficients[coefficients.length - 1] === 0) {\n coefficients.pop();\n }\n\n const degree = coefficients.length - 1;\n if (degree < 1) {\n throw new Error('polynomialRoot() expects at least a linear polynomial');\n }\n\n if (degree === 1) {\n const [b, a] = coefficients;\n return [-b / a];\n }\n\n if (degree === 2) {\n return solveQuadratic(coefficients);\n }\n\n // Rational root theorem: possible roots are divisors of the constant term\n if (degree === 3) {\n const constant = coefficients[0];\n const candidates = [];\n const limit = Math.abs(constant);\n\n for (let divisor = 1; divisor <= Math.max(1, limit); divisor++) {\n if (limit % divisor === 0) {\n candidates.push(divisor, -divisor);\n }\n }\n\n for (const candidate of candidates) {\n if (evaluatePolynomial(coefficients, candidate) === 0) {\n const reduced = syntheticDivide(coefficients, candidate);\n const remainingRoots = solveQuadratic(reduced.quotient);\n return [candidate, ...remainingRoots];\n }\n }\n }\n\n throw new Error('polynomialRoot() currently supports degree up to 3');\n}\n\n/**\n * @param {any[]} a\n * @param {any[]} b\n */\nfunction dotProduct(a, b) {\n return a.reduce((sum, value, index) => sum + value * b[index], 0);\n}\n\n/**\n * @param {any[]} vector\n */\nfunction vectorNorm(vector) {\n return Math.sqrt(dotProduct(vector, vector));\n}\n\n/**\n * @param {any[]} vector\n * @param {number} scalar\n */\nfunction scaleVector(vector, scalar) {\n return vector.map((value) => value * scalar);\n}\n\n/**\n * @param {any} a\n * @param {any} b\n */\nfunction subtractVectors(a, b) {\n return a.map(\n (/** @type {number} */ value, /** @type {string | number} */ index) => value - b[index]\n );\n}\n\n/**\n * @param {any[]} matrix\n */\nfunction transpose(matrix) {\n return matrix[0].map((/** @type {any} */ _, /** @type {string | number} */ colIndex) =>\n matrix.map((row) => row[colIndex])\n );\n}\n\n/**\n * @param {any} input\n */\nfunction qrDecomposition(input) {\n const A = asMatrixData(input).map((row) => [...row]);\n if (!A.length || !A.every((row) => row.length === A[0].length)) {\n throw new Error('qr() expects a rectangular matrix');\n }\n\n const rowCount = A.length;\n const colCount = A[0].length;\n const columns = transpose(A);\n const qColumns = [];\n\n for (let col = 0; col < colCount; col++) {\n let vector = [...columns[col]];\n\n for (let existing = 0; existing < qColumns.length; existing++) {\n const projection = dotProduct(qColumns[existing], columns[col]);\n vector = subtractVectors(vector, scaleVector(qColumns[existing], projection));\n }\n\n const norm = vectorNorm(vector);\n if (norm === 0) {\n throw new Error('qr() requires linearly independent columns');\n }\n\n qColumns.push(scaleVector(vector, 1 / norm));\n }\n\n for (let basisIndex = 0; qColumns.length < rowCount && basisIndex < rowCount; basisIndex++) {\n let candidate = Array.from({ length: rowCount }, (_, index) => (index === basisIndex ? 1 : 0));\n\n for (const column of qColumns) {\n const projection = dotProduct(column, candidate);\n candidate = subtractVectors(candidate, scaleVector(column, projection));\n }\n\n const norm = vectorNorm(candidate);\n if (norm > 1e-10) {\n qColumns.push(scaleVector(candidate, 1 / norm));\n }\n }\n\n const Q = Array.from({ length: rowCount }, (_, rowIndex) =>\n qColumns.map((column) => column[rowIndex])\n );\n\n const fullR = Array.from({ length: rowCount }, () => Array(colCount).fill(0));\n for (let row = 0; row < rowCount; row++) {\n for (let col = 0; col < colCount; col++) {\n fullR[row][col] = dotProduct(qColumns[row], columns[col]);\n }\n }\n\n return {\n Q: wrapDenseMatrix(Q),\n R: wrapDenseMatrix(fullR),\n };\n}\n\n/**\n * @param {string} expression\n */\nfunction splitTerms(expression) {\n const normalized = expression.replace(/\\s+/g, '');\n if (!normalized) {\n return [];\n }\n\n return normalized.replace(/-/g, '+-').split('+').filter(Boolean);\n}\n\n/**\n * @param {string} expression\n * @param {string} variable\n */\nfunction parsePolynomial(expression, variable) {\n const terms = splitTerms(expression);\n const coefficients = new Map();\n\n for (const term of terms) {\n if (term.includes(variable)) {\n const [rawCoeff, rawPower] = term.split(variable);\n let coefficient;\n\n if (rawCoeff === '' || rawCoeff === '+') {\n coefficient = 1;\n } else if (rawCoeff === '-') {\n coefficient = -1;\n } else {\n const cleaned = rawCoeff.endsWith('*') ? rawCoeff.slice(0, -1) : rawCoeff;\n coefficient = Number(cleaned);\n }\n\n if (!Number.isFinite(coefficient)) {\n throw new Error('Unsupported algebra term');\n }\n\n let power = 1;\n if (rawPower) {\n if (!rawPower.startsWith('^')) {\n throw new Error('Unsupported algebra term');\n }\n\n power = Number(rawPower.slice(1));\n }\n\n if (!Number.isInteger(power) || power < 0) {\n throw new Error('Only non-negative integer powers are supported');\n }\n\n coefficients.set(power, (coefficients.get(power) || 0) + coefficient);\n } else {\n const constant = Number(term);\n if (!Number.isFinite(constant)) {\n throw new Error('Unsupported algebra term');\n }\n coefficients.set(0, (coefficients.get(0) || 0) + constant);\n }\n }\n\n return coefficients;\n}\n\n/**\n * @param {any[] | Map<any, any>} coefficients\n * @param {string} variable\n */\nfunction formatPolynomial(coefficients, variable) {\n const ordered = [...coefficients.entries()]\n .filter(([, coefficient]) => coefficient !== 0)\n .sort((a, b) => b[0] - a[0]);\n\n if (!ordered.length) {\n return '0';\n }\n\n return ordered\n .map(([power, coefficient], index) => {\n const negative = coefficient < 0;\n const absCoeff = Math.abs(coefficient);\n let body;\n\n if (power === 0) {\n body = `${absCoeff}`;\n } else if (power === 1) {\n body = absCoeff === 1 ? variable : `${absCoeff} * ${variable}`;\n } else {\n body = absCoeff === 1 ? `${variable}^${power}` : `${absCoeff} * ${variable}^${power}`;\n }\n\n if (index === 0) {\n return negative ? `-${body}` : body;\n }\n\n return negative ? `- ${body}` : `+ ${body}`;\n })\n .join(' ');\n}\n\n/**\n * @param {string} expression\n */\nfunction simplifyExpression(expression) {\n const compact = expression.replace(/\\s+/g, '');\n const variableMatch = compact.match(/[a-zA-Z]+/);\n const variable = variableMatch?.[0] || 'x';\n const coefficients = parsePolynomial(expression, variable);\n return formatPolynomial(coefficients, variable);\n}\n\n/**\n * @param {string} expression\n * @param {string} variable\n */\nfunction derivativeExpression(expression, variable) {\n const coefficients = parsePolynomial(expression, variable);\n const derived = new Map();\n\n for (const [power, coefficient] of coefficients.entries()) {\n if (power === 0) {\n continue;\n }\n derived.set(power - 1, (derived.get(power - 1) || 0) + coefficient * power);\n }\n\n return formatPolynomial(derived, variable);\n}\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction _gcd(a, b) {\n a = Math.abs(a);\n b = Math.abs(b);\n while (b) {\n [a, b] = [b, a % b];\n }\n return a;\n}\n\n/**\n * @param {any} n\n */\nfunction _gamma(n) {\n if (n === 0) {\n throw new Error('gamma(0) is undefined');\n }\n if (Number.isInteger(n) && n < 0) {\n throw new Error('gamma() undefined for negative integers');\n }\n if (Number.isInteger(n) && n > 0) {\n let r = 1;\n for (let i = 2; i < n; i++) {\n r *= i;\n }\n return r;\n }\n const g = 7;\n const c = [\n 0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.32342877765313,\n -176.61502916214059, 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6,\n 1.5056327351493116e-7,\n ];\n // Euler's reflection formula: Gamma(z) = pi / (sin(pi*z) * Gamma(1-z))\n if (n < 0.5) {\n return Math.PI / (Math.sin(Math.PI * n) * _gamma(1 - n));\n }\n n -= 1;\n let x = c[0];\n for (let i = 1; i < g + 2; i++) {\n x += c[i] / (n + i);\n }\n const t = n + g + 0.5;\n return Math.sqrt(2 * Math.PI) * t ** (n + 0.5) * Math.exp(-t) * x;\n}\n\n/**\n * @param {any} n\n */\nfunction _identity(n) {\n return Array.from({ length: n }, (_, i) =>\n Array.from({ length: n }, (_, j) => (i === j ? 1 : 0))\n );\n}\n\n/**\n * @param {any[]} matrix\n */\nfunction _inverse(matrix) {\n const data = unwrapDenseMatrix(matrix);\n validateSquareMatrix(matrix);\n const n = data.length;\n\n if (n === 2) {\n const det = data[0][0] * data[1][1] - data[0][1] * data[1][0];\n if (det === 0) {\n throw new Error('Matrix is singular');\n }\n return wrapDenseMatrix([\n [data[1][1] / det, -data[0][1] / det],\n [-data[1][0] / det, data[0][0] / det],\n ]);\n }\n\n const result = Array.from({ length: n }, () => Array(n).fill(0));\n for (let col = 0; col < n; col++) {\n const b = Array.from({ length: n }, (_, i) => (i === col ? 1 : 0));\n const x = linearSolve(data, wrapDenseMatrix(b.map((v) => [v])));\n const xData = unwrapDenseMatrix(x);\n for (let row = 0; row < n; row++) {\n result[row][col] = xData[row][0];\n }\n }\n return wrapDenseMatrix(result);\n}\n\n/**\n * @param {any} matrix\n */\nfunction _rref(matrix) {\n const data = unwrapDenseMatrix(matrix).map((/** @type {any} */ row) => [...row]);\n let lead = 0;\n const rowCount = data.length;\n const colCount = data[0].length;\n\n for (let r = 0; r < rowCount; r++) {\n if (lead >= colCount) {\n break;\n }\n let i = r;\n while (Math.abs(data[i][lead]) < 1e-12) {\n i++;\n if (i === rowCount) {\n i = r;\n lead++;\n if (lead >= colCount) {\n break;\n }\n }\n }\n if (lead >= colCount) {\n break;\n }\n [data[r], data[i]] = [data[i], data[r]];\n const pivot = data[r][lead];\n for (let j = 0; j < colCount; j++) {\n data[r][j] /= pivot;\n }\n for (let i = 0; i < rowCount; i++) {\n if (i !== r) {\n const factor = data[i][lead];\n for (let j = 0; j < colCount; j++) {\n data[i][j] -= factor * data[r][j];\n }\n }\n }\n lead++;\n }\n return wrapDenseMatrix(data);\n}\n\n/**\n * @param {any[]} a\n * @param {any[]} b\n */\nfunction _cross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n/**\n * @param {any} matrix\n */\nfunction _eig2x2(matrix) {\n const data = unwrapDenseMatrix(matrix);\n validateSquareMatrix(matrix);\n const [[a, b], [c, d]] = data;\n const trace = a + d;\n const det = a * d - b * c;\n const disc = trace * trace - 4 * det;\n if (disc < 0) {\n throw new Error('Complex eigenvalues not supported');\n }\n const sqrtDisc = Math.sqrt(disc);\n const lambda1 = (trace + sqrtDisc) / 2;\n const lambda2 = (trace - sqrtDisc) / 2;\n\n // Solve (A - lambda*I)v = 0: pick non-zero row to solve for v1:v2 ratio\n const eigenvec = (/** @type {number} */ lambda) => {\n if (Math.abs(b) > 1e-12) {\n return [1, (lambda - a) / b];\n }\n if (Math.abs(c) > 1e-12) {\n return [(lambda - d) / c, 1];\n }\n return [1, 0];\n };\n\n const v1 = eigenvec(lambda1);\n const norm1 = Math.sqrt(v1[0] * v1[0] + v1[1] * v1[1]);\n const v2 = eigenvec(lambda2);\n const norm2 = Math.sqrt(v2[0] * v2[0] + v2[1] * v2[1]);\n\n return {\n values: [lambda1, lambda2],\n vectors: wrapDenseMatrix([\n [v1[0] / norm1, v2[0] / norm2],\n [v1[1] / norm1, v2[1] / norm2],\n ]),\n };\n}\n\n/**\n * @param {any[]} matrix\n */\nfunction _cholesky(matrix) {\n const data = unwrapDenseMatrix(matrix);\n validateSquareMatrix(matrix);\n const n = data.length;\n const L = Array.from({ length: n }, () => Array(n).fill(0));\n\n for (let j = 0; j < n; j++) {\n let sum = 0;\n for (let k = 0; k < j; k++) {\n sum += L[j][k] * L[j][k];\n }\n const val = data[j][j] - sum;\n if (val <= 0) {\n throw new Error('Matrix is not positive definite');\n }\n L[j][j] = Math.sqrt(val);\n for (let i = j + 1; i < n; i++) {\n sum = 0;\n for (let k = 0; k < j; k++) {\n sum += L[i][k] * L[j][k];\n }\n L[i][j] = (data[i][j] - sum) / L[j][j];\n }\n }\n return wrapDenseMatrix(L);\n}\n\n/**\n * @param {any} matrix\n */\nfunction _svd(matrix) {\n const data = unwrapDenseMatrix(matrix);\n const m = data.length;\n const n = data[0].length;\n\n if (m !== 2 || n !== 2) {\n throw new Error('svd() currently supports 2x2 matrices only');\n }\n\n const ata = [\n [\n data[0][0] * data[0][0] + data[1][0] * data[1][0],\n data[0][0] * data[0][1] + data[1][0] * data[1][1],\n ],\n [\n data[0][1] * data[0][0] + data[1][1] * data[1][0],\n data[0][1] * data[0][1] + data[1][1] * data[1][1],\n ],\n ];\n\n const eigResult = _eig2x2(wrapDenseMatrix(ata));\n const S = [\n Math.sqrt(Math.max(0, eigResult.values[0])),\n Math.sqrt(Math.max(0, eigResult.values[1])),\n ];\n const vecData = unwrapDenseMatrix(eigResult.vectors);\n const V = vecData;\n\n const U = [\n [\n (data[0][0] * V[0][0] + data[0][1] * V[1][0]) / (S[0] || 1),\n (data[0][0] * V[0][1] + data[0][1] * V[1][1]) / (S[1] || 1),\n ],\n [\n (data[1][0] * V[0][0] + data[1][1] * V[1][0]) / (S[0] || 1),\n (data[1][0] * V[0][1] + data[1][1] * V[1][1]) / (S[1] || 1),\n ],\n ];\n\n return {\n U: wrapDenseMatrix(U),\n S: wrapDenseMatrix([\n [S[0], 0],\n [0, S[1]],\n ]),\n V: wrapDenseMatrix(V),\n };\n}\n\nexport const internalFunctions = {\n fraction: (/** @type {number} */ n, /** @type {number} */ d) => makeFrac(n, d),\n\n numer: (/** @type {any} */ v) => numer(v),\n\n denom: (/** @type {any} */ v) => denom(v),\n\n isFraction: (/** @type {any} */ v) => isFraction(v),\n\n bignumber: (/** @type {any} */ n) => makeBN(n),\n\n isBigNumber: (/** @type {any} */ v) => isBigNumber(v),\n\n max: (/** @type {any[]} */ ...args) => {\n if (!args.length) {\n throw new Error('max() requires arguments');\n }\n return Math.max(...args);\n },\n\n min: (/** @type {any[]} */ ...args) => {\n if (!args.length) {\n throw new Error('min() requires arguments');\n }\n return Math.min(...args);\n },\n\n abs: (/** @type {number} */ x) => Math.abs(x),\n\n round: (/** @type {number} */ x) => Math.round(x),\n\n floor: (/** @type {number} */ x) => Math.floor(x),\n\n ceil: (/** @type {number} */ x) => Math.ceil(x),\n\n sqrt: (/** @type {number} */ x) => {\n if (x < 0) {\n throw new Error('sqrt() domain error');\n }\n return Math.sqrt(x);\n },\n\n pow: (/** @type {number} */ a, /** @type {number} */ b) => a ** b,\n\n det: (/** @type {any[]} */ matrix) => determinant(matrix),\n\n polynomialRoot: (/** @type {any} */ ...coefficients) => polynomialRoots(...coefficients),\n\n lsolve: (\n /** @type {any} */ a,\n /** @type {{ exprify: string; data: any; size: number[]; }} */ b\n ) => linearSolve(a, b),\n\n lup: (/** @type {any} */ matrix) => lupDecomposition(matrix),\n\n lyap: (/** @type {any} */ a, /** @type {any} */ q) => solveLyapunov(a, q),\n\n qr: (/** @type {any} */ matrix) => qrDecomposition(matrix),\n\n transpose: (/** @type {any} */ matrix) => wrapDenseMatrix(transpose(unwrapDenseMatrix(matrix))),\n\n inverse: (/** @type {any[]} */ matrix) => _inverse(matrix),\n\n trace: (/** @type {any[]} */ matrix) => {\n const data = unwrapDenseMatrix(matrix);\n validateSquareMatrix(matrix);\n return data.reduce(\n (\n /** @type {any} */ sum,\n /** @type {{ [x: string]: any; }} */ row,\n /** @type {string | number} */ i\n ) => sum + row[i],\n 0\n );\n },\n\n rank: (/** @type {any} */ matrix) => {\n const rrefData = unwrapDenseMatrix(_rref(matrix));\n return rrefData.filter((/** @type {any[]} */ row) => row.some((v) => Math.abs(v) > 1e-10))\n .length;\n },\n\n rref: (/** @type {any} */ matrix) => _rref(matrix),\n\n minor: (/** @type {any[]} */ matrix, /** @type {any} */ i, /** @type {any} */ j) => {\n const data = unwrapDenseMatrix(matrix);\n validateSquareMatrix(matrix);\n const sub = data\n .filter((/** @type {any} */ _, /** @type {any} */ ri) => ri !== i)\n .map((/** @type {any[]} */ row) => row.filter((_, cj) => cj !== j));\n return determinant(sub);\n },\n\n cofactor: (/** @type {any} */ matrix, /** @type {any} */ i, /** @type {any} */ j) => {\n const data = unwrapDenseMatrix(matrix);\n const sub = data\n .filter((/** @type {any} */ _, /** @type {any} */ ri) => ri !== i)\n .map((/** @type {any[]} */ row) =>\n row.filter((/** @type {any} */ _, /** @type {any} */ cj) => cj !== j)\n );\n return ((i + j) % 2 === 0 ? 1 : -1) * determinant(sub);\n },\n\n cross: (/** @type {any} */ a, /** @type {any} */ b) => {\n const v1 = unwrapDenseMatrix(a);\n const v2 = unwrapDenseMatrix(b);\n if (!Array.isArray(v1) || !Array.isArray(v2) || v1.length !== 3 || v2.length !== 3) {\n throw new Error('cross() requires two 3D vectors');\n }\n return _cross(v1, v2);\n },\n\n normalize: (/** @type {any} */ v) => {\n const data = unwrapDenseMatrix(v);\n if (!Array.isArray(data)) {\n throw new Error('normalize() expects a vector');\n }\n const norm = vectorNorm(data);\n if (norm === 0) {\n throw new Error('Cannot normalize zero vector');\n }\n return scaleVector(data, 1 / norm);\n },\n\n angle: (/** @type {any} */ a, /** @type {any} */ b) => {\n const v1 = unwrapDenseMatrix(a);\n const v2 = unwrapDenseMatrix(b);\n if (!Array.isArray(v1) || !Array.isArray(v2)) {\n throw new Error('angle() expects vectors');\n }\n const dot = dotProduct(v1, v2);\n const norms = vectorNorm(v1) * vectorNorm(v2);\n if (norms === 0) {\n throw new Error('Zero vector angle is undefined');\n }\n return Math.acos(Math.max(-1, Math.min(1, dot / norms)));\n },\n\n projection: (/** @type {any} */ a, /** @type {any} */ b) => {\n const v1 = unwrapDenseMatrix(a);\n const v2 = unwrapDenseMatrix(b);\n if (!Array.isArray(v1) || !Array.isArray(v2)) {\n throw new Error('projection() expects vectors');\n }\n const dot = dotProduct(v1, v2);\n const normB = vectorNorm(v2);\n if (normB === 0) {\n throw new Error('Zero vector projection undefined');\n }\n return dot / normB;\n },\n\n identity: (/** @type {any} */ n) => wrapDenseMatrix(_identity(n)),\n\n eye: (/** @type {any} */ n) => wrapDenseMatrix(_identity(n)),\n\n zeros: (/** @type {any} */ n, /** @type {undefined} */ m) => {\n if (m === undefined) {\n m = n;\n }\n return wrapDenseMatrix(Array.from({ length: n }, () => Array(m).fill(0)));\n },\n\n ones: (/** @type {any} */ n, /** @type {undefined} */ m) => {\n if (m === undefined) {\n m = n;\n }\n return wrapDenseMatrix(Array.from({ length: n }, () => Array(m).fill(1)));\n },\n\n diag: (/** @type {any} */ x) => {\n const arr = unwrapDenseMatrix(x);\n if (!Array.isArray(arr)) {\n throw new Error('diag() expects an array');\n }\n return wrapDenseMatrix(\n Array.from({ length: arr.length }, (_, i) =>\n Array.from({ length: arr.length }, (_, j) => (i === j ? arr[i] : 0))\n )\n );\n },\n\n cholesky: (/** @type {any[]} */ matrix) => _cholesky(matrix),\n\n eig: (/** @type {any[]} */ matrix) => _eig2x2(matrix),\n\n svd: (/** @type {any} */ matrix) => _svd(matrix),\n\n simplify: (/** @type {string} */ expression) => {\n if (typeof expression !== 'string') {\n throw new Error('simplify() expects an expression string');\n }\n return simplifyExpression(expression);\n },\n\n derivative: (/** @type {string} */ expression, variable = 'x') => {\n if (typeof expression !== 'string' || typeof variable !== 'string') {\n throw new Error('derivative() expects expression and variable strings');\n }\n return derivativeExpression(expression, variable);\n },\n\n sin: (/** @type {number} */ x) => Math.sin(x),\n\n cos: (/** @type {number} */ x) => Math.cos(x),\n\n tan: (/** @type {number} */ x) => Math.tan(x),\n\n sind: (/** @type {number} */ x) => Math.sin((x * Math.PI) / 180),\n\n cosd: (/** @type {number} */ x) => Math.cos((x * Math.PI) / 180),\n\n tand: (/** @type {number} */ x) => Math.tan((x * Math.PI) / 180),\n\n asind: (/** @type {number} */ x) => (Math.asin(x) * 180) / Math.PI,\n\n acosd: (/** @type {number} */ x) => (Math.acos(x) * 180) / Math.PI,\n\n atand: (/** @type {number} */ x) => (Math.atan(x) * 180) / Math.PI,\n\n atand2: (/** @type {number} */ y, /** @type {number} */ x) => (Math.atan2(y, x) * 180) / Math.PI,\n\n asin: (/** @type {number} */ x) => Math.asin(x),\n\n acos: (/** @type {number} */ x) => Math.acos(x),\n\n atan: (/** @type {number} */ x) => Math.atan(x),\n\n log: (/** @type {number} */ x) => {\n if (x <= 0) {\n throw new Error('log() domain error');\n }\n return Math.log(x);\n },\n\n log10: (/** @type {number} */ x) => {\n if (x <= 0) {\n throw new Error('log10() domain error');\n }\n return Math.log10(x);\n },\n\n exp: (/** @type {number} */ x) => Math.exp(x),\n\n random: () => Math.random(),\n\n and: (/** @type {any} */ a, /** @type {any} */ b) => Boolean(a && b),\n\n or: (/** @type {any} */ a, /** @type {any} */ b) => Boolean(a || b),\n\n not: (/** @type {any} */ a) => !a,\n '!': (/** @type {any} */ a) => !a,\n\n eq: (/** @type {any} */ a, /** @type {any} */ b) => a === b,\n\n neq: (/** @type {any} */ a, /** @type {any} */ b) => a !== b,\n notEqual: (/** @type {any} */ a, /** @type {any} */ b) => a !== b,\n\n gt: (/** @type {number} */ a, /** @type {number} */ b) => a > b,\n greaterThan: (/** @type {number} */ a, /** @type {number} */ b) => a > b,\n\n lt: (/** @type {number} */ a, /** @type {number} */ b) => a < b,\n lessThan: (/** @type {number} */ a, /** @type {number} */ b) => a < b,\n\n gte: (/** @type {number} */ a, /** @type {number} */ b) => a >= b,\n greaterThanOrEqual: (/** @type {number} */ a, /** @type {number} */ b) => a >= b,\n\n lte: (/** @type {number} */ a, /** @type {number} */ b) => a <= b,\n lessThanOrEqual: (/** @type {number} */ a, /** @type {number} */ b) => a <= b,\n\n clamp: (/** @type {number} */ x, /** @type {number} */ min, /** @type {number} */ max) => {\n if (min > max) {\n throw new Error('clamp(): min > max');\n }\n return Math.min(Math.max(x, min), max);\n },\n\n if: (/** @type {any} */ condition, /** @type {any} */ a, /** @type {any} */ b) =>\n condition ? a : b,\n\n typeof: (/** @type {any} */ x) => typeof x,\n\n length: (/** @type {string | any[]} */ x) => {\n if (typeof x === 'string' || Array.isArray(x)) {\n return x.length;\n }\n throw new Error('length() expects string or array');\n },\n\n sum: (/** @type {any[]} */ ...args) => {\n if (!args.length) {\n throw new Error('sum() requires at least one argument');\n }\n return args.reduce((a, b) => a + b, 0);\n },\n\n prod: (/** @type {any[]} */ ...args) => {\n if (!args.length) {\n throw new Error('prod() requires at least one argument');\n }\n return args.reduce((a, b) => a * b, 1);\n },\n\n mean: (/** @type {any[]} */ ...args) => {\n if (!args.length) {\n throw new Error('mean() requires at least one argument');\n }\n return args.reduce((a, b) => a + b, 0) / args.length;\n },\n\n median: (/** @type {any[]} */ ...args) => {\n if (!args.length) {\n throw new Error('median() requires at least one argument');\n }\n const sorted = [...args].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n return sorted.length % 2 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;\n },\n\n mode: (/** @type {any[]} */ ...args) => {\n if (!args.length) {\n throw new Error('mode() requires at least one argument');\n }\n const freq = new Map();\n args.forEach((v) => freq.set(v, (freq.get(v) || 0) + 1));\n let maxCount = 0;\n let result = args[0];\n for (const [val, count] of freq) {\n if (count > maxCount) {\n maxCount = count;\n result = val;\n }\n }\n return result;\n },\n\n std: (/** @type {any[]} */ ...args) => {\n if (args.length < 2) {\n throw new Error('std() requires at least two values');\n }\n const m = args.reduce((a, b) => a + b, 0) / args.length;\n return Math.sqrt(args.reduce((sum, v) => sum + (v - m) ** 2, 0) / (args.length - 1));\n },\n\n variance: (/** @type {any[]} */ ...args) => {\n if (args.length < 2) {\n throw new Error('variance() requires at least two values');\n }\n const m = args.reduce((a, b) => a + b, 0) / args.length;\n return args.reduce((sum, v) => sum + (v - m) ** 2, 0) / (args.length - 1);\n },\n\n range: (/** @type {any[]} */ ...args) => {\n if (!args.length) {\n throw new Error('range() requires at least one argument');\n }\n return Math.max(...args) - Math.min(...args);\n },\n\n gcd: (/** @type {number} */ a, /** @type {number} */ b) => _gcd(a, b),\n\n lcm: (/** @type {number} */ a, /** @type {number} */ b) => {\n if (a === 0 || b === 0) {\n return 0;\n }\n return Math.abs((a / _gcd(a, b)) * b);\n },\n\n factorial: (/** @type {any} */ n) => {\n if (!Number.isInteger(n) || n < 0) {\n throw new Error('factorial() requires a non-negative integer');\n }\n if (n === 0 || n === 1) {\n return 1;\n }\n let r = 1;\n for (let i = 2; i <= n; i++) {\n r *= i;\n }\n return r;\n },\n\n isPrime: (/** @type {any} */ n) => {\n if (!Number.isInteger(n) || n < 2) {\n return false;\n }\n if (n === 2) {\n return true;\n }\n if (n % 2 === 0) {\n return false;\n }\n for (let i = 3; i * i <= n; i += 2) {\n if (n % i === 0) {\n return false;\n }\n }\n return true;\n },\n\n primeFactors: (/** @type {any} */ n) => {\n if (!Number.isInteger(n) || n < 2) {\n throw new Error('primeFactors() requires an integer >= 2');\n }\n const factors = [];\n let m = n;\n for (let i = 2; i * i <= m; i++) {\n while (m % i === 0) {\n factors.push(i);\n m /= i;\n }\n }\n if (m > 1) {\n factors.push(m);\n }\n return factors;\n },\n\n fibonacci: (/** @type {any} */ n) => {\n if (!Number.isInteger(n) || n < 0) {\n throw new Error('fibonacci() requires a non-negative integer');\n }\n if (n <= 1) {\n return n;\n }\n let a = 0;\n let b = 1;\n for (let i = 2; i <= n; i++) {\n const t = a + b;\n a = b;\n b = t;\n }\n return b;\n },\n\n nCr: (/** @type {any} */ n, /** @type {any} */ r) => {\n if (!Number.isInteger(n) || !Number.isInteger(r) || n < 0 || r < 0) {\n throw new Error('nCr() requires non-negative integers');\n }\n if (r > n) {\n return 0;\n }\n if (r === 0 || r === n) {\n return 1;\n }\n r = Math.min(r, n - r);\n let result = 1;\n for (let i = 1; i <= r; i++) {\n result = (result * (n - r + i)) / i;\n }\n return result;\n },\n\n nPr: (/** @type {any} */ n, /** @type {any} */ r) => {\n if (!Number.isInteger(n) || !Number.isInteger(r) || n < 0 || r < 0) {\n throw new Error('nPr() requires non-negative integers');\n }\n if (r > n) {\n return 0;\n }\n let result = 1;\n for (let i = 0; i < r; i++) {\n result *= n - i;\n }\n return result;\n },\n\n gamma: (/** @type {any} */ n) => _gamma(n),\n\n sinh: (/** @type {number} */ x) => Math.sinh(x),\n\n cosh: (/** @type {number} */ x) => Math.cosh(x),\n\n tanh: (/** @type {number} */ x) => Math.tanh(x),\n\n asinh: (/** @type {number} */ x) => Math.asinh(x),\n\n acosh: (/** @type {number} */ x) => Math.acosh(x),\n\n atanh: (/** @type {number} */ x) => Math.atanh(x),\n\n sec: (/** @type {number} */ x) => {\n const c = Math.cos(x);\n if (Math.abs(c) < 1e-15) {\n throw new Error('sec() undefined for this input');\n }\n return 1 / c;\n },\n\n csc: (/** @type {number} */ x) => {\n const s = Math.sin(x);\n if (Math.abs(s) < 1e-15) {\n throw new Error('csc() undefined for this input');\n }\n return 1 / s;\n },\n\n cot: (/** @type {number} */ x) => {\n const s = Math.sin(x);\n if (Math.abs(s) < 1e-15) {\n throw new Error('cot() undefined for this input');\n }\n return Math.cos(x) / s;\n },\n\n trunc: (/** @type {number} */ x) => Math.trunc(x),\n\n sign: (/** @type {number} */ x) => Math.sign(x),\n\n frac: (/** @type {number} */ x) => x - Math.trunc(x),\n\n split: (\n /** @type {string} */ str,\n /** @type {{ [Symbol.split](string: string, limit?: number): string[]; }} */ sep\n ) => {\n if (typeof str !== 'string') {\n throw new Error('split() expects a string');\n }\n return str.split(sep);\n },\n\n join: (/** @type {any[]} */ arr, /** @type {string | undefined} */ sep) => {\n if (!Array.isArray(arr)) {\n throw new Error('join() expects an array');\n }\n return arr.join(sep);\n },\n\n upper: (/** @type {string} */ str) => {\n if (typeof str !== 'string') {\n throw new Error('upper() expects a string');\n }\n return str.toUpperCase();\n },\n\n lower: (/** @type {string} */ str) => {\n if (typeof str !== 'string') {\n throw new Error('lower() expects a string');\n }\n return str.toLowerCase();\n },\n\n trim: (/** @type {string} */ str) => {\n if (typeof str !== 'string') {\n throw new Error('trim() expects a string');\n }\n return str.trim();\n },\n\n replace: (\n /** @type {string} */ str,\n /** @type {{ [Symbol.replace](string: string, replaceValue: string): string; }} */ pattern,\n /** @type {string} */ replacement\n ) => {\n if (typeof str !== 'string') {\n throw new Error('replace() expects a string');\n }\n return str.replace(pattern, replacement);\n },\n\n substring: (\n /** @type {string} */ str,\n /** @type {number} */ start,\n /** @type {number | undefined} */ end\n ) => {\n if (typeof str !== 'string') {\n throw new Error('substring() expects a string');\n }\n return str.substring(start, end);\n },\n\n // ---- Reciprocal trig ----\n acot: (/** @type {number} */ x) => {\n if (x === 0) {\n return Math.PI / 2;\n }\n return Math.atan(1 / x);\n },\n\n asec: (/** @type {number} */ x) => {\n if (x < 1 && x > -1) {\n throw new Error('asec() domain error');\n }\n return Math.acos(1 / x);\n },\n\n acsc: (/** @type {number} */ x) => {\n if (x < 1 && x > -1) {\n throw new Error('acsc() domain error');\n }\n return Math.asin(1 / x);\n },\n\n acoth: (/** @type {number} */ x) => {\n if (Math.abs(x) <= 1) {\n throw new Error('acoth() domain error');\n }\n return Math.atanh(1 / x);\n },\n\n asech: (/** @type {number} */ x) => {\n if (x <= 0 || x > 1) {\n throw new Error('asech() domain error');\n }\n return Math.acosh(1 / x);\n },\n\n acsch: (/** @type {number} */ x) => {\n if (x === 0) {\n throw new Error('acsch() domain error');\n }\n return Math.asinh(1 / x);\n },\n\n // ---- Stats ----\n quantile: (/** @type {any[]} */ arr, /** @type {number} */ p) => {\n if (!Array.isArray(arr) || arr.length === 0) {\n throw new Error('quantile() expects a non-empty array');\n }\n if (p < 0 || p > 1) {\n throw new Error('quantile() p must be between 0 and 1');\n }\n const sorted = [...arr].sort((a, b) => a - b);\n const idx = p * (sorted.length - 1);\n const lo = Math.floor(idx);\n const hi = Math.ceil(idx);\n return lo === hi ? sorted[lo] : sorted[lo] + (idx - lo) * (sorted[hi] - sorted[lo]);\n },\n\n percentile: (/** @type {any[]} */ arr, /** @type {number} */ p) => {\n if (p < 0 || p > 100) {\n throw new Error('percentile() p must be between 0 and 100');\n }\n return internalFunctions.quantile(arr, p / 100);\n },\n\n covariance: (/** @type {number[]} */ x, /** @type {number[]} */ y) => {\n if (!Array.isArray(x) || !Array.isArray(y) || x.length < 2 || x.length !== y.length) {\n throw new Error('covariance() expects two arrays of equal length >= 2');\n }\n const mx = x.reduce((s, v) => s + v, 0) / x.length;\n const my = y.reduce((s, v) => s + v, 0) / y.length;\n return x.reduce((s, v, i) => s + (v - mx) * (y[i] - my), 0) / (x.length - 1);\n },\n\n corr: (/** @type {number[]} */ x, /** @type {number[]} */ y) => {\n const cov = internalFunctions.covariance(x, y);\n const sx = Math.sqrt(internalFunctions.covariance(x, x));\n const sy = Math.sqrt(internalFunctions.covariance(y, y));\n if (sx === 0 || sy === 0) {\n throw new Error('corr() zero variance');\n }\n return cov / (sx * sy);\n },\n\n randomInt: (/** @type {number} */ min, /** @type {number} */ max) => {\n if (!Number.isInteger(min) || !Number.isInteger(max)) {\n throw new Error('randomInt() expects integers');\n }\n return Math.floor(Math.random() * (max - min + 1)) + min;\n },\n\n randomNormal: (/** @type {number} */ mean, /** @type {number} */ std) => {\n if (std <= 0) {\n throw new Error('randomNormal() std must be > 0');\n }\n let u = 0;\n let v = 0;\n while (u === 0) {\n u = Math.random();\n }\n while (v === 0) {\n v = Math.random();\n }\n return mean + std * Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v);\n },\n\n // ---- Special functions ----\n erf: (/** @type {number} */ x) => {\n if (x === 0) {\n return 0;\n }\n // Abramowitz & Stegun approximation (max error 1.5e-7)\n const t = 1 / (1 + 0.3275911 * Math.abs(x));\n const a = [0.254829592, -0.284496736, 1.421413741, -1.453152027, 1.061405429];\n let p = a[4] * t + a[3];\n p = p * t + a[2];\n p = p * t + a[1];\n p = p * t + a[0];\n p = p * t;\n const result = 1 - p * Math.exp(-x * x);\n return x >= 0 ? result : -result;\n },\n\n lgamma: (/** @type {number} */ x) => {\n if (x <= 0) {\n throw new Error('lgamma() domain error (x > 0 required)');\n }\n // Stirling's approximation\n if (x < 12) {\n // Use recurrence: lgamma(x) = lgamma(x+1) - ln(x)\n let v = x;\n let r = 0;\n while (v < 12) {\n r -= Math.log(v);\n v += 1;\n }\n return r + internalFunctions.lgamma(v);\n }\n const inv = 1 / x;\n const s = (1 / 12 - (inv * inv) / 360 + (inv * inv * inv * inv) / 1260) * inv;\n return (x - 0.5) * Math.log(x) - x + 0.9189385332046727 + s;\n },\n\n beta: (/** @type {number} */ a, /** @type {number} */ b) => {\n if (a <= 0 || b <= 0) {\n throw new Error('beta() domain error');\n }\n return Math.exp(\n internalFunctions.lgamma(a) + internalFunctions.lgamma(b) - internalFunctions.lgamma(a + b)\n );\n },\n\n // ---- Numeric helpers ----\n hypot: (.../** @type {number[]} */ args) => Math.hypot(...args),\n\n cbrt: (/** @type {number} */ x) => Math.cbrt(x),\n\n log2: (/** @type {number} */ x) => {\n if (x <= 0) {\n throw new Error('log2() domain error');\n }\n return Math.log2(x);\n },\n\n log1p: (/** @type {number} */ x) => {\n if (x <= -1) {\n throw new Error('log1p() domain error');\n }\n return Math.log1p(x);\n },\n\n expm1: (/** @type {number} */ x) => Math.expm1(x),\n\n // ---- Bitwise ----\n bitAnd: (/** @type {number} */ a, /** @type {number} */ b) => {\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n throw new Error('bitAnd() expects integers');\n }\n return a & b;\n },\n\n bitOr: (/** @type {number} */ a, /** @type {number} */ b) => {\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n throw new Error('bitOr() expects integers');\n }\n return a | b;\n },\n\n bitXor: (/** @type {number} */ a, /** @type {number} */ b) => {\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n throw new Error('bitXor() expects integers');\n }\n return a ^ b;\n },\n\n bitNot: (/** @type {number} */ a) => {\n if (!Number.isInteger(a)) {\n throw new Error('bitNot() expects an integer');\n }\n return ~a;\n },\n};\n","/** @param {string | any[]} tokens */\nexport function buildAST(tokens) {\n let current = 0;\n\n const peek = () => tokens[current];\n const consume = () => tokens[current++];\n const lastPos = () => {\n const t = current > 0 ? tokens[current - 1] : null;\n return t && t.pos !== undefined ? t.pos : -1;\n };\n const tokenPos = () => {\n const t = peek();\n return t && t.pos !== undefined ? t.pos : -1;\n };\n\n const nodeAt = (/** @type {any} */ node) => {\n const pos = lastPos();\n if (pos >= 0) {\n node.pos = pos;\n }\n return node;\n };\n\n const syntaxError = (/** @type {string} */ msg) => {\n const pos = tokenPos() >= 0 ? tokenPos() : lastPos();\n const at = pos >= 0 ? ` at position ${pos}` : '';\n throw new Error(`${msg}${at}`);\n };\n\n const match = (/** @type {string} */ type, /** @type {string | undefined} */ value) => {\n const t = peek();\n if (!t) {\n return false;\n }\n\n if (t.type !== type) {\n return false;\n }\n\n if (value !== undefined && t.value !== value) {\n return false;\n }\n\n current++;\n return true;\n };\n\n const parseSliceOrIndex = () => {\n let start = null;\n\n if (!(peek()?.type === 'Colon' || peek()?.type === 'Comma' || peek()?.type === 'ArrayEnd')) {\n start = parseExpression();\n }\n\n if (match('Colon', undefined)) {\n let end = null;\n\n if (!(peek()?.type === 'Comma' || peek()?.type === 'ArrayEnd')) {\n end = parseExpression();\n }\n\n return {\n type: 'SliceExpression',\n start,\n end,\n };\n }\n\n return start;\n };\n\n function parsePrimary() {\n const token = consume();\n if (!token) {\n syntaxError('Unexpected end of input');\n }\n\n const withPos = (/** @type {any} */ node) => {\n if (token.pos !== undefined) {\n node.pos = token.pos;\n }\n return node;\n };\n\n switch (token.type) {\n case 'Number':\n case 'BigInt':\n case 'Boolean':\n case 'String':\n return withPos({ type: 'Literal', value: token.value });\n\n case 'ImaginaryLiteral':\n return withPos({ type: 'ImaginaryLiteral', value: token.value });\n\n case 'NumberWithUnit':\n return withPos({\n type: 'UnitLiteral',\n value: token.value,\n unit: token.unit,\n });\n\n case 'Identifier':\n return withPos({ type: 'Identifier', name: token.name });\n\n case 'Function':\n return withPos({\n type: 'Identifier',\n name: token.name,\n });\n\n case 'Parenthesis':\n if (token.value === '(') {\n const expr = parseExpression();\n\n if (!match('Parenthesis', ')')) {\n syntaxError(\"Expected ')'\");\n }\n\n return expr;\n }\n\n // falls through\n\n case 'ArrayStart': {\n const rows = [];\n let currentRow = [];\n\n if (!match('ArrayEnd', undefined)) {\n while (true) {\n currentRow.push(parseExpression());\n\n if (match('Comma', undefined)) {\n continue;\n }\n\n if (match('Semicolon', undefined)) {\n rows.push(currentRow);\n currentRow = [];\n continue;\n }\n\n if (match('ArrayEnd', undefined)) {\n rows.push(currentRow);\n break;\n }\n\n syntaxError(\"Expected ',', ';', or ']'\");\n }\n }\n\n if (!rows.length) {\n return withPos({ type: 'ArrayExpression', elements: [] });\n }\n\n if (rows.length === 1) {\n return withPos({ type: 'ArrayExpression', elements: rows[0] });\n }\n\n return withPos({\n type: 'ArrayExpression',\n elements: rows.map((elements) => ({\n type: 'ArrayExpression',\n elements,\n })),\n });\n }\n\n case 'BlockStart': {\n const properties = [];\n\n if (!match('BlockEnd', undefined)) {\n do {\n const keyToken = consume();\n\n if (keyToken.type !== 'Identifier' && keyToken.type !== 'String') {\n syntaxError('Invalid object key');\n }\n\n if (!match('Colon', undefined)) {\n syntaxError(\"Expected ':' after key\");\n }\n\n const value = parseExpression();\n\n properties.push({\n key: keyToken.value,\n value,\n });\n } while (match('Comma', undefined));\n\n if (!match('BlockEnd', undefined)) {\n syntaxError(\"Expected '}'\");\n }\n }\n\n return withPos({ type: 'ObjectExpression', properties });\n }\n }\n\n syntaxError(`Unexpected token: ${JSON.stringify(token.value || token.name || token.type)}`);\n }\n\n function parseMember() {\n let object = parsePrimary();\n\n while (true) {\n if (match('ArrayStart', undefined)) {\n const selectors = [];\n\n if (!match('ArrayEnd', undefined)) {\n do {\n selectors.push(parseSliceOrIndex());\n } while (match('Comma', undefined));\n\n if (!match('ArrayEnd', undefined)) {\n syntaxError(\"Expected ']'\");\n }\n }\n\n object = nodeAt({\n type: 'IndexExpression',\n object,\n selectors,\n });\n continue;\n }\n\n if (match('Dot', undefined)) {\n const property = consume();\n\n if (property.type !== 'Identifier') {\n syntaxError(\"Expected property after '.'\");\n }\n\n object = nodeAt({\n type: 'MemberExpression',\n object,\n property: { type: 'Identifier', name: property.value },\n optional: false,\n });\n continue;\n }\n\n if (match('Operator', '?.')) {\n const property = consume();\n\n object = nodeAt({\n type: 'MemberExpression',\n object,\n property: { type: 'Identifier', name: property.value },\n optional: true,\n });\n continue;\n }\n\n break;\n }\n\n return object;\n }\n\n function parseCallChain() {\n let expr = parseMember();\n\n while (peek()?.type === 'Parenthesis' && peek()?.value === '(') {\n consume();\n\n const args = [];\n\n if (!(peek()?.type === 'Parenthesis' && peek()?.value === ')')) {\n do {\n if (match('Spread', undefined)) {\n const arg = parseExpression();\n args.push({ type: 'SpreadElement', argument: arg });\n } else {\n args.push(parseExpression());\n }\n } while (match('Comma', undefined));\n }\n\n if (!match('Parenthesis', ')')) {\n syntaxError(\"Expected ')'\");\n }\n\n expr = nodeAt({\n type: 'CallExpression',\n callee: expr,\n arguments: args,\n });\n }\n\n return expr;\n }\n\n function parseUnary() {\n if (match('UnaryOperator', undefined)) {\n const operator = tokens[current - 1].value;\n\n return nodeAt({\n type: 'UnaryExpression',\n operator,\n argument: parseUnary(),\n });\n }\n\n return parseCallChain();\n }\n\n function parsePower() {\n const left = parseUnary();\n\n if (match('Operator', '^')) {\n const right = parsePower();\n return nodeAt({\n type: 'BinaryExpression',\n operator: '^',\n left,\n right,\n });\n }\n\n return left;\n }\n\n function parseMultiplication() {\n let left = parsePower();\n\n while (match('Operator', '*') || match('Operator', '/') || match('Operator', '%')) {\n const operator = tokens[current - 1].value;\n const right = parsePower();\n\n left = nodeAt({\n type: 'BinaryExpression',\n operator,\n left,\n right,\n });\n }\n\n return left;\n }\n\n function parseAddition() {\n let left = parseMultiplication();\n\n while (match('Operator', '+') || match('Operator', '-')) {\n const operator = tokens[current - 1].value;\n const right = parseMultiplication();\n\n left = nodeAt({\n type: 'BinaryExpression',\n operator,\n left,\n right,\n });\n }\n\n return left;\n }\n\n function parseUnitConversion() {\n const left = parseAddition();\n\n const nextKeyword = peek();\n if (nextKeyword?.type === 'Keyword' && ['to', 'in'].includes(nextKeyword.value)) {\n consume();\n const next = consume();\n\n if (!next || next.type !== 'Unit') {\n syntaxError(`Expected unit after '${nextKeyword.value}'`);\n }\n\n return nodeAt({\n type: 'UnitConversion',\n from: left,\n to: next.value,\n });\n }\n\n return left;\n }\n\n function parseComparison() {\n let left = parseUnitConversion();\n\n while (\n match('Operator', '>') ||\n match('Operator', '<') ||\n match('Operator', '>=') ||\n match('Operator', '<=') ||\n match('Operator', '==')\n ) {\n const operator = tokens[current - 1].value;\n const right = parseUnitConversion();\n\n left = nodeAt({\n type: 'BinaryExpression',\n operator,\n left,\n right,\n });\n }\n\n return left;\n }\n\n function parseLogical() {\n let left = parseComparison();\n\n while (match('Operator', '&&') || match('Operator', '||')) {\n const operator = tokens[current - 1].value;\n const right = parseComparison();\n\n left = nodeAt({\n type: 'LogicalExpression',\n operator,\n left,\n right,\n });\n }\n\n return left;\n }\n\n function parseNullish() {\n let left = parseLogical();\n\n while (match('Operator', '??')) {\n const right = parseLogical();\n\n left = nodeAt({\n type: 'LogicalExpression',\n operator: '??',\n left,\n right,\n });\n }\n\n return left;\n }\n\n function parseTernary() {\n const test = parseNullish();\n\n if (match('Ternary', '?')) {\n const consequent = parseExpression();\n\n if (!match('Ternary', ':')) {\n syntaxError(\"Expected ':' in ternary\");\n }\n\n const alternate = parseExpression();\n\n return nodeAt({\n type: 'ConditionalExpression',\n test,\n consequent,\n alternate,\n });\n }\n\n if (match('Colon', undefined)) {\n const end = parseNullish();\n\n return nodeAt({\n type: 'RangeExpression',\n start: test,\n end,\n });\n }\n\n return test;\n }\n\n function parseLambda() {\n const left = parsePipeline();\n\n if (match('Operator', '->')) {\n let params;\n if (left.type === 'Identifier') {\n params = [left.name];\n } else if (left.type === 'ArrayExpression') {\n params = left.elements.map((/** @type {{ type: string; name: any; }} */ el) => {\n if (el.type !== 'Identifier') {\n syntaxError('Lambda parameter must be an identifier');\n }\n return el.name;\n });\n } else {\n syntaxError('Invalid lambda parameter');\n }\n\n const body = parseLambda();\n\n return nodeAt({\n type: 'ArrowFunctionExpression',\n params,\n body,\n });\n }\n\n return left;\n }\n\n function parsePipeline() {\n let left = parseTernary();\n\n while (match('Operator', '|>')) {\n const right = parseTernary();\n\n left = nodeAt({\n type: 'PipelineExpression',\n left,\n right,\n });\n }\n\n return left;\n }\n\n function parseAssignment() {\n const left = parseLambda();\n\n if (\n match('Operator', '=') ||\n match('Operator', '+=') ||\n match('Operator', '-=') ||\n match('Operator', '*=') ||\n match('Operator', '/=')\n ) {\n const operator = tokens[current - 1].value;\n\n // f(a,b) = expr: treat as function definition, not assignment\n if (left.type === 'CallExpression') {\n const isFunctionTarget =\n left.callee?.type === 'Identifier' &&\n left.arguments.every((/** @type {{ type: string; }} */ arg) => arg.type === 'Identifier');\n\n if (!isFunctionTarget) {\n syntaxError('Invalid function definition');\n }\n\n const right = parseAssignment();\n\n return nodeAt({\n type: 'FunctionAssignmentExpression',\n operator,\n left: {\n type: 'Identifier',\n name: left.callee.name,\n },\n params: left.arguments.map((/** @type {{ name: any; }} */ arg) => arg.name),\n right,\n });\n }\n\n if (\n left.type !== 'Identifier' &&\n left.type !== 'MemberExpression' &&\n left.type !== 'IndexExpression'\n ) {\n syntaxError('Invalid assignment target');\n }\n\n const right = parseAssignment();\n\n return nodeAt({\n type: 'AssignmentExpression',\n operator,\n left,\n right,\n });\n }\n\n return left;\n }\n\n function parseExpression() {\n return parseAssignment();\n }\n\n const ast = parseExpression();\n\n if (current < tokens.length) {\n const t = peek();\n const pos = t && t.pos !== undefined ? ` at position ${t.pos}` : '';\n throw new Error(\n `Unexpected token \"${t ? JSON.stringify(t.value || t.name || t.type) : '?'}\"${pos}`\n );\n }\n\n return ast;\n}\n","import { tokenize } from '../parser/tokenizer.js';\nimport { evaluateAST } from '../parser/evaluator.js';\nimport { createContext } from './context.js';\nimport { mathOperations } from '../math/operations.js';\nimport { createUnitsStore } from '../utils/store.js';\nimport { globalUnits } from '../utils/globalUnits.js';\nimport { createVarStore } from '../variables/store.js';\nimport { createFunctionRegistry } from '../function/registry.js';\nimport { internalFunctions } from '../function/internal.js';\nimport { isDenseMatrixWrapper, serializeExprifyValue, wrapDenseMatrix } from '../utils/matrix.js';\nimport { buildAST } from '../parser/astBuild.js';\nimport { isFraction, formatFraction } from '../math/fraction.js';\nimport { isBigNumber, formatBigNumber } from '../math/bignumber.js';\n\nconst isComplex = (/** @type {any} */ value) =>\n value && typeof value === 'object' && 're' in value && 'im' in value;\n\nconst isUnitValue = (/** @type {any} */ value) =>\n value && typeof value === 'object' && 'value' in value && 'unit' in value;\n\nconst isMatrix = (/** @type {any[]} */ value) =>\n Array.isArray(value) && value.length > 0 && value.every(Array.isArray);\n\nconst formatComplex = (/** @type {{ re: any; im: number; }} */ value) => {\n if (!isComplex(value)) {\n return value;\n }\n\n const real = value.re;\n const imaginary = Math.abs(value.im);\n const sign = value.im < 0 ? '-' : '+';\n\n if (real === 0) {\n if (value.im === 1) {\n return 'i';\n }\n if (value.im === -1) {\n return '-i';\n }\n return `${value.im}i`;\n }\n\n const imagPart = imaginary === 1 ? 'i' : `${imaginary}i`;\n return `${real} ${sign} ${imagPart}`;\n};\n\nconst formatScalar = (/** @type {unknown} */ value) => {\n if (isBigNumber(value)) {\n return formatBigNumber(value);\n }\n if (typeof value !== 'number') {\n return String(value);\n }\n\n if (Number.isInteger(value)) {\n return String(value);\n }\n\n return Number(value.toFixed(14)).toString();\n};\n\nconst formatResult = (/** @type {any} */ value) => {\n if (isFraction(value)) {\n return formatFraction(value);\n }\n\n if (isBigNumber(value)) {\n return formatBigNumber(value);\n }\n\n if (isComplex(value)) {\n return formatComplex(value);\n }\n\n if (isUnitValue(value)) {\n return `${value.value} ${value.unit}`;\n }\n\n if (isDenseMatrixWrapper(value)) {\n return serializeExprifyValue(value);\n }\n\n if (isMatrix(value)) {\n return value.map((/** @type {unknown[]} */ row) => row.map(formatScalar).join('\\t')).join('\\n');\n }\n\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n\n if (value && typeof value === 'object') {\n return serializeExprifyValue(value);\n }\n\n return value;\n};\n\nclass exprify {\n constructor() {\n this.math = mathOperations;\n this.units = createUnitsStore(globalUnits);\n this.functions = createFunctionRegistry(internalFunctions);\n this.variables = createVarStore();\n this._cache = new Map();\n this.variables.set('pi', Math.PI);\n this.variables.set('e', Math.E);\n this.variables.set('PHI', (1 + Math.sqrt(5)) / 2);\n this.variables.set('TAU', 2 * Math.PI);\n this.variables.set('INFINITY', Infinity);\n this.variables.set('NaN', NaN);\n this.addFunction('parse', (/** @type {any} */ expression) => {\n if (typeof expression !== 'string') {\n throw new Error('parse() expects an expression string');\n }\n return expression;\n });\n this.addFunction('leafCount', (/** @type {string} */ value) => {\n const countLeafTokens = (/** @type {string} */ expression) => {\n const strippedKeys = expression.replace(/(^|[{,]\\s*)[a-zA-Z_][a-zA-Z0-9_]*\\s*:/g, '$1');\n const matches = strippedKeys.match(/\\d+(\\.\\d+)?(e[+-]?\\d+)?n?|[a-zA-Z_][a-zA-Z0-9_]*/gi);\n return matches ? matches.length : 0;\n };\n\n let ast = value;\n if (typeof value === 'string') {\n try {\n ast = this.parse(value).ast;\n } catch {\n return countLeafTokens(value);\n }\n }\n\n const countLeaves = (/** @type {any} */ node) => {\n if (!node || typeof node !== 'object') {\n return 0;\n }\n\n switch (node.type) {\n case 'Literal':\n case 'ImaginaryLiteral':\n case 'UnitLiteral':\n case 'Identifier':\n return 1;\n default:\n return Object.values(node).reduce((sum, child) => {\n if (Array.isArray(child)) {\n return sum + child.reduce((inner, item) => inner + countLeaves(item), 0);\n }\n\n return sum + countLeaves(child);\n }, 0);\n }\n };\n\n return countLeaves(ast);\n });\n this.addFunction('matrix', (/** @type {any} */ value) => wrapDenseMatrix(value));\n this.addFunction('sparse', (/** @type {any} */ value) => wrapDenseMatrix(value));\n\n // --- rationalize(): polynomial/rational arithmetic using Map<JSON-power-tuple, coefficient> ---\n this.addFunction('rationalize', (/** @type {string} */ expression, withDetails = false) => {\n if (typeof expression !== 'string') {\n throw new Error('rationalize() expects an expression string');\n }\n\n const normalizedExpression = expression\n .replace(/\\s+/g, '')\n .replace(/(\\d)([a-zA-Z(])/g, '$1*$2')\n .replace(/([a-zA-Z)])(\\d)/g, '$1*$2');\n\n const polyKey = (powers) =>\n JSON.stringify(Object.entries(powers).sort(([a], [b]) => a.localeCompare(b)));\n const keyToPowers = (/** @type {string} */ key) => Object.fromEntries(JSON.parse(key));\n const constPoly = (/** @type {number} */ value) => new Map([[polyKey({}), value]]);\n const varPoly = (/** @type {any} */ name) => new Map([[polyKey({ [name]: 1 }), 1]]);\n const cleanPoly = (/** @type {any[] | Map<any, any>} */ poly) =>\n new Map([...poly.entries()].filter(([, coeff]) => coeff !== 0));\n const addPoly = (\n /** @type {Iterable<readonly [any, any]> | null | undefined} */ a,\n /** @type {any[] | Map<any, any>} */ b,\n sign = 1\n ) => {\n const result = new Map(a);\n for (const [key, coeff] of b.entries()) {\n result.set(key, (result.get(key) || 0) + sign * coeff);\n }\n return cleanPoly(result);\n };\n const multiplyPoly = (/** @type {any} */ a, /** @type {any} */ b) => {\n const result = new Map();\n for (const [keyA, coeffA] of a.entries()) {\n const powersA = keyToPowers(keyA);\n for (const [keyB, coeffB] of b.entries()) {\n const powersB = keyToPowers(keyB);\n const merged = { ...powersA };\n for (const [name, power] of Object.entries(powersB)) {\n merged[name] = (merged[name] || 0) + power;\n }\n const key = polyKey(merged);\n result.set(key, (result.get(key) || 0) + coeffA * coeffB);\n }\n }\n return cleanPoly(result);\n };\n const powPoly = (/** @type {any} */ poly, /** @type {number} */ exponent) => {\n let result = constPoly(1);\n for (let index = 0; index < exponent; index++) {\n result = multiplyPoly(result, poly);\n }\n return result;\n };\n const rational = (/** @type {Map<any, any>} */ num, den = constPoly(1)) => ({ num, den });\n const addRat = (\n /** @type {{ num: any; den: any; }} */ a,\n /** @type {{ den: any; num: any; }} */ b,\n sign = 1\n ) =>\n rational(\n addPoly(multiplyPoly(a.num, b.den), multiplyPoly(b.num, a.den), sign),\n multiplyPoly(a.den, b.den)\n );\n const mulRat = (\n /** @type {{ num: any; den: any; }} */ a,\n /** @type {{ num: any; den: any; }} */ b\n ) => rational(multiplyPoly(a.num, b.num), multiplyPoly(a.den, b.den));\n const divRat = (\n /** @type {{ num: any; den: any; }} */ a,\n /** @type {{ den: any; num: any; }} */ b\n ) => rational(multiplyPoly(a.num, b.den), multiplyPoly(a.den, b.num));\n const negRat = (\n /** @type {{ num: any[] | Map<any, any>; den: Map<string, number> | undefined; }} */ value\n ) => rational(addPoly(new Map(), value.num, -1), value.den);\n const astToRat = (/** @type {any} */ node) => {\n switch (node.type) {\n case 'Literal':\n return rational(constPoly(node.value));\n case 'Identifier':\n return rational(varPoly(node.name));\n case 'UnaryExpression':\n if (node.operator === '-') {\n return negRat(astToRat(node.argument));\n }\n throw new Error('Unsupported unary operator');\n case 'BinaryExpression': {\n const left = astToRat(node.left);\n const right = astToRat(node.right);\n switch (node.operator) {\n case '+':\n return addRat(left, right);\n case '-':\n return addRat(left, right, -1);\n case '*':\n return mulRat(left, right);\n case '/':\n return divRat(left, right);\n case '^': {\n if (\n node.right.type !== 'Literal' ||\n !Number.isInteger(node.right.value) ||\n node.right.value < 0\n ) {\n throw new Error('Unsupported exponent');\n }\n return rational(\n powPoly(left.num, node.right.value),\n powPoly(left.den, node.right.value)\n );\n }\n default:\n throw new Error('Unsupported operator in rationalize()');\n }\n }\n default:\n throw new Error('Unsupported expression in rationalize()');\n }\n };\n const formatPoly = (/** @type {any} */ poly) => {\n const entries = [...poly.entries()]\n .filter(([, coeff]) => coeff !== 0)\n .sort(([keyA], [keyB]) => {\n const powersA = keyToPowers(keyA);\n const powersB = keyToPowers(keyB);\n const firstVarA = Object.keys(powersA).sort()[0] || '';\n const firstVarB = Object.keys(powersB).sort()[0] || '';\n\n if (firstVarA !== firstVarB) {\n return firstVarA.localeCompare(firstVarB);\n }\n\n const degreeA = Object.values(powersA).reduce((sum, value) => sum + value, 0);\n const degreeB = Object.values(powersB).reduce((sum, value) => sum + value, 0);\n return degreeB - degreeA;\n });\n\n if (!entries.length) {\n return '0';\n }\n\n return entries\n .map(([key, coeff], index) => {\n const powers = keyToPowers(key);\n const absCoeff = Math.abs(coeff);\n const variablePart = Object.entries(powers)\n .map(([name, power]) => (power === 1 ? name : `${name} ^ ${power}`))\n .join(' * ');\n let body = variablePart;\n\n if (!body) {\n body = `${absCoeff}`;\n } else if (absCoeff !== 1) {\n body = `${absCoeff} * ${body}`;\n }\n\n if (index === 0) {\n return coeff < 0 ? `- ${body}`.replace('- ', '-') : body;\n }\n\n return coeff < 0 ? `- ${body}` : `+ ${body}`;\n })\n .join(' ');\n };\n\n const ast = this.parse(normalizedExpression).ast;\n const result = astToRat(ast);\n const numerator = formatPoly(result.num);\n const denominator = formatPoly(result.den);\n const variableSet = new Set();\n\n for (const poly of [result.num, result.den]) {\n for (const key of poly.keys()) {\n for (const name of Object.keys(keyToPowers(key))) {\n variableSet.add(name);\n }\n }\n }\n\n if (!withDetails) {\n return `(${numerator}) / (${denominator})`;\n }\n\n return {\n numerator,\n denominator,\n coefficients: [],\n variables: [...variableSet].sort(),\n expression: `(${numerator}) / (${denominator})`,\n };\n });\n\n this.addFunction('map', (/** @type {any[]} */ arr, /** @type {any} */ fnOrName) => {\n if (!Array.isArray(arr)) {\n throw new Error('map() expects an array');\n }\n const fn = typeof fnOrName === 'string' ? this.functions.get(fnOrName) : fnOrName;\n if (typeof fn !== 'function') {\n throw new Error('map() requires a function or function name');\n }\n return arr.map((x) => fn(x));\n });\n\n this.addFunction('filter', (/** @type {any[]} */ arr, /** @type {any} */ fnOrName) => {\n if (!Array.isArray(arr)) {\n throw new Error('filter() expects an array');\n }\n const fn = typeof fnOrName === 'string' ? this.functions.get(fnOrName) : fnOrName;\n if (typeof fn !== 'function') {\n throw new Error('filter() requires a function or function name');\n }\n return arr.filter((x) => fn(x));\n });\n\n // Numeric integration via Simpson's 1/3 rule with 100 subintervals\n this.addFunction(\n 'integral',\n (/** @type {any} */ expr, /** @type {number} */ a, /** @type {number} */ b) => {\n if (typeof expr !== 'string') {\n throw new Error('integral() expects an expression string');\n }\n const compiled = this.compile(expr);\n const n = 100;\n const h = (b - a) / n;\n let sum = compiled({ x: a }) + compiled({ x: b });\n for (let i = 1; i < n; i++) {\n const x = a + i * h;\n const f = compiled({ x });\n sum += i % 2 === 0 ? 2 * f : 4 * f;\n }\n return (h / 3) * sum;\n }\n );\n\n // Summation: evaluate expr for variable = start..end\n this.addFunction(\n 'sigma',\n (\n /** @type {any} */ variable,\n /** @type {any} */ start,\n /** @type {number} */ end,\n /** @type {any} */ expr\n ) => {\n if (typeof expr !== 'string') {\n throw new Error('sigma() expects an expression string');\n }\n const compiled = this.compile(expr);\n let total = 0;\n for (let i = start; i <= end; i++) {\n total += compiled({ [variable]: i });\n }\n return total;\n }\n );\n\n // Product: multiply expr for variable = start..end\n this.addFunction(\n 'pi',\n (\n /** @type {any} */ variable,\n /** @type {any} */ start,\n /** @type {number} */ end,\n /** @type {any} */ expr\n ) => {\n if (typeof expr !== 'string') {\n throw new Error('pi() expects an expression string');\n }\n const compiled = this.compile(expr);\n let total = 1;\n for (let i = start; i <= end; i++) {\n total *= compiled({ [variable]: i });\n }\n return total;\n }\n );\n\n this.addFunction(\n 'substitute',\n (/** @type {any} */ expr, /** @type {any} */ variable, /** @type {any} */ value) => {\n if (typeof expr !== 'string') {\n throw new Error('substitute() expects an expression string');\n }\n const compiled = this.compile(expr);\n return compiled({ [variable]: value });\n }\n );\n\n // Numeric limit: evaluate at progressively smaller epsilon until convergence\n this.addFunction(\n 'limit',\n (\n /** @type {any} */ expr,\n /** @type {any} */ variable,\n /** @type {number} */ approach,\n /** @type {string} */ direction\n ) => {\n if (typeof expr !== 'string') {\n throw new Error('limit() expects an expression string');\n }\n const compiled = this.compile(expr);\n const epsilons = [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7, 1e-8, 1e-9, 1e-10];\n let lastVal = NaN;\n for (const eps of epsilons) {\n let x;\n if (direction === 'right') {\n x = approach + eps;\n } else if (direction === 'left') {\n x = approach - eps;\n } else {\n x = approach + eps;\n }\n const val = compiled({ [variable]: x });\n if (isFinite(val)) {\n lastVal = val;\n }\n }\n return lastVal;\n }\n );\n\n // --- expand(): detect polynomial degree via forward differences, solve Vandermonde system for coefficients ---\n this.addFunction('expand', (/** @type {string} */ expr) => {\n if (typeof expr !== 'string') {\n throw new Error('expand() expects an expression string');\n }\n const variableMatch = expr.match(/[a-zA-Z_][a-zA-Z0-9_]*/);\n if (!variableMatch) {\n throw new Error('expand() could not identify variable');\n }\n const v = variableMatch[0];\n const cleaned = expr.replace(/\\s+/g, '').replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n const addStar = (/** @type {string} */ s) => s.replace(/(\\d)([a-zA-Z_])/g, '$1*$2');\n const evalAt = (/** @type {number} */ x) =>\n this.evaluate(`substitute(\"${addStar(cleaned)}\", \"${v}\", ${x})`);\n\n const maxDegree = 10;\n const vals = [];\n for (let i = 0; i <= maxDegree; i++) {\n vals.push(evalAt(i));\n }\n\n let degree = 0;\n let diffs = [...vals];\n for (let d = 0; d <= maxDegree; d++) {\n if (Math.abs(diffs[0]) > 1e-10) {\n degree = d;\n }\n const next = [];\n for (let i = 0; i < diffs.length - 1; i++) {\n next.push(diffs[i + 1] - diffs[i]);\n }\n diffs = next;\n if (diffs.every((x) => Math.abs(x) < 1e-10)) {\n break;\n }\n }\n\n const n = degree + 1;\n const m = Array.from({ length: n }, (_, i) => {\n const row = Array.from({ length: n }, (_, j) => i ** j);\n row.push(vals[i]);\n return row;\n });\n for (let col = 0; col < n; col++) {\n let pivot = col;\n while (pivot < n && Math.abs(m[pivot][col]) < 1e-12) {\n pivot++;\n }\n if (pivot === n) {\n continue;\n }\n [m[col], m[pivot]] = [m[pivot], m[col]];\n const pv = m[col][col];\n for (let j = col; j <= n; j++) {\n m[col][j] /= pv;\n }\n for (let row = 0; row < n; row++) {\n if (row !== col) {\n const f = m[row][col];\n for (let j = col; j <= n; j++) {\n m[row][j] -= f * m[col][j];\n }\n }\n }\n }\n const coeffs = m.map((row) => (Math.abs(row[n]) < 1e-10 ? 0 : row[n]));\n const terms = [];\n for (let i = degree; i >= 0; i--) {\n const c = coeffs[i];\n if (Math.abs(c) < 1e-10) {\n continue;\n }\n const sign = terms.length === 0 ? (c < 0 ? '-' : '') : c < 0 ? ' - ' : ' + ';\n const absC = Math.abs(c);\n const cStr = i === 0 ? `${absC}` : absC === 1 ? '' : `${absC}`;\n const pStr = i === 0 ? '' : i === 1 ? v : `${v}^${i}`;\n terms.push(`${sign}${cStr}${pStr}`);\n }\n return terms.join('') || '0';\n });\n\n // --- factor(): detect degree, solve coefficients, apply rational root theorem + synthetic division ---\n this.addFunction('factor', (/** @type {string} */ poly) => {\n if (typeof poly !== 'string') {\n throw new Error('factor() expects an expression string');\n }\n const cleaned = poly.replace(/\\s+/g, '');\n const variableMatch = cleaned.match(/[a-zA-Z_][a-zA-Z0-9_]*/);\n if (!variableMatch) {\n throw new Error('factor() could not identify variable');\n }\n const variable = variableMatch[0];\n const addStar = (/** @type {string} */ s) =>\n s.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/(\\d)([a-zA-Z_])/g, '$1*$2');\n const cleanedExpr = addStar(cleaned);\n const maxPower = 6;\n const vals = [];\n for (let power = 0; power <= maxPower; power++) {\n vals.push(this.evaluate(`substitute(\"${cleanedExpr}\", \"${variable}\", ${power})`));\n }\n let diff = vals.slice();\n let degree = 0;\n for (let d = 0; d <= maxPower; d++) {\n if (diff.every((x) => Math.abs(x) < 1e-10)) {\n degree = Math.max(0, d - 1);\n break;\n }\n if (d < maxPower) {\n const next = [];\n for (let i = 0; i < diff.length - 1; i++) {\n next.push(diff[i + 1] - diff[i]);\n }\n diff = next;\n }\n }\n if (degree === 0) {\n return `(${poly})`;\n }\n const n = degree + 1;\n const m = Array.from({ length: n }, (_, i) => {\n const row = Array.from({ length: n }, (_, j) => i ** j);\n row.push(vals[i]);\n return row;\n });\n for (let col = 0; col < n; col++) {\n let pivot = col;\n while (pivot < n && Math.abs(m[pivot][col]) < 1e-12) {\n pivot++;\n }\n if (pivot === n) {\n continue;\n }\n [m[col], m[pivot]] = [m[pivot], m[col]];\n const pv = m[col][col];\n for (let j = col; j <= n; j++) {\n m[col][j] /= pv;\n }\n for (let row = 0; row < n; row++) {\n if (row !== col) {\n const f = m[row][col];\n for (let j = col; j <= n; j++) {\n m[row][j] -= f * m[col][j];\n }\n }\n }\n }\n const coeffs = m.map((r) => (Math.abs(r[n]) < 1e-10 ? 0 : r[n]));\n if (degree >= 1 && degree <= 3) {\n const polyRootFn = this.functions.get('polynomialRoot');\n const rootArr = polyRootFn(...coeffs);\n const rootArrFlat = Array.isArray(rootArr) ? rootArr : [rootArr];\n const unique = [\n ...new Set(\n rootArrFlat.map((r) => (Number.isInteger(r) ? r : Math.round(r * 1e10) / 1e10))\n ),\n ].sort((a, b) => a - b);\n if (unique.length === degree) {\n const lead = coeffs[degree];\n const leadStr =\n Math.abs(lead - 1) > 1e-10 ? (Math.abs(lead + 1) < 1e-10 ? '-' : `${lead}`) : '';\n const factors = unique.map((r) => {\n if (Math.abs(r) < 1e-10) {\n return variable;\n }\n return r > 0 ? `(${variable} - ${r})` : `(${variable} + ${Math.abs(r)})`;\n });\n return `${leadStr}${factors.join('')}`;\n }\n }\n return `(${poly})`;\n });\n\n // --- solve(): split on '=', form f(x)=0, detect polynomial degree, find roots ---\n this.addFunction('solve', (/** @type {string} */ eqn, /** @type {string} */ variable) => {\n if (typeof eqn !== 'string') {\n throw new Error('solve() expects an equation string');\n }\n const parts = eqn.split('=');\n if (parts.length !== 2) {\n throw new Error('solve() expects an equation with =');\n }\n const lhs = parts[0].trim();\n const rhs = parts[1].trim();\n const expr = `(${lhs}) - (${rhs})`;\n const cleaned = expr.replace(/\\s+/g, '');\n const variableMatch = cleaned.match(/[a-zA-Z_][a-zA-Z0-9_]*/);\n const v = variable || (variableMatch ? variableMatch[0] : 'x');\n const addStar = (/** @type {string} */ s) =>\n s.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/(\\d)([a-zA-Z_])/g, '$1*$2');\n const cleanedExpr = addStar(cleaned);\n const maxPower = 6;\n const vals = [];\n for (let power = 0; power <= maxPower; power++) {\n vals.push(this.evaluate(`substitute(\"${cleanedExpr}\", \"${v}\", ${power})`));\n }\n let diff = vals.slice();\n let degree = 0;\n for (let d = 0; d <= maxPower; d++) {\n if (diff.every((x) => Math.abs(x) < 1e-10)) {\n degree = Math.max(0, d - 1);\n break;\n }\n if (d < maxPower) {\n const next = [];\n for (let i = 0; i < diff.length - 1; i++) {\n next.push(diff[i + 1] - diff[i]);\n }\n diff = next;\n }\n }\n if (degree === 0) {\n throw new Error('No solution found');\n }\n const n = degree + 1;\n const m = Array.from({ length: n }, (_, i) => {\n const row = Array.from({ length: n }, (_, j) => i ** j);\n row.push(vals[i]);\n return row;\n });\n for (let col = 0; col < n; col++) {\n let pivot = col;\n while (pivot < n && Math.abs(m[pivot][col]) < 1e-12) {\n pivot++;\n }\n if (pivot === n) {\n continue;\n }\n [m[col], m[pivot]] = [m[pivot], m[col]];\n const pv = m[col][col];\n for (let j = col; j <= n; j++) {\n m[col][j] /= pv;\n }\n for (let row = 0; row < n; row++) {\n if (row !== col) {\n const f = m[row][col];\n for (let j = col; j <= n; j++) {\n m[row][j] -= f * m[col][j];\n }\n }\n }\n }\n const coeffs = m.map((r) => (Math.abs(r[n]) < 1e-10 ? 0 : r[n]));\n if (degree >= 1 && degree <= 3) {\n const polyRootFn = this.functions.get('polynomialRoot');\n const rootArr = polyRootFn(...coeffs);\n const rootArrFlat = Array.isArray(rootArr) ? rootArr : [rootArr];\n return rootArrFlat.sort((a, b) => a - b);\n }\n throw new Error('solve() currently supports degree up to 3');\n });\n }\n\n /**\n * @param {any} name\n * @param {any} value\n */\n setVariable(name, value) {\n this.variables.set(name, value);\n }\n\n /**\n * @param {any} name\n */\n getVariable(name) {\n return this.variables.get(name);\n }\n\n /**\n * @param {string} name\n * @param {any} fn\n */\n addFunction(name, fn) {\n this.functions.register(name, fn);\n }\n\n _createContext() {\n return createContext({\n functions: this.functions,\n variables: this.variables,\n units: this.units,\n evaluate: this.evaluate.bind(this),\n });\n }\n\n /**\n * @param {any} expr\n */\n tokenize(expr) {\n if (typeof expr !== 'string') {\n throw new Error('Expression must be a string');\n }\n return tokenize(expr, this._createContext());\n }\n\n /**\n * @param {string} expr\n */\n parse(expr) {\n const tokens = this.tokenize(expr);\n const ast = buildAST(tokens);\n return { tokens, ast };\n }\n\n /**\n * @param {string} expr\n * @param {object} [scope]\n */\n evaluate(expr, scope = {}) {\n return formatResult(this._evaluateRaw(expr, scope));\n }\n\n /**\n * @param {string} expr\n * @param {object} [scope]\n */\n _evaluateRaw(expr, scope = {}) {\n const { ast } = this.parse(expr);\n const ctx = this._createContext();\n const mergedCtx = Object.keys(scope).length > 0 ? ctx.withScope(scope) : ctx;\n return evaluateAST(ast, mergedCtx);\n }\n\n /**\n * @param {string} expr\n */\n compile(expr) {\n if (this._cache.has(expr)) {\n return this._cache.get(expr);\n }\n\n const { ast } = this.parse(expr);\n\n const compiledFn = (scope = {}) => {\n const baseContext = this._createContext();\n const scopedContext = baseContext.withScope(scope);\n return formatResult(evaluateAST(ast, scopedContext));\n };\n\n this._cache.set(expr, compiledFn);\n return compiledFn;\n }\n\n clearCache() {\n this._cache.clear();\n }\n\n exportState() {\n return {\n variables: this.variables.all(),\n functions: this.functions.getAllFunctionsName(),\n units: this.units.getUnits(),\n };\n }\n\n importState(state) {\n if (state.variables) {\n this.variables.merge(state.variables);\n }\n if (state.units) {\n this.units.setUnits(state.units);\n }\n if (state.functions) {\n for (const name of state.functions) {\n if (!this.functions.has(name)) {\n // warn: function could not be restored (built-in only)\n }\n }\n }\n return this;\n }\n\n chain() {\n return new Chain(this);\n }\n}\n\nclass Chain {\n /** @param {exprify} exprifyInstance */\n constructor(exprifyInstance) {\n this._expr = exprifyInstance;\n this._rawResult = undefined;\n }\n\n evaluate(expr, scope = {}) {\n this._rawResult = this._expr._evaluateRaw(expr, { ...scope, ans: this._rawResult });\n return this;\n }\n\n setVariable(name, value) {\n this._expr.setVariable(name, value);\n return this;\n }\n\n compile(expr) {\n return this._expr.compile(expr);\n }\n\n done() {\n return formatResult(this._rawResult);\n }\n}\n\nexport default exprify;\n"],"names":["createFrac","createBN","makeFrac","makeBN"],"mappings":"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"}