time-to-botec

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

scoring.js (3189B)


      1 import { BaseDist } from "../dist/BaseDist.js";
      2 import * as distOperations from "../dist/distOperations/index.js";
      3 import { REArgumentError, REDistributionError } from "../errors/messages.js";
      4 import { makeDefinition } from "../library/registry/fnDefinition.js";
      5 import { frDist, frDistOrNumber, frDict } from "../library/registry/frTypes.js";
      6 import { FnFactory } from "../library/registry/helpers.js";
      7 import { vNumber } from "../value/index.js";
      8 const maker = new FnFactory({
      9     nameSpace: "Dist",
     10     requiresNamespace: true,
     11 });
     12 const runScoringScalarAnswer = (estimate, answer, prior, env) => {
     13     const result = distOperations.logScoreScalarAnswer({
     14         estimate,
     15         answer,
     16         prior,
     17         env,
     18     });
     19     if (!result.ok) {
     20         throw new REDistributionError(result.value);
     21     }
     22     return vNumber(result.value);
     23 };
     24 const runScoringDistAnswer = (estimate, answer, prior, env) => {
     25     const result = distOperations.logScoreDistAnswer({
     26         estimate,
     27         answer,
     28         prior,
     29         env,
     30     });
     31     if (!result.ok) {
     32         throw new REDistributionError(result.value);
     33     }
     34     return vNumber(result.value);
     35 };
     36 export const library = [
     37     maker.make({
     38         name: "logScore",
     39         output: "Number",
     40         examples: [
     41             "Dist.logScore({estimate: Sym.normal(5,2), answer: Sym.normal(5.2,1), prior: Sym.normal(5.5,3)})",
     42             "Dist.logScore({estimate: Sym.normal(5,2), answer: Sym.normal(5.2,1)})",
     43             "Dist.logScore({estimate: Sym.normal(5,2), answer: 4.5})",
     44         ],
     45         definitions: [
     46             makeDefinition([
     47                 frDict(["estimate", frDist], ["answer", frDistOrNumber], ["prior", frDist]),
     48             ], ([{ estimate, answer, prior }], context) => {
     49                 if (answer instanceof BaseDist) {
     50                     return runScoringDistAnswer(estimate, answer, prior, context.environment);
     51                 }
     52                 else if (typeof answer === "number") {
     53                     return runScoringScalarAnswer(estimate, answer, prior, context.environment);
     54                 }
     55                 else {
     56                     throw new REArgumentError("Impossible type");
     57                 }
     58             }),
     59             makeDefinition([frDict(["estimate", frDist], ["answer", frDistOrNumber])], ([{ estimate, answer }], context) => {
     60                 if (answer instanceof BaseDist) {
     61                     return runScoringDistAnswer(estimate, answer, undefined, context.environment);
     62                 }
     63                 else if (typeof answer === "number") {
     64                     return runScoringScalarAnswer(estimate, answer, undefined, context.environment);
     65                 }
     66                 else {
     67                     throw new REArgumentError("Impossible type");
     68                 }
     69             }),
     70         ],
     71     }),
     72     maker.make({
     73         name: "klDivergence",
     74         output: "Number",
     75         examples: ["Dist.klDivergence(Sym.normal(5,2), Sym.normal(5,1.5))"],
     76         definitions: [
     77             makeDefinition([frDist, frDist], ([estimate, d], context) => runScoringDistAnswer(estimate, d, undefined, context.environment)),
     78         ],
     79     }),
     80 ];
     81 //# sourceMappingURL=scoring.js.map