{"version":3,"sources":["../src/index.ts","../src/bases.ts","../src/combination.ts","../src/complex.ts","../src/constants.ts","../src/number.ts","../src/utils.ts"],"sourcesContent":["export { toBase, fromBase } from \"./bases\";\r\nexport { factorial, combination, permutation } from \"./combination\";\r\nexport { Complex } from \"./complex\";\r\nexport * from \"./constants\";\r\nexport {\r\n  mod,\r\n  gcd,\r\n  lcm,\r\n  factors,\r\n  totient,\r\n  prime,\r\n  coprime,\r\n  sieveEratosthenes,\r\n  collatz,\r\n  digitalRoots,\r\n} from \"./number\";\r\nexport {\r\n  range,\r\n  lerp,\r\n  clamp,\r\n  approximateTo,\r\n  areClose,\r\n  isCloseToZero,\r\n  mapRange\r\n} from \"./utils\";\r\n","const alphabet = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\");\r\n\r\n/**\r\n * Converts an integer to its string representation on a given base\r\n * @param { number } n Number\r\n * @param { number } b Base\r\n * @returns { string }\r\n */\r\nexport function toBase(n: number, b: number): string {\r\n  if (!Number.isInteger(n) || n < 0) {\r\n    throw new Error(\"The number must be positive integer\");\r\n  }\r\n\r\n  if (!Number.isInteger(b) || b <= 0) {\r\n    throw new Error(\"The base must be a positive integer\");\r\n  }\r\n\r\n  if (b < 2) {\r\n    throw new Error(\"The min base is 2\");\r\n  }\r\n\r\n  if (b > alphabet.length) {\r\n    throw new Error(`The max base allowed is ${alphabet.length}`);\r\n  }\r\n\r\n  let e = 1;\r\n  const digits: string[] = [];\r\n  while (n / (e * b) >= 1) {\r\n    e *= b;\r\n  }\r\n  do {\r\n    digits.push(alphabet[Math.floor(n / e)]);\r\n    n = n % e;\r\n    e /= b;\r\n  } while (e >= 1);\r\n\r\n  return digits.join(\"\");\r\n}\r\n\r\n/**\r\n * Converts a string representing a number in a certain base to an integer\r\n * @param { string } d Digits\r\n * @param { number } b Base\r\n * @returns { string }\r\n */\r\nexport function fromBase(d: string, b: number): number {\r\n  if (!Number.isInteger(b) || b <= 0) {\r\n    throw new Error(\"The base must be a positive integer\");\r\n  }\r\n\r\n  if (b < 2) {\r\n    throw new Error(\"The min base is 2\");\r\n  }\r\n\r\n  if (b > alphabet.length) {\r\n    throw new Error(`The max base allowed is ${alphabet.length}`);\r\n  }\r\n  const digits = d.split(\"\").reverse();\r\n  return digits.reduce((prev: number, curr: string, e: number): number => {\r\n    const n = alphabet.indexOf(curr);\r\n    if (n < 0) {\r\n      throw new Error(`Digit ${curr} not found`);\r\n    }\r\n    if (n >= b) {\r\n      throw new Error(`Invalid digit ${curr} for base ${b}`);\r\n    }\r\n    return prev + n * b ** e;\r\n  }, 0);\r\n}\r\n","/**\r\n * Calculates the factorial of a positive integer\r\n * @param { number } n Number to calculate from\r\n * @param { number } m (Optional) Number to calculate to\r\n * @returns { number }\r\n */\r\nexport function factorial(n: number, m: number = NaN): number {\r\n  if (!Number.isInteger(n) || n < 0) {\r\n    throw new Error(\"The number must be a positive integer\");\r\n  }\r\n\r\n  if (isNaN(m)) {\r\n    m = 1;\r\n  } else {\r\n    if (!Number.isInteger(m) || m < 0) {\r\n      throw new Error(\"The lower limit must be a positive integer\");\r\n    }\r\n    if (n < m) {\r\n      throw new Error(\"The lower limit cannot be higher than the number\");\r\n    }\r\n  }\r\n\r\n  if (n === 0 || n === m - 1) {\r\n    return 1;\r\n  }\r\n\r\n  let f = 1;\r\n  while (n >= m) {\r\n    f *= n;\r\n    n--;\r\n  }\r\n  return f;\r\n}\r\n\r\n/**\r\n * Calculates the combination of n taking by k.\r\n * @param { number } n\r\n * @param { number } k\r\n * @returns { number }\r\n */\r\nexport function combination(n: number, k: number): number {\r\n  if (!Number.isInteger(n) || n < 0) {\r\n    throw new Error(\"The number of elements must be a positive integer\");\r\n  }\r\n  if (!Number.isInteger(k) || k < 0) {\r\n    throw new Error(\"The group quantity must be a positive integer\");\r\n  }\r\n  if (k > n) {\r\n    throw new Error(\r\n      \"The group quantity cannot be greater than the total elements\"\r\n    );\r\n  }\r\n  if (k === 0 || k === n) {\r\n    return 1;\r\n  }\r\n  return (\r\n    factorial(n, Math.max(k + 1, n - k + 1)) / factorial(Math.min(k, n - k))\r\n  );\r\n}\r\n\r\n/**\r\n * Calculates the permutation of n taking by k.\r\n * @param { number } n\r\n * @param { number } k\r\n * @returns { number }\r\n */\r\nexport function permutation(n: number, k: number): number {\r\n  if (!Number.isInteger(n) || n < 0) {\r\n    throw new Error(\"The number of elements must be a positive integer\");\r\n  }\r\n  if (!Number.isInteger(k) || k < 0) {\r\n    throw new Error(\"The group quantity must be a positive integer\");\r\n  }\r\n  if (k > n) {\r\n    throw new Error(\r\n      \"The group quantity cannot be greater than the total elements\"\r\n    );\r\n  }\r\n  if (k === 0) {\r\n    return 1;\r\n  }\r\n  return factorial(n, n - k + 1);\r\n}\r\n","export class Complex {\r\n  private _mag?: number;\r\n  private _arg?: number;\r\n\r\n  constructor(public readonly a: number, public readonly b: number) { }\r\n\r\n  static fromPolar(r: number, theta: number): Complex {\r\n    return new Complex(r * Math.cos(theta), r * Math.sin(theta));\r\n  }\r\n\r\n  static zero = new Complex(0, 0);\r\n  static one = new Complex(1, 0);\r\n  static i = new Complex(0, 1);\r\n\r\n  /**\r\n   *\r\n   * @param { number | Complex} n\r\n   */\r\n  add(n: number | Complex): Complex {\r\n    let { a, b } = this;\r\n    if (typeof n === \"number\") {\r\n      a += n;\r\n    } else if (n instanceof Complex) {\r\n      a += n.a;\r\n      b += n.b;\r\n    }\r\n    return new Complex(a, b);\r\n  }\r\n\r\n  /**\r\n   *\r\n   * @param { number | Complex} n\r\n   */\r\n  sub(n: number | Complex): Complex {\r\n    let { a, b } = this;\r\n    if (typeof n === \"number\") {\r\n      a -= n;\r\n    } else if (n instanceof Complex) {\r\n      a -= n.a;\r\n      b -= n.b;\r\n    }\r\n    return new Complex(a, b);\r\n  }\r\n\r\n  /**\r\n   *\r\n   * @param { number | Complex} n\r\n   */\r\n  mult(n: number | Complex): Complex {\r\n    let { a, b } = this;\r\n    if (typeof n === \"number\") {\r\n      a *= n;\r\n      b *= n;\r\n    } else if (n instanceof Complex) {\r\n      a = this.a * n.a - this.b * n.b;\r\n      b = this.a * n.b + this.b * n.a;\r\n    }\r\n    return new Complex(a, b);\r\n  }\r\n\r\n  /**\r\n   *\r\n   * @param { number | Complex} n\r\n   */\r\n  div(n: number | Complex): Complex {\r\n    let { a, b } = this;\r\n\r\n    if (n === 0 || (n instanceof Complex && n.a === 0 && n.b === 0)) {\r\n      throw new Error(\"Division by zero\");\r\n    }\r\n\r\n    if (typeof n === \"number\") {\r\n      a /= n;\r\n      b /= n;\r\n    } else if (n instanceof Complex) {\r\n      const d = n.a * n.a + n.b * n.b;\r\n      a = (this.a * n.a + this.b * n.b) / d;\r\n      b = (this.b * n.a - this.a * n.b) / d;\r\n    }\r\n    return new Complex(a, b);\r\n  }\r\n\r\n  pow(n: number): Complex {\r\n    const r = Math.pow(this.mag, n);\r\n    const theta = this.arg * n;\r\n    return new Complex(r * Math.cos(theta), r * Math.sin(theta));\r\n  }\r\n\r\n  sqrt(): Complex {\r\n    let { a, b } = this;\r\n    const m = Math.sqrt(this.mag);\r\n    const phi = Math.atan2(this.b, this.a) * 0.5;\r\n    a = m * Math.cos(phi);\r\n    b = m * Math.sin(phi);\r\n\r\n    return new Complex(a, b);\r\n  }\r\n\r\n  conjugate(): Complex {\r\n    return new Complex(this.a, -1 * this.b);\r\n  }\r\n\r\n  equals(n: Complex): boolean {\r\n    return this.a === n.a && this.b === n.b;\r\n  }\r\n\r\n  toString(): string {\r\n    let str = \"\";\r\n    if (this.a !== 0) {\r\n      str += `${this.a}`;\r\n    }\r\n    if (this.b > 0) {\r\n      if (this.b === 1) {\r\n        str += ` + i`;\r\n      } else {\r\n        str += ` + ${this.b}i`;\r\n      }\r\n    } else if (this.b < 0) {\r\n      if (this.b === -1) {\r\n        str += ` - i`;\r\n      } else {\r\n        str += ` - ${Math.abs(this.b)}i`;\r\n      }\r\n    }\r\n    return str.trim();\r\n  }\r\n\r\n  /**\r\n   * @returns { number }\r\n   */\r\n  get mag(): number {\r\n    if (this._mag === undefined) {\r\n      this._mag = Math.sqrt(this.a * this.a + this.b * this.b);\r\n    }\r\n    return this._mag;\r\n  }\r\n\r\n  /**\r\n   * @returns { number }\r\n   */\r\n  get arg(): number {\r\n    if (!this._arg) {\r\n      this._arg = Math.atan2(this.b, this.a);\r\n    }\r\n    return this._arg;\r\n  }\r\n};","export const EPSILON = 1e-10;\r\nexport const TAU = Math.PI * 2;\r\nexport const PHI = (1 + Math.sqrt(5)) / 2;\r\nexport const SQRT2 = Math.SQRT2;\r\nexport const SQRT1_2 = Math.SQRT1_2;\r\nexport const SQRT3 = Math.sqrt(3);\r\nexport const SQRT3_2 = Math.sqrt(3) * 0.5;\r\nexport const LN2 = Math.LN2;\r\nexport const LN10 = Math.LN10;\r\n\r\nexport const DEG_TO_RAD = Math.PI / 180;\r\nexport const RAD_TO_DEG = 180 / Math.PI;\r\n\r\nexport const PI = Math.PI;\r\nexport const TWO_PI = 2 * Math.PI;\r\nexport const HALF_PI = 0.5 * Math.PI;\r\nexport const QUARTER_PI = 0.25 * Math.PI;\r\n\r\nexport const ANGLE_RIGHT = 0;\r\nexport const ANGLE_UP = Math.PI / 2;\r\nexport const ANGLE_LEFT = Math.PI;\r\nexport const ANGLE_DOWN = (3 * Math.PI) / 2;\r\n\r\nexport const SQRT_2PI = Math.sqrt(2 * Math.PI);\r\nexport const INV_SQRT2 = 1 / Math.SQRT2;\r\nexport const INV_SQRT_2PI = 1 / SQRT_2PI;\r\n\r\nexport const ZERO = 0;\r\nexport const ONE = 1;\r\nexport const TWO = 2;\r\nexport const HALF = 0.5;\r\nexport const THIRD = 1 / 3;\r\nexport const QUARTER = 0.25;\r\n","export function mod(n: number, m: number): number {\r\n  if (!Number.isInteger(n)) {\r\n    throw new Error(\"The number must be an integer\");\r\n  }\r\n\r\n  if (!Number.isInteger(m) || m <= 0) {\r\n    throw new Error(\"Modulo must be a positive integer\");\r\n  }\r\n\r\n  return ((n % m) + m) % m;\r\n}\r\n\r\n/**\r\n * Gets the greatest common divisor\r\n * @param { number } a\r\n * @param { number } b\r\n */\r\nexport function gcd(a: number, b: number): number {\r\n  if (!Number.isInteger(a) || a <= 0 || !Number.isInteger(b) || b <= 0) {\r\n    throw new Error(\"Both numbers must be positive integers\");\r\n  }\r\n  while (b !== 0) {\r\n    [a, b] = [b, a % b];\r\n  }\r\n  return a;\r\n}\r\n\r\n/**\r\n * Gets least common multiple\r\n * @param { number } a\r\n * @param { number } b\r\n */\r\nexport function lcm(a: number, b: number): number {\r\n  if (!Number.isInteger(a) || a <= 0) {\r\n    throw new Error(\"Both numbers must be positive integers\");\r\n  }\r\n  if (!Number.isInteger(b) || b <= 0) {\r\n    throw new Error(\"Both numbers must be positive integers\");\r\n  }\r\n  const d = gcd(a, b);\r\n  return (a * b) / d;\r\n}\r\n\r\n/**\r\n * Checks if a number is prime\r\n * @param { number } n\r\n * @returns { boolean }\r\n */\r\nexport function prime(n: number): boolean {\r\n  if (!Number.isInteger(n) || n <= 0) {\r\n    throw new Error(\"The number must be positive integer\");\r\n  }\r\n  const l = Math.sqrt(n);\r\n  for (let i = 2; i <= l; i++) {\r\n    if (n % i === 0) {\r\n      return false;\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\n/**\r\n * Checks if a number is coprime with another\r\n * @param { number } a\r\n * @param { number } b\r\n * @returns { boolean }\r\n */\r\nexport function coprime(a: number, b: number): boolean {\r\n  if (!Number.isInteger(a) || a <= 0) {\r\n    throw new Error(\"Positive integer expected\");\r\n  }\r\n  if (!Number.isInteger(b) || b <= 0) {\r\n    throw new Error(\"Positive integer expected\");\r\n  }\r\n  return gcd(a, b) === 1;\r\n}\r\n\r\n/**\r\n * Get the prime factorization of a positive integer\r\n * @param { number } n\r\n * @returns { number[] }\r\n */\r\nexport function factors(n: number): number[] {\r\n  if (!Number.isInteger(n) || n <= 0) {\r\n    throw new Error(\"The number must be positive integer\");\r\n  }\r\n  const factors: number[] = [];\r\n\r\n  if (n === 1) {\r\n    return [1];\r\n  }\r\n\r\n  let i = 2;\r\n\r\n  while (n > 1) {\r\n    if (n % i === 0) {\r\n      n /= i;\r\n      factors.push(i);\r\n    } else {\r\n      i++;\r\n    }\r\n  }\r\n  return factors;\r\n}\r\n\r\n/**\r\n * Gets the totient of a posite integer\r\n * @param { number } m\r\n * @returns { number }\r\n */\r\nexport function totient(m: number): number {\r\n  if (!Number.isInteger(m) || m <= 0) {\r\n    throw new Error(\"The number must be positive integer\");\r\n  }\r\n  const factorization = factors(m);\r\n  const uniqueFactors = factorization.filter((item, index, self) => {\r\n    return self.indexOf(item) === index;\r\n  });\r\n  let a = 1;\r\n  let b = 1;\r\n  uniqueFactors.forEach((f) => {\r\n    a *= f;\r\n    b *= f - 1;\r\n  });\r\n\r\n  return (b * m) / a;\r\n}\r\n\r\n/**\r\n * Generates de Collatz sequence\r\n * @param { number } n\r\n * @param { number } limit\r\n * @returns { number }\r\n */\r\nexport function collatz(n: number, limit: number = 10000): number[] {\r\n  if (!Number.isInteger(n) || n <= 0) {\r\n    throw new Error(\"The number must be positive integer\");\r\n  }\r\n\r\n  const seq = [n];\r\n\r\n  for (let i = 1; i < limit; i++) {\r\n    if (n === 1) {\r\n      break;\r\n    }\r\n    if (n % 2 === 0) {\r\n      n = n * 0.5;\r\n    } else {\r\n      n = 3 * n + 1;\r\n    }\r\n    seq.push(n);\r\n  }\r\n\r\n  return seq;\r\n}\r\n\r\n/**\r\n * Gets the digital roots of a positive integer\r\n * @param { number } n\r\n * @returns { number }\r\n */\r\nexport function digitalRoots(n: number): number {\r\n  if (!Number.isInteger(n) || n <= 0) {\r\n    throw new Error(\"The number must be positive integer\");\r\n  }\r\n  if (n < 10) {\r\n    return n;\r\n  }\r\n  do {\r\n    let chars = n.toString().split(\"\");\r\n    n = chars.reduce((prev, c) => (prev += Number(c)), 0);\r\n  } while (n >= 10);\r\n\r\n  return n;\r\n}\r\n\r\n/**\r\n * Generates all prime numbers up to a given integer `n` using the\r\n * Sieve of Eratosthenes algorithm with bit-packing optimization.\r\n *\r\n * Uses a `Uint32Array` as a compact bitset, where each bit represents\r\n * whether a number has been marked as composite.\r\n *\r\n * @param {number} n - Upper bound (inclusive). Must be >= 2.\r\n * @returns {number[]} An array of prime numbers in the range [2, n].\r\n *\r\n * @example\r\n * sieveEratosthenes(10); // [2, 3, 5, 7]\r\n */\r\nexport function sieveEratosthenes(n: number): number[] {\r\n  if (n < 2 || !Number.isInteger(n)) {\r\n    throw new Error(\"Integer greater than 2 expected\");\r\n  }\r\n  const numBits = 32;\r\n  const nonPrime = new Uint32Array(Math.ceil((n + 1) / numBits));\r\n  const primes: number[] = [];\r\n  for (let i = 2; i < n; i++) {\r\n    const word = Math.floor(i / numBits);\r\n    const bit = i % numBits;\r\n\r\n    if ((nonPrime[word] & (1 << bit)) !== 0) {\r\n      continue;\r\n    }\r\n    primes.push(i);\r\n    for (let multiple = i * i; multiple < n; multiple += i) {\r\n      const w = Math.floor(multiple / numBits);\r\n      const b = multiple % numBits;\r\n      nonPrime[w] = nonPrime[w] | (1 << b);\r\n    }\r\n  }\r\n  return primes;\r\n}\r\n","import { EPSILON } from \"./constants\";\r\n\r\n/**\r\n * Generates an array of numbers from a `start` (inclusively) to an `end`\r\n * (exclusively), using a `step`\r\n *\r\n * @param { number } start\r\n * @param { number } end\r\n * @param { number } step\r\n * @returns { number[] }\r\n */\r\nexport function range(start: number, end: number, step: number = 1): number[] {\r\n  if (start === end) {\r\n    throw new Error(\"Invalid range\");\r\n  }\r\n\r\n  if (start < end && step <= 0) {\r\n    throw new Error(\"Invalid range\");\r\n  }\r\n\r\n  if (start > end && step >= 0) {\r\n    throw new Error(\"Invalid range\");\r\n  }\r\n\r\n  const a = [];\r\n  if (step > 0) {\r\n    for (let i = start; i < end; i += step) {\r\n      a.push(i);\r\n    }\r\n  } else {\r\n    for (let i = start; i > end; i += step) {\r\n      a.push(i);\r\n    }\r\n  }\r\n  return a;\r\n}\r\n\r\nexport function lerp(start: number, stop: number, amount: number): number {\r\n  if (amount < 0 || amount > 1) {\r\n    throw new Error('Amount must be between 0 and 1');\r\n  }\r\n  return start + ( stop - start ) * amount;\r\n}\r\n\r\nexport function clamp(value: number, lowerBound: number, upperBound: number): number {\r\n  if (lowerBound > upperBound) {\r\n    throw new Error('Lower bound must be lower than upper bound');\r\n  }\r\n  return Math.max(Math.min(value, upperBound), lowerBound);\r\n}\r\n\r\nexport function approximateTo(n: number, target = 0, epsilon = EPSILON): number {\r\n  return Math.abs(n - target) < epsilon ? target : n;\r\n}\r\n\r\nexport function areClose(n: number, m: number, epsilon = EPSILON): boolean {\r\n  return Math.abs(n - m) < epsilon;\r\n}\r\n\r\nexport function isCloseToZero(n: number, epsilon = EPSILON): boolean {\r\n  return Math.abs(n) < epsilon;\r\n}\r\n\r\nexport function mapRange(\r\n  value: number,\r\n  inputMin: number,\r\n  inputMax: number,\r\n  outputMin: number,\r\n  outputMax: number,\r\n  clampValue: boolean = false,\r\n): number {\r\n  if (inputMin === inputMax) {\r\n    throw new Error(\"Invalid range recieved\");\r\n  }\r\n  const p = (value - inputMin) / (inputMax - inputMin);\r\n  let outputVal = outputMin + p * (outputMax - outputMin);\r\n  if (clampValue) {\r\n    outputVal = clamp(outputVal, outputMin, outputMax);\r\n  }\r\n  return outputVal;\r\n}\r\n"],"mappings":"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","names":["factors"]}