exprify 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -33
- package/dist/exprify.cjs.js +671 -4
- package/dist/exprify.cjs.js.map +1 -1
- package/dist/exprify.esm.js +671 -4
- package/dist/exprify.esm.js.map +1 -1
- package/dist/exprify.js +672 -5
- package/dist/exprify.js.map +1 -1
- package/dist/exprify.min.js +2 -2
- package/dist/exprify.min.js.map +1 -1
- package/package.json +1 -1
- package/src/core/Exprify.js +231 -2
- package/src/function/internal.js +342 -0
- package/src/parser/astBuild.js +24 -1
- package/src/parser/evaluator.js +31 -1
- package/src/utils/matrix.js +53 -0
- package/.gitattributes +0 -2
- package/.github/workflows/ci.yml +0 -40
- package/.github/workflows/npm-publish.yml +0 -38
- package/.github/workflows/security-audit.yml +0 -34
- package/CHANGELOG.md +0 -11
- package/doc/tokenType.txt +0 -48
- package/rollup.config.js +0 -80
- package/test/browser.html +0 -23
- package/test/exprify.test.js +0 -140
package/dist/exprify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exprify.js","sources":["../src/parser/tokenizer.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 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 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 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 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 /* ===== 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}","function validateSquareMatrix(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 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 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 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\": // 🔥 ADD THIS\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 (\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\";\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 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 (isMatrix(value)) {\n return value.map((row) => row.join(\"\\t\")).join(\"\\n\");\n }\n\n if (Array.isArray(value)) {\n return value.join(\"\\n\");\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 }\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.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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"}
|