time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

sym.js (5098B)


      1 import * as SymbolicDist from "../dist/SymbolicDist.js";
      2 import { makeDefinition } from "../library/registry/fnDefinition.js";
      3 import { frDict, frNumber } from "../library/registry/frTypes.js";
      4 import { FnFactory } from "../library/registry/helpers.js";
      5 import { CI_CONFIG, symDistResultToValue } from "./distUtil.js";
      6 const maker = new FnFactory({
      7     nameSpace: "Sym",
      8     requiresNamespace: true,
      9 });
     10 function makeTwoArgsSymDist(fn) {
     11     return makeDefinition([frNumber, frNumber], ([v1, v2]) => {
     12         const result = fn(v1, v2);
     13         return symDistResultToValue(result);
     14     });
     15 }
     16 function makeOneArgSymDist(fn) {
     17     return makeDefinition([frNumber], ([v]) => {
     18         const result = fn(v);
     19         return symDistResultToValue(result);
     20     });
     21 }
     22 function makeCISymDist(lowKey, highKey, fn) {
     23     return makeDefinition([frDict([lowKey, frNumber], [highKey, frNumber])], ([dict]) => symDistResultToValue(fn(dict[lowKey], dict[highKey])));
     24 }
     25 function makeMeanStdevSymDist(fn) {
     26     return makeDefinition([frDict(["mean", frNumber], ["stdev", frNumber])], ([{ mean, stdev }]) => symDistResultToValue(fn(mean, stdev)));
     27 }
     28 export const library = [
     29     maker.make({
     30         name: "normal",
     31         examples: [
     32             "Sym.normal(5, 1)",
     33             "Sym.normal({ p5: 4, p95: 10 })",
     34             "Sym.normal({ p10: 4, p90: 10 })",
     35             "Sym.normal({ p25: 4, p75: 10 })",
     36             "Sym.normal({ mean: 5, stdev: 2 })",
     37         ],
     38         definitions: [
     39             makeTwoArgsSymDist((mean, stdev) => SymbolicDist.Normal.make({ mean, stdev })),
     40             ...CI_CONFIG.map((entry) => makeCISymDist(entry.lowKey, entry.highKey, (low, high) => SymbolicDist.Normal.fromCredibleInterval({
     41                 low,
     42                 high,
     43                 probability: entry.probability,
     44             }))),
     45             makeMeanStdevSymDist((mean, stdev) => SymbolicDist.Normal.make({ mean, stdev })),
     46         ],
     47     }),
     48     maker.make({
     49         name: "lognormal",
     50         examples: [
     51             "Sym.lognormal(0.5, 0.8)",
     52             "Sym.lognormal({ p5: 4, p95: 10 })",
     53             "Sym.lognormal({ p10: 4, p90: 10 })",
     54             "Sym.lognormal({ p25: 4, p75: 10 })",
     55             "Sym.lognormal({ mean: 5, stdev: 2 })",
     56         ],
     57         definitions: [
     58             makeTwoArgsSymDist((mu, sigma) => SymbolicDist.Lognormal.make({ mu, sigma })),
     59             ...CI_CONFIG.map((entry) => makeCISymDist(entry.lowKey, entry.highKey, (low, high) => SymbolicDist.Lognormal.fromCredibleInterval({
     60                 low,
     61                 high,
     62                 probability: entry.probability,
     63             }))),
     64             makeMeanStdevSymDist((mean, stdev) => SymbolicDist.Lognormal.fromMeanAndStdev({ mean, stdev })),
     65         ],
     66     }),
     67     maker.make({
     68         name: "uniform",
     69         examples: ["Sym.uniform(10, 12)"],
     70         definitions: [
     71             makeTwoArgsSymDist((low, high) => SymbolicDist.Uniform.make({ low, high })),
     72         ],
     73     }),
     74     maker.make({
     75         name: "beta",
     76         examples: ["Sym.beta(20, 25)", "Sym.beta({ mean: 0.39, stdev: 0.1 })"],
     77         definitions: [
     78             makeTwoArgsSymDist((alpha, beta) => SymbolicDist.Beta.make({ alpha, beta })),
     79             makeMeanStdevSymDist((mean, stdev) => SymbolicDist.Beta.fromMeanAndStdev({ mean, stdev })),
     80         ],
     81     }),
     82     maker.make({
     83         name: "cauchy",
     84         examples: ["Sym.cauchy(5, 1)"],
     85         definitions: [
     86             makeTwoArgsSymDist((local, scale) => SymbolicDist.Cauchy.make({ local, scale })),
     87         ],
     88     }),
     89     maker.make({
     90         name: "gamma",
     91         examples: ["Sym.gamma(5, 1)"],
     92         definitions: [
     93             makeTwoArgsSymDist((shape, scale) => SymbolicDist.Gamma.make({ shape, scale })),
     94         ],
     95     }),
     96     maker.make({
     97         name: "logistic",
     98         examples: ["Sym.logistic(5, 1)"],
     99         definitions: [
    100             makeTwoArgsSymDist((location, scale) => SymbolicDist.Logistic.make({ location, scale })),
    101         ],
    102     }),
    103     maker.make({
    104         name: "exponential",
    105         examples: ["Sym.exponential(2)"],
    106         definitions: [
    107             makeOneArgSymDist((rate) => SymbolicDist.Exponential.make(rate)),
    108         ],
    109     }),
    110     maker.make({
    111         name: "bernoulli",
    112         examples: ["Sym.bernoulli(0.5)"],
    113         definitions: [makeOneArgSymDist((p) => SymbolicDist.Bernoulli.make(p))],
    114     }),
    115     maker.make({
    116         name: "pointMass",
    117         requiresNamespace: false,
    118         examples: ["pointMass(0.5)"],
    119         definitions: [
    120             makeDefinition([frNumber], ([v]) => {
    121                 const result = SymbolicDist.PointMass.make(v);
    122                 return symDistResultToValue(result);
    123             }),
    124         ],
    125     }),
    126     maker.make({
    127         name: "triangular",
    128         examples: ["Sym.triangular(3, 5, 10)"],
    129         definitions: [
    130             makeDefinition([frNumber, frNumber, frNumber], ([low, medium, high]) => {
    131                 const result = SymbolicDist.Triangular.make({ low, medium, high });
    132                 return symDistResultToValue(result);
    133             }),
    134         ],
    135     }),
    136 ];
    137 //# sourceMappingURL=sym.js.map