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