time-to-botec

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

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