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