{
  "version": 3,
  "sources": ["../src/index.js", "../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": ["import Exprify from './core/exprify.js';\nexport default Exprify;\n", "/** @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: '\u00B0C', note: '\u00B0C \u2192 K: add 273.15' },\n    F: { value: 1, unit: 'Fahrenheit', symbol: '\u00B0F', note: '\u00B0F \u2192 K: (\u00B0F - 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\u00B2' },\n    cm2: { value: 0.0001, unit: 'square centimeter', symbol: 'cm\u00B2' },\n    km2: { value: 1e6, unit: 'square kilometer', symbol: 'km\u00B2' },\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\u00B2' },\n    yd2: { value: 0.836127, unit: 'square yard', symbol: 'yd\u00B2' },\n  },\n\n  // Volume\n  volume: {\n    m3: { value: 1, unit: 'cubic meter', symbol: 'm\u00B3' },\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: '\u00B0' },\n    rad: { value: 57.2958, unit: 'radian', symbol: 'rad', note: '1 rad = 57.2958\u00B0' },\n    grad: { value: 0.9, unit: 'grad', symbol: 'grad', note: '1 grad = 0.9\u00B0' },\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\u00B9\u2070 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 \u2192 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"],
  "mappings": "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",
  "names": ["factor", "isComplex", "isMatrix", "rowIndexes", "b", "a", "_", "_", "i", "right", "result", "_"]
}
