pointset.js (4035B)
1 import * as Continuous from "../PointSet/Continuous.js"; 2 import * as Discrete from "../PointSet/Discrete.js"; 3 import * as XYShape from "../XYShape.js"; 4 import { xyShapeDistError } from "../dist/DistError.js"; 5 import { PointSetDist } from "../dist/PointSetDist.js"; 6 import { makeDefinition } from "../library/registry/fnDefinition.js"; 7 import { frArray, frDist, frLambda, frNumber, frDict, } from "../library/registry/frTypes.js"; 8 import { FnFactory, doNumberLambdaCall, repackDistResult, } from "../library/registry/helpers.js"; 9 import { REDistributionError, REExpectedType } from "../errors/messages.js"; 10 import { Ok } from "../utility/result.js"; 11 import { vDist, vNumber } from "../value/index.js"; 12 import { PointMass } from "../dist/SymbolicDist.js"; 13 const maker = new FnFactory({ 14 nameSpace: "PointSet", 15 requiresNamespace: true, 16 }); 17 const argsToXYShape = (inputs) => { 18 const result = XYShape.T.makeFromZipped(inputs.map(({ x, y }) => [x, y])); 19 if (!result.ok) { 20 throw new REDistributionError(xyShapeDistError(result.value)); 21 } 22 return result.value; 23 }; 24 function pointSetAssert(dist) { 25 if (dist instanceof PointSetDist) { 26 return; 27 } 28 throw new REExpectedType("PointSetDist", dist.toString()); 29 } 30 const fromDist = makeDefinition([frDist], ([dist], context) => repackDistResult(dist.toPointSetDist(context.environment))); 31 const fromNumber = makeDefinition([frNumber], ([num], _) => { 32 const pointMass = new PointMass(num); 33 return repackDistResult(pointMass.toPointSetDist()); 34 }); 35 export const library = [ 36 maker.make({ 37 name: "fromDist", 38 examples: [`PointSet.fromDist(normal(5,2))`], 39 output: "Dist", 40 definitions: [fromDist], 41 }), 42 maker.make({ 43 name: "fromNumber", 44 examples: [`PointSet.fromNumber(3)`], 45 output: "Dist", 46 definitions: [fromNumber], 47 }), 48 maker.make({ 49 name: "make", 50 examples: [`PointSet.make(normal(5,10))`, `PointSet.make(3)`], 51 output: "Dist", 52 definitions: [fromDist, fromNumber], 53 }), 54 maker.make({ 55 name: "downsample", 56 examples: [`PointSet.downsample(PointSet.fromDist(normal(5,2)), 50)`], 57 output: "Dist", 58 definitions: [ 59 makeDefinition([frDist, frNumber], ([dist, number]) => { 60 pointSetAssert(dist); 61 return vDist(dist.downsample(number)); 62 }), 63 ], 64 }), 65 maker.make({ 66 name: "mapY", 67 examples: [`PointSet.mapY(mx(Sym.normal(5,2)), {|x| x + 1})`], 68 output: "Dist", 69 definitions: [ 70 makeDefinition([frDist, frLambda], ([dist, lambda], context) => { 71 pointSetAssert(dist); 72 return repackDistResult(dist.mapYResult((y) => Ok(doNumberLambdaCall(lambda, [vNumber(y)], context)), undefined, undefined)); 73 }), 74 ], 75 }), 76 maker.make({ 77 name: "makeContinuous", 78 examples: [ 79 `PointSet.makeContinuous([ 80 {x: 0, y: 0.2}, 81 {x: 1, y: 0.7}, 82 {x: 2, y: 0.8}, 83 {x: 3, y: 0.2} 84 ])`, 85 ], 86 output: "Dist", 87 definitions: [ 88 makeDefinition([frArray(frDict(["x", frNumber], ["y", frNumber]))], ([arr]) => { 89 return vDist(new PointSetDist(new Continuous.ContinuousShape({ 90 xyShape: argsToXYShape(arr), 91 }).toMixed())); 92 }), 93 ], 94 }), 95 maker.make({ 96 name: "makeDiscrete", 97 examples: [ 98 `PointSet.makeDiscrete([ 99 {x: 0, y: 0.2}, 100 {x: 1, y: 0.7}, 101 {x: 2, y: 0.8}, 102 {x: 3, y: 0.2} 103 ])`, 104 ], 105 output: "Dist", 106 definitions: [ 107 makeDefinition([frArray(frDict(["x", frNumber], ["y", frNumber]))], ([arr]) => { 108 return vDist(new PointSetDist(new Discrete.DiscreteShape({ 109 xyShape: argsToXYShape(arr), 110 }).toMixed())); 111 }), 112 ], 113 }), 114 ]; 115 //# sourceMappingURL=pointset.js.map