{"version":3,"file":"index.cjs","sources":["../node_modules/@rec-math/math/esm/index.js","../../src/physical-constants.ts","../../src/stretch-range.ts","../../src/survey-parameters.ts","../../src/model.ts","../../src/index.ts"],"sourcesContent":["/*! @rec-math/math v1.3.0 2022-06-28 23:54:20\n *  https://github.com/rec-math/ts-math#readme\n *  Copyright pbuk (https://github.com/pb-uk) MIT license.\n */\n\n// rec-math/src/version.ts\r\nconst version = '1.3.0';\n\n// rec-math/src/numerical/quad/adaptive-quadrature.ts\r\n/** Defaults for integration. */\r\nconst defaults = {\r\n    /**\r\n     * Target error estimate for a step: if this is smaller it can lead to\r\n     * accumulation of roundoff errors.\r\n     */\r\n    epsilon: Number.EPSILON * 16,\r\n    /**\r\n     * Maximum depth \\\\( d_{max} \\\\)for integration: the maximum number of steps\r\n     * can be \\\\( 2^{d_{max}} \\\\).\r\n     * */\r\n    maxDepth: Infinity,\r\n};\r\n/**\r\n * Perform a substitution with an appropriate change of variables to deal with\r\n * infinite ranges.\r\n *\r\n * @param f Integrand callback.\r\n * @param a Lower limit.\r\n * @param b Upper limit.\r\n * @returns An array with any necessary substitution.\r\n */\r\nconst changeOfVariables = (f, a, b) => {\r\n    if (!isFinite(b)) {\r\n        if (!isFinite(a)) {\r\n            // Change variables to integrate between - and + infinity.\r\n            const _f = (t) => {\r\n                const tSquared = t * t;\r\n                const oneOverOneMinusTSquared = 1 / (1 - tSquared);\r\n                return (f(t * oneOverOneMinusTSquared) *\r\n                    (1 + tSquared) *\r\n                    oneOverOneMinusTSquared *\r\n                    oneOverOneMinusTSquared);\r\n            };\r\n            return [_f, -1, 1];\r\n        }\r\n        // Change variables to integrate up to infinity.\r\n        const _f = (t) => {\r\n            const oneOverOneMinusT = 1 / (1 - t);\r\n            return f(a + t * oneOverOneMinusT) * oneOverOneMinusT * oneOverOneMinusT;\r\n        };\r\n        return [_f, 0, 1];\r\n    }\r\n    if (!isFinite(a)) {\r\n        // Change variables to integrate up from negative infinity.\r\n        const _f = (t) => {\r\n            return f(b - (1 - t) / t) / (t * t);\r\n        };\r\n        return [_f, 0, 1];\r\n    }\r\n    return [f, a, b];\r\n};\r\nconst integrate = (integrationStep, f, a, b, options = {}) => {\r\n    // Establish settings.\r\n    const settings = Object.assign(Object.assign({}, defaults), options);\r\n    const { epsilon, maxDepth } = settings;\r\n    const info = { steps: 0, errorEstimate: 0, depth: 1 };\r\n    // Allow for a change of variables to deal with infinite limits.\r\n    const [_f, _a, _b] = changeOfVariables(f, a, b);\r\n    // Get estimate so we can work out the acceptable global error.\r\n    // Use a depth of 1 to calculate a 15 point Kronrod quadrature.\r\n    let [result, errorEstimate] = integrate_part(integrationStep, _f, // Integrand.\r\n    _a, // Lower limit.\r\n    _b, // Upper limit.\r\n    1, // New depth.\r\n    1, // Maximum depth.\r\n    0, Object.assign({}, info));\r\n    // Now calculate using the target global error.\r\n    const acceptableUnitError = Math.abs((epsilon * result) / (_b - _a));\r\n    [result, errorEstimate] = integrate_part(integrationStep, _f, // Integrand.\r\n    _a, // Lower limit.\r\n    _b, // Upper limit.\r\n    1, // New depth.\r\n    maxDepth, // Maximum depth.\r\n    acceptableUnitError, // Acceptable error per unit step.\r\n    info);\r\n    return [result, Object.assign(Object.assign({}, info), { errorEstimate })];\r\n};\r\nconst integrate_part = (integrationStep, f, a, // Lower limit.\r\nb, // Upper limit.\r\ndepth, // New depth.\r\nmaxDepth, // Maximum depth.\r\nacceptableUnitError, // Acceptable error per unit step.\r\ninfo) => {\r\n    // Initialize things.\r\n    const [currentEstimate, poorEstimate] = integrationStep(f, // Integrand.\r\n    a, // Lower limit.\r\n    b);\r\n    const errorEstimate = Math.abs(poorEstimate - currentEstimate);\r\n    if (depth >= maxDepth) {\r\n        // Reached the maximum allowable depth so return the partial sum.\r\n        ++info.steps;\r\n        return [currentEstimate, errorEstimate];\r\n    }\r\n    const acceptableError = acceptableUnitError * (b - a);\r\n    if (errorEstimate <= acceptableError) {\r\n        // Error is acceptable for the size of step so return the partial sum.\r\n        ++info.steps;\r\n        return [currentEstimate, errorEstimate];\r\n    }\r\n    const mid = (a + b) / 2;\r\n    if (a >= mid || mid >= b) {\r\n        // We can't make this step any smaller: looks like a discontinuity.\r\n        info.isUnreliable = true;\r\n        const safeErrorEstimate = isNaN(errorEstimate) ? 0 : errorEstimate;\r\n        if (isNaN(currentEstimate) || Math.abs(currentEstimate) === Infinity) {\r\n            return [0, safeErrorEstimate];\r\n        }\r\n        return [currentEstimate, safeErrorEstimate];\r\n    }\r\n    // Recurse deeper.\r\n    ++depth;\r\n    if (depth > info.depth) {\r\n        info.depth = depth;\r\n    }\r\n    const [leftEstimate, leftErrorEstimate] = integrate_part(integrationStep, f, // Integrand.\r\n    a, // Lower limit.\r\n    mid, // Upper limit.\r\n    depth, // New depth.\r\n    maxDepth, // Maximum depth.\r\n    acceptableUnitError, // Acceptable error per unit step.\r\n    info);\r\n    const [rightEstimate, rightErrorEstimate] = integrate_part(integrationStep, f, // Integrand.\r\n    mid, // Lower limit.\r\n    b, // Upper limit.\r\n    depth, // New depth.\r\n    maxDepth, // Maximum depth.\r\n    acceptableUnitError, // Acceptable error per unit step.\r\n    info);\r\n    return [leftEstimate + rightEstimate, leftErrorEstimate + rightErrorEstimate];\r\n};\n\n// rec-math/src/numerical/quad/gauss-kronrod-g7k15.ts\r\n// Gauss-Kronrod constants (G7, K15) on [-1, 1].\r\n// https://www.advanpix.com/2011/11/07/gauss-kronrod-quadrature-nodes-weights/\r\n//    node_g0k0 = 0;\r\n//    node_g1k2 = 4.058451513773971669066064120769615e-01 exact;\r\nconst node_g1k2 = 0.4058451513773972;\r\n//    node_g2k4 = 7.415311855993944398638647732807884e-01 exact;\r\nconst node_g2k4 = 0.7415311855993945;\r\n//    node_g3k6 = 9.491079123427585245261896840478513e-01 exact;\r\nconst node_g3k6 = 0.9491079123427585;\r\n//    node_k1 = 2.077849550078984676006894037732449e-01 exact;\r\nconst node_k1 = 0.20778495500789848;\r\n//    node_k3 = 5.860872354676911302941448382587296e-01 exact;\r\nconst node_k3 = 0.5860872354676911;\r\n//    node_k5 = 8.648644233597690727897127886409262e-01 exact;\r\nconst node_k5 = 0.8648644233597691;\r\n//    node_k7 = 9.914553711208126392068546975263285e-01 exact;\r\nconst node_k7 = 0.9914553711208126;\r\n//    weight_g0 = 4.179591836734693877551020408163265e-01 exact;\r\nconst weight_g0 = 0.4179591836734694;\r\n//    weight_g1 = 3.818300505051189449503697754889751e-01 exact;\r\nconst weight_g1 = 0.3818300505051189;\r\n//    weight_g2 = 2.797053914892766679014677714237796e-01 exact;\r\nconst weight_g2 = 0.27970539148927664;\r\n//    weight_g3 = 1.294849661688696932706114326790820e-01 exact;\r\nconst weight_g3 = 0.1294849661688697;\r\n//    weight_k0 = 2.094821410847278280129991748917143e-01 exact;\r\nconst weight_k0 = 0.20948214108472782;\r\n//    weight_k1 = 2.044329400752988924141619992346491e-01 exact;\r\nconst weight_k1 = 0.20443294007529889;\r\n//    weight_k2 = 1.903505780647854099132564024210137e-01 exact;\r\nconst weight_k2 = 0.19035057806478542;\r\n//    weight_k3 = 1.690047266392679028265834265985503e-01 exact;\r\nconst weight_k3 = 0.1690047266392679;\r\n//    weight_k4 = 1.406532597155259187451895905102379e-01 exact;\r\nconst weight_k4 = 0.14065325971552592;\r\n//    weight_k5 = 1.047900103222501838398763225415180e-01 exact;\r\nconst weight_k5 = 0.10479001032225019;\r\n//    weight_k6 = 6.309209262997855329070066318920429e-02 exact;\r\nconst weight_k6 = 0.06309209262997856;\r\n//    weight_k7 = 2.293532201052922496373200805896959e-02 exact;\r\nconst weight_k7 = 0.022935322010529224;\r\n/**\r\n * Perform a single integration step.\r\n *\r\n * @param f Integrand callback.\r\n * @param a Lower limit.\r\n * @param b Upper limit.\r\n * @returns [current best estimate, poor estimate]\r\n */\r\nconst integrationStep = (f, // Integrand.\r\na, // Lower limit.\r\nb) => {\r\n    // Gauss-Kronrod (G7, K15).\r\n    const scale = (b - a) / 2;\r\n    const offset = (a + b) / 2;\r\n    // const scaled_g0k0 = 0;\r\n    const scaled_k1 = node_k1 * scale;\r\n    const scaled_g1k2 = node_g1k2 * scale;\r\n    const scaled_k3 = node_k3 * scale;\r\n    const scaled_g2k4 = node_g2k4 * scale;\r\n    const scaled_k5 = node_k5 * scale;\r\n    const scaled_g3k6 = node_g3k6 * scale;\r\n    const scaled_k7 = node_k7 * scale;\r\n    const scaled_weight_g0 = weight_g0 * scale;\r\n    const scaled_weight_g1 = weight_g1 * scale;\r\n    const scaled_weight_g2 = weight_g2 * scale;\r\n    const scaled_weight_g3 = weight_g3 * scale;\r\n    const scaled_weight_k0 = weight_k0 * scale;\r\n    const scaled_weight_k1 = weight_k1 * scale;\r\n    const scaled_weight_k2 = weight_k2 * scale;\r\n    const scaled_weight_k3 = weight_k3 * scale;\r\n    const scaled_weight_k4 = weight_k4 * scale;\r\n    const scaled_weight_k5 = weight_k5 * scale;\r\n    const scaled_weight_k6 = weight_k6 * scale;\r\n    const scaled_weight_k7 = weight_k7 * scale;\r\n    const f_g0k0 = f(offset);\r\n    const f_k1_h = f(offset + scaled_k1);\r\n    const f_k1_l = f(offset - scaled_k1);\r\n    const f_g1k2_h = f(offset + scaled_g1k2);\r\n    const f_g1k2_l = f(offset - scaled_g1k2);\r\n    const f_k3_h = f(offset + scaled_k3);\r\n    const f_k3_l = f(offset - scaled_k3);\r\n    const f_g2k4_h = f(offset + scaled_g2k4);\r\n    const f_g2k4_l = f(offset - scaled_g2k4);\r\n    const f_k5_h = f(offset + scaled_k5);\r\n    const f_k5_l = f(offset - scaled_k5);\r\n    const f_g3k6_h = f(offset + scaled_g3k6);\r\n    const f_g3k6_l = f(offset - scaled_g3k6);\r\n    const f_k7_h = f(offset + scaled_k7);\r\n    const f_k7_l = f(offset - scaled_k7);\r\n    const poorEstimate = scaled_weight_g0 * f_g0k0 + // g0\r\n        scaled_weight_g1 * (f_g1k2_h + f_g1k2_l) + // g1\r\n        scaled_weight_g2 * (f_g2k4_h + f_g2k4_l) + // g2\r\n        scaled_weight_g3 * (f_g3k6_h + f_g3k6_l); // g3\r\n    const currentEstimate = scaled_weight_k0 * f_g0k0 + // k0\r\n        scaled_weight_k1 * (f_k1_h + f_k1_l) + // k1\r\n        scaled_weight_k2 * (f_g1k2_h + f_g1k2_l) + // k2\r\n        scaled_weight_k3 * (f_k3_h + f_k3_l) + // k3\r\n        scaled_weight_k4 * (f_g2k4_h + f_g2k4_l) + // k4\r\n        scaled_weight_k5 * (f_k5_h + f_k5_l) + // k5\r\n        scaled_weight_k6 * (f_g3k6_h + f_g3k6_l) + // k6\r\n        scaled_weight_k7 * (f_k7_h + f_k7_l); // k7\r\n    return [currentEstimate, poorEstimate];\r\n};\n\n// rec-math/src/numerical/quad/index.ts\r\nconst rangeErrorMessage = 'integration range must be an array of at least two endpoints';\r\n/**\r\n * Numerically compute a definite integral.\r\n *\r\n * @param f Callback returning value of integrand.\r\n * @param range A range of at least 2 endpoints.\r\n * @param options Options for the computation.\r\n *\r\n * @returns The results of the computation.\r\n */\r\nconst quad = (f, range, options = {}) => {\r\n    // Interpret the range.\r\n    if (!Array.isArray(range)) {\r\n        throw new RangeError(rangeErrorMessage);\r\n    }\r\n    if (range.length === 2) {\r\n        // Integrate over a single range.\r\n        const [a, b] = range;\r\n        return integrate(integrationStep, f, a, b, options);\r\n    }\r\n    if (range.length < 2) {\r\n        // Can't integrate at a point!\r\n        throw new RangeError(rangeErrorMessage);\r\n    }\r\n    // Integrate over multiple ranges.\r\n    let result = 0;\r\n    const points = [];\r\n    const info = {\r\n        steps: 0,\r\n        errorEstimate: 0,\r\n        points,\r\n        depth: 0,\r\n    };\r\n    for (let i = 0; i < range.length - 1; ++i) {\r\n        const single = integrate(integrationStep, f, range[i], range[i + 1], options);\r\n        info.points.push(single);\r\n        // Update the result.\r\n        result += single[0];\r\n        // Update the cumulative statistics.\r\n        info.steps += single[1].steps;\r\n        info.errorEstimate += single[1].errorEstimate;\r\n        info.depth = Math.max(info.depth, single[1].depth);\r\n    }\r\n    return [result, info];\r\n};\n\n// rec-math/src/numerical/index.ts\n\nvar index = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    quad: quad\n});\n\nexport { index as numerical, version };\n//# sourceMappingURL=index.js.map\n","/**\n * Speed of light (c).\n *\n * c = 299,792,458 m/s by definition.\n */\nexport const c = 299792458;\n\n/**\n * Gravitational constant G.\n *\n * G = 6.674 30(15)e-11 m^3 kg-1 s-2 (https://physics.nist.gov/constants)\n */\nexport const g = 6.6743e-11;\n\n/**\n * \\\\( \\frac{3}{8 \\pi G} \\\\)\n * ~1.78844 53398 69671 75324 24796 9868579134180130851632893841\n */\nexport const rhoConst = 1.7884453398696718e9;\n\n// Conversions -----------------------------------------------------------------\n/**\n * Convert astornomical units to metres.\n *\n * 1 AU = 149,597,870,700 m by definition.\n */\nexport const auToM = 149597870700;\n\n/**\n * Convert gigayears to seconds.\n *\n * Calculated as 1e9 years * 365.25 days * 86,400 s using a Julian Year.\n *\n * @see https://www.iau.org/public/themes/measuring/\n */\nexport const gyrToSeconds = 3.15576e16;\n\n/**\n * Conversion factor for the Hubble parameter.\n *\n * Convert from \\\\( km.s^{-1}Mpsc^{-1} \\\\) to Gyr. Calculation:\n *   - 1 parsec = \\\\( 648,000 / \\pi \\\\) au.\n *   - 1 au = 149,597,870,700 m.\n *   - 1 parsec = \\\\( \\frac{96,939,420,213,600,000}\\pi \\\\) m\n *   - 1 Gyr = \\\\( 1e9 \\times 365.25 \\times 86,400 \\\\) s.\n * \\\\( \\frac{3.15576e16 \\pi }{96,939,420,213,600,000} \\\\)\n * \\\\( \\frac{3.15576e16 \\pi }{1495978707} \\\\)\n * $$\\frac{487,000}{1,495,978,707} \\pi \\approx 1.02271 21650 45694 937 e-3$$\n */\nexport const kmsmpscToGyr = 1.022712165045695e-3;\n\n/**\n * Convert light years to metres.\n *\n * 299792458 * 365.25 * 86400 = 9,460,730,472,580,800.  This is larger than\n * MAX_SAFE_INTEGER but is stored exactly as a float.\n */\nexport const lyToM = 9.4607304725808e15;\n\n/**\n * Convert parsecs to light years.\n * \\\\(\\frac{149,597,870,700 \\times 648,000}{(299,792,458 \\times 365.25 \\times 86400)\\pi}\\\\)\n * \\\\(\\frac{969,394,202,136,000}{94,607,304,725,808\\pi}\\\\)\n * ~3.26156 37771 67433 56213\n * Note the last digit is not an error, it is a 7 due to machine epsilon.\n */\nexport const parsecToLy = 3.2615637771674337;\n\n/**\n * Convert parsecs to metres.\n *\n * - 1 parsec = \\\\( 648,000 / \\pi \\\\) au.\n * - 1 au = 149,597,870,700 m.\n * - 1 parsec = \\\\( \\frac{648,000 \\times 149,597,870,700}\\pi \\\\) m\n * \\\\( \\frac{96,939,420,213,600,000}\\pi \\\\)\n * ~3.08567 75814 91367 27891 e16\n */\nexport const parsecToM = 3.085677581491367e16;\n","// cosmic-expansion/src/stretch-range.ts\n\n/**\n * Compute stretch range.\n */\ninterface StretchInputs {\n  exponentialSteps?: boolean;\n  stretch: [upper: number, lower: number] | number[];\n  steps?: number;\n}\n\n/**\n * Add values to an existing array of steps, decreasing linearly.\n *\n * @param steps Existing steps to add new values to.\n * @param upper Upper bound (already in `steps`).\n * @param lower Lower bound.\n * @param count Number of steps to add.\n * @returns\n */\nconst addLinearStretchValues = (\n  steps: number[],\n  upper: number,\n  lower: number,\n  count: number\n) => {\n  for (let i = 1; i < count; ++i) {\n    steps.push(upper - ((upper - lower) * i) / count);\n  }\n  steps.push(lower);\n\n  return steps;\n};\n\n/**\n * Add values to an existing array of steps, decreasing exponentially.\n *\n * @param steps Existing steps to add new values to.\n * @param upper Upper bound (already in `steps`).\n * @param lower Lower bound.\n * @param count Number of steps to add.\n * @returns\n */\nconst addStretchValues = (\n  steps: number[],\n  upper: number,\n  lower: number,\n  count: number\n) => {\n  const factor = (lower / upper) ** (1 / count);\n  let current = upper;\n  for (let i = 0; i < count - 1; ++i) {\n    current *= factor;\n    steps.push(current);\n  }\n  steps.push(lower);\n\n  return steps;\n};\n\n/**\n * Get a list of values for stretch factor s (i.e. 1 + redshift (z)).\n *\n * @todo Implement linear steps (currently only exponential).\n * @todo Deal with negative step values.\n * @param inputs Sanitized inputs.\n * @returns Sanitized inputs.\n */\nexport const getStretchValues = (inputs: StretchInputs): number[] => {\n  const { stretch, steps: stepCount, exponentialSteps } = inputs;\n\n  // If there is no count we must have the values already.\n  if (!stepCount) {\n    return stretch;\n  }\n\n  // Get the bounds and add the first value.\n  const [upper, lower] = stretch;\n  const steps = [upper];\n\n  if (lower >= 1 || upper <= 1) {\n    // If s = 1 is not spanned by the range just do even steps all the way down.\n    if (exponentialSteps) {\n      addStretchValues(steps, upper, lower, stepCount);\n      return steps;\n    }\n    addLinearStretchValues(steps, upper, lower, stepCount);\n    return steps;\n  }\n\n  if (exponentialSteps) {\n    // Add steps separately above and below 1 to ensure s = 1 is included exactly.\n    const factor = (lower / upper) ** (1 / stepCount);\n    const countLower = Math.round(Math.log(lower) / Math.log(factor));\n    // From upper down to 1.\n    addStretchValues(steps, upper, 1, stepCount - countLower);\n    // From 1 down to lower.\n    addStretchValues(steps, 1, lower, countLower);\n    return steps;\n  }\n\n  // Add steps separately above and below 1 to ensure s = 1 is included exactly.\n  const step = (upper - lower) / stepCount;\n  const countLower = Math.round((1 - lower) / step);\n  // From upper down to 1.\n  addLinearStretchValues(steps, upper, 1, stepCount - countLower);\n  // From 1 down to lower.\n  addLinearStretchValues(steps, 1, lower, countLower);\n  return steps;\n};\n","export interface CosmicExpansionSurvey {\n  h0: number;\n  omegaLambda0?: number;\n  omegaM0?: number;\n  zEq: number;\n  sigma8?: number;\n  omega0: number;\n  temperature0: number;\n  age?: number;\n}\n\n/**\n * Parameters from the Planck 2018 survey with baryon acoustic oscillations\n * (BAO) data.\n *\n * Planck 2018: https://arxiv.org/abs/1807.06209\n */\nexport const planck2018Bao: CosmicExpansionSurvey = {\n  h0: 67.66,\n  omegaM0: 0.3111,\n  zEq: 3387,\n  omega0: 1,\n  temperature0: 2.72548,\n  age: 13.787,\n};\n\n/**\n * Parameters from the Planck 2018 survey.\n *\n * Planck 2018: https://arxiv.org/abs/1807.06209\n */\nexport const planck2018: CosmicExpansionSurvey = {\n  h0: 67.36,\n  // omegaLambda0: 0.6847,\n  omegaM0: 0.3153,\n  sigma8: 0.8111,\n  zEq: 3402,\n  omega0: 1,\n  temperature0: 2.72548,\n  age: 13.797,\n};\n\n/**\n * Parameters from the Planck 2015 survey - unverified.\n *\n * @todo Verify Planck 2015 parameters.\n */\nexport const planck2015: CosmicExpansionSurvey = {\n  h0: 67.74,\n  omegaLambda0: 0.691,\n  zEq: 3370,\n  omega0: 1,\n  temperature0: 2.72548,\n};\n\n/**\n * Parameters from the WMAP 2013 survey - unverified.\n *\n * @todo Verify WMAP 2013 parameters.\n */\nexport const wmap2013: CosmicExpansionSurvey = {\n  h0: 69.8,\n  omegaLambda0: 0.72,\n  zEq: 3300,\n  omega0: 1,\n  temperature0: 2.72548,\n};\n","// cosmic-expansion/src/model.ts\nimport { numerical } from '@rec-math/math';\n\nimport * as physicalConstants from './physical-constants.js';\nimport { getStretchValues } from './stretch-range.js';\nimport * as surveyParameters from './survey-parameters.js';\n\nconst defaultSurvey = 'planck2018Bao';\n\n/**\n * H(s)^2 = H_0^2 (\\Omega_m s^3 + \\Omega_{rad} s^4 + \\Omega_\\Lambda s^{3(1+w)} + \\Omega_k s^2 )\n */\n\nexport interface ExpansionInputs {\n  /** Upper and lower bounds for stretch, or an array of values. */\n  stretch: [upper: number, lower: number] | number[];\n  /** The number of steps to take between the upper and lower stretch bounds. */\n  steps?: number;\n  /** Stretch steps are linear by default, set this to `true` for exponential steps. */\n  exponentialSteps?: boolean;\n}\n/**\n * A full result from an expansion calculation.\n */\nexport interface ExpansionResult {\n  /** Stretch \\\\( s = z + 1 \\\\). */\n  s: number;\n  /** Scale factor \\\\( a = 1 / (z + 1) \\\\). */\n  a: number;\n  /** Redshift. */\n  z: number;\n  /** Hubble parameter \\\\( kms^{-1}Mpsc^{-1} \\\\). */\n  h: number;\n  /** Time (Gy). */\n  t: number;\n\n  /** Hubble radius (Gly). */\n  r: number;\n  /** Proper distance of a source observed at this redshift (Gly). */\n  dNow: number;\n  /** Proper distance at this redshift when the light was emitted (Gly). */\n  d: number;\n  /** Event horizon (largest proper distance that light can ever bridge) (Gly) */\n  dHor: number;\n  /** Particle horizon (Gly) */\n  dPar: number;\n\n  /** Recession rate of a source observed at this redshift (c = 1). */\n  vNow: number;\n  /** Recession rate at this redshift when the light was emitted (c = 1). */\n  v: number;\n  /** @todo document this! */\n  vGen: number;\n\n  /** Matter fraction of the critical energy density \\\\( \\rho_{crit}^{-1} \\\\). */\n  omegaM: number;\n  /** Dark energy fraction of the critical density \\\\( \\rho_{crit}^{-1} \\\\). */\n  omegaLambda: number;\n  /** Radiation density fraction of the critical density \\\\( \\rho_{crit}^{-1} \\\\). */\n  omegaRad: number;\n\n  omega: number;\n  temperature: number;\n\n  /** Critical density. */\n  rhoCrit: number;\n}\n\ninterface IntegrationResult {\n  s: number;\n  t: number;\n  dNow: number;\n  // r: number;\n  dPar: number;\n  dHor: number;\n}\n\ninterface CosmicExpansionVariables {\n  h: number;\n  omega: number;\n  omegaM: number;\n  omegaLambda: number;\n  omegaRad: number;\n  temperature: number;\n  rhoCrit: number;\n}\n\ninterface CosmicExpansionModelProps {\n  /** Redshift when matter and radiation densities were equal \\\\( z_{eq} \\\\). */\n  zEq: number;\n\n  /** Total density paramater \\\\( \\Omega_{tot} \\\\). */\n  omega0: number;\n\n  /** Hubble constant \\\\( H_0 \\\\) (in km/s/Mpsc). */\n  h0: number;\n  h0Gy: number;\n  /** Dark energy density parameter \\\\( \\Omega_\\Lambda \\\\). */\n  omegaLambda0: number;\n  OmegaK0: number;\n  omegaM0: number;\n  omegaRad0: number;\n  rhoCrit0: number;\n  /** Temperature of the cosmic microwave background radiation (K). */\n  temperature0: number;\n\n  /** $$ \\frac{3}{8 \\pi G} \\approx 1.788 445 339 869 671 753 \\times 10^9 $$ */\n  rhoConst: number;\n  /** Conversion: multiply (a Hubble factor in) km/s/Mpsc to get Gigayears. */\n  kmsmpscToGyr: number;\n  /** Conversion: multiply Gigayears to get seconds. */\n  gyrToSeconds: number;\n}\n\nexport interface CosmicExpansionModelOptions {\n  // The key of a survey to use for parameters.\n  survey?: 'planck2018Bao' | 'planck2018' | 'planck2015' | 'wmap2013';\n  // We can override any of the other model properties.\n  [key: string]: number | string | undefined;\n}\n\nexport class CosmicExpansionModel {\n  /** Current age of the universe for this model. */\n  age: number;\n\n  props: CosmicExpansionModelProps;\n\n  getESquaredAtStretch: (s: number) => number;\n  getVariablesAtStretch: (s: number) => CosmicExpansionVariables;\n\n  constructor(options: CosmicExpansionModelOptions = {}) {\n    // The next three must be done first, in this order.\n    this.props = this.createProps(options);\n    this.getESquaredAtStretch = this.createESquaredAtStretchFunction();\n    this.getVariablesAtStretch = this.createVariablesAtStretchFunction();\n\n    // Now we are set up we can get going.\n    this.age = this.getAge();\n  }\n\n  createProps(options: CosmicExpansionModelOptions): CosmicExpansionModelProps {\n    // Constants derived from inputs\n    const survey =\n      options.survey && surveyParameters[options.survey]\n        ? surveyParameters[options.survey]\n        : surveyParameters[defaultSurvey];\n    const props = {\n      ...physicalConstants,\n      ...survey,\n      ...options,\n    };\n\n    const { kmsmpscToGyr, h0, omega0, gyrToSeconds, rhoConst, zEq } = props;\n\n    const sEq = zEq + 1;\n\n    let omegaM0, omegaLambda0;\n\n    // Use omegaLambda0 if it is provided.\n    if (props.omegaLambda0 != null) {\n      omegaLambda0 = props.omegaLambda0;\n      omegaM0 = (omega0 - omegaLambda0) * (sEq / (sEq + 1));\n    } else if (props.omegaM0 != null) {\n      omegaM0 = props.omegaM0;\n      omegaLambda0 = omega0 - omegaM0 * ((sEq + 1) / sEq);\n    } else {\n      throw new Error('Must provide either omegaM0 or omegaLambda0');\n    }\n\n    const omegaRad0 = omegaM0 / sEq;\n\n    const h0Gy = h0 * kmsmpscToGyr;\n    const h0Seconds = (h0 * kmsmpscToGyr) / gyrToSeconds;\n\n    // Calculate current density parameters.\n    const rhoCrit0 = rhoConst * h0Seconds * h0Seconds;\n    const OmegaK0 = 1 - omegaM0 - omegaRad0 - omegaLambda0;\n\n    return {\n      ...props,\n      h0Gy,\n      rhoCrit0,\n      OmegaK0,\n      zEq,\n      omegaLambda0,\n      omegaM0,\n      omegaRad0,\n    };\n  }\n\n  /**\n   * Hubble constant as a function of stretch.\n   *\n   * @param s stretch = 1/a, where a is the usual FLRW scale factor.\n   * @returns The Hubble constant at stretch s.\n   */\n  createESquaredAtStretchFunction() {\n    const { omegaLambda0, OmegaK0, omegaM0, omegaRad0 } = this.props;\n    return (s: number) => {\n      const s2 = s * s;\n      return (\n        omegaLambda0 + OmegaK0 * s2 + omegaM0 * s2 * s + omegaRad0 * s2 * s2\n      );\n    };\n  }\n\n  createVariablesAtStretchFunction() {\n    const { h0, temperature0, omegaLambda0, omegaM0, omegaRad0, rhoCrit0 } =\n      this.props;\n    return (s: number): CosmicExpansionVariables => {\n      const eSquared = this.getESquaredAtStretch(s);\n      const s2 = s * s;\n      const h = h0 * Math.sqrt(eSquared);\n      const omegaM = (omegaM0 * s2 * s) / eSquared;\n      const omegaLambda = omegaLambda0 / eSquared;\n      const omegaRad = (omegaRad0 * s2 * s2) / eSquared;\n      return {\n        h,\n        omegaM,\n        omegaLambda,\n        omegaRad,\n        omega: omegaM + omegaLambda + omegaRad,\n        temperature: temperature0 * s,\n        rhoCrit: rhoCrit0 * eSquared,\n      };\n    };\n  }\n\n  getIntegralFunctions() {\n    const { getESquaredAtStretch } = this;\n    return {\n      TH: (s: number): number => 1 / Math.sqrt(getESquaredAtStretch(s)),\n      THs: (s: number): number => 1 / (s * Math.sqrt(getESquaredAtStretch(s))),\n    };\n  }\n\n  /**\n   * Get a list of cosmic expansion results for a range of stretch values.\n   *\n   * @param stretchValues Points to calculate at.\n   * @returns An array of integration results.\n   */\n  calculateExpansionForStretchValues(\n    stretchValues: number[]\n  ): IntegrationResult[] {\n    // Convert stretch values in descending order into integration points in\n    // ascending order.\n    const infty = Number.POSITIVE_INFINITY;\n    const sPoints = stretchValues.slice().reverse();\n    const isInfinityIncluded = sPoints[sPoints.length - 1] === infty;\n\n    if (!isInfinityIncluded) {\n      sPoints.push(infty);\n    }\n\n    // We assume zero is not included.\n    sPoints.unshift(0);\n\n    const { TH, THs } = this.getIntegralFunctions();\n\n    const options = { epsilon: 1e-8 };\n\n    const thResults = numerical.quad(TH, sPoints, options);\n    const thPoints = thResults[1].points || [thResults];\n\n    // Make sure we don't calculate THs at s = 0: discontinuity!\n    const thsResults = numerical.quad(THs, sPoints.slice(1), options);\n    // We may only have one point so this fix is needed.\n    const thsPoints = thsResults[1].points || [thsResults];\n\n    // Put in the initial value.\n    thsPoints.unshift([0, { steps: 0, errorEstimate: 0, depth: 0 }]);\n\n    const thAtOne = numerical.quad(TH, [0, 1], options)[0];\n    const thAtInfinity = thResults[0];\n    const thsAtInfinity = thsResults[0];\n\n    // Create an array to build the return values.\n    const results: IntegrationResult[] = [];\n\n    // Discard the initial zero start point.\n    sPoints.shift();\n    const { h0Gy } = this.props;\n\n    let th = 0;\n    let ths = 0;\n    for (let i = 0; i < sPoints.length - (isInfinityIncluded ? 0 : 1); ++i) {\n      th += thPoints[i][0];\n      ths += thsPoints[i][0];\n      const s = sPoints[i];\n\n      results.push({\n        s,\n        t: (thsAtInfinity - ths) / h0Gy,\n        dNow: Math.abs(th - thAtOne) / h0Gy,\n        dPar: (thAtInfinity - th) / s / h0Gy,\n        // ## d_{hor}(s) = \\frac 1 {H_0 s} \\int_{S=0}^s \\frac 1 {\\sqrt {E^2(S)}} dS ##\n        dHor: th / s / h0Gy,\n      });\n    }\n\n    return results;\n  }\n\n  createExpansionResults(\n    integrationResults: IntegrationResult[]\n  ): ExpansionResult[] {\n    const { h0, h0Gy, kmsmpscToGyr } = this.props;\n\n    const results: ExpansionResult[] = [];\n\n    for (let i = integrationResults.length - 1; i >= 0; --i) {\n      const { s, t, dNow: dUnsafe, dHor, dPar } = integrationResults[i];\n\n      const params = this.getVariablesAtStretch(s);\n      const hGy = params.h * kmsmpscToGyr;\n\n      // Force dNow to zero at zero redshift.\n      const dNow = s === 1 ? 0 : dUnsafe;\n      results.push({\n        z: s - 1,\n        a: 1 / s,\n        s,\n        t,\n        dNow,\n        d: dNow / s,\n        r: 1 / hGy,\n        dHor,\n        dPar,\n        vGen: params.h / (s * h0),\n        vNow: dNow * h0Gy,\n        v: (dNow * hGy) / s,\n        ...params,\n      });\n    }\n\n    return results;\n  }\n\n  /**\n   * Calculate the current age of the universe.\n   *\n   * @param inputs Inputs.\n   * @returns\n   */\n  getAge(): number {\n    // Do the integration.\n    return this.calculateExpansionForStretchValues([1])[0].t;\n  }\n\n  /**\n   * Get a list of cosmic expansion results.\n   *\n   * @param inputs Inputs.\n   * @returns\n   */\n  calculateExpansion(inputs: ExpansionInputs): ExpansionResult[] {\n    // Calculate the values to calculate at.\n    const stretchValues =\n      inputs.stretch.length === 1\n        ? // Pass the single point to calculate at.\n          inputs.stretch\n        : // Calculate multiple points.\n          getStretchValues(inputs);\n\n    // Do the integration.\n    const integrationResults =\n      this.calculateExpansionForStretchValues(stretchValues);\n\n    // Create the tabulated results.\n    const results = this.createExpansionResults(integrationResults);\n\n    return results;\n  }\n}\n\nexport const create = (\n  options: CosmicExpansionModelOptions = {}\n): CosmicExpansionModel => {\n  return new CosmicExpansionModel(options);\n};\n","// cosmic-expansion/src/index.ts\n\nexport const version = '1.1.1';\nexport { create } from './model.js';\nexport { getStretchValues } from './stretch-range.js';\nexport * as physicalConstants from './physical-constants.js';\nexport * as surveyParameters from './survey-parameters.js';\n"],"names":["numerical"],"mappings":"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"}