time-to-botec

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

mixture.js (3241B)


      1 import { argumentError } from "../dist/DistError.js";
      2 import * as distOperations from "../dist/distOperations/index.js";
      3 import { parseDistFromDistOrNumber, unpackDistResult, } from "../library/registry/helpers.js";
      4 import { REDistributionError } from "../errors/messages.js";
      5 import * as E_A from "../utility/E_A.js";
      6 import { vDist } from "../value/index.js";
      7 import { makeDefinition } from "../library/registry/fnDefinition.js";
      8 import { frArray, frDistOrNumber, frNumber, frTuple, } from "../library/registry/frTypes.js";
      9 function mixtureWithGivenWeights(distributions, weights, env) {
     10     return vDist(unpackDistResult(distOperations.mixture(E_A.zip(distributions, weights), { env })));
     11 }
     12 function mixtureWithDefaultWeights(distributions, env) {
     13     const length = distributions.length;
     14     const weights = new Array(length).fill(1 / length);
     15     return mixtureWithGivenWeights(distributions, weights, env);
     16 }
     17 const singleArrayDef = makeDefinition([frArray(frDistOrNumber)], ([ar], { environment }) => mixtureWithDefaultWeights(ar.map(parseDistFromDistOrNumber), environment));
     18 const twoArraysDef = makeDefinition([frArray(frDistOrNumber), frArray(frNumber)], ([dists, weights], { environment }) => {
     19     if (dists.length !== weights.length) {
     20         throw new REDistributionError(argumentError("Error, mixture call has different number of distributions and weights"));
     21     }
     22     return mixtureWithGivenWeights(dists.map(parseDistFromDistOrNumber), weights, environment);
     23 });
     24 const twoToFiveDistsWithWeightsDefs = [
     25     makeDefinition([frDistOrNumber, frDistOrNumber, frTuple(frNumber, frNumber)], ([dist1, dist2, weights], { environment }) => mixtureWithGivenWeights([dist1, dist2].map(parseDistFromDistOrNumber), weights, environment)),
     26     makeDefinition([
     27         frDistOrNumber,
     28         frDistOrNumber,
     29         frDistOrNumber,
     30         frTuple(frNumber, frNumber, frNumber),
     31     ], ([dist1, dist2, dist3, weights], { environment }) => mixtureWithGivenWeights([dist1, dist2, dist3].map(parseDistFromDistOrNumber), weights, environment)),
     32     makeDefinition([
     33         frDistOrNumber,
     34         frDistOrNumber,
     35         frDistOrNumber,
     36         frDistOrNumber,
     37         frTuple(frNumber, frNumber, frNumber, frNumber),
     38     ], ([dist1, dist2, dist3, dist4, weights], { environment }) => mixtureWithGivenWeights([dist1, dist2, dist3, dist4].map(parseDistFromDistOrNumber), weights, environment)),
     39     makeDefinition([
     40         frDistOrNumber,
     41         frDistOrNumber,
     42         frDistOrNumber,
     43         frDistOrNumber,
     44         frDistOrNumber,
     45         frTuple(frNumber, frNumber, frNumber, frNumber, frNumber),
     46     ], ([dist1, dist2, dist3, dist4, dist5, weights], { environment }) => mixtureWithGivenWeights([dist1, dist2, dist3, dist4, dist5].map(parseDistFromDistOrNumber), weights, environment)),
     47 ];
     48 const oneToFiveDistsDefs = Array.from({ length: 5 }, (_, i) => {
     49     const frArgs = new Array(i + 1).fill(frDistOrNumber);
     50     return makeDefinition(frArgs, (args, { environment }) => mixtureWithDefaultWeights(args.map(parseDistFromDistOrNumber), environment));
     51 });
     52 export const mixtureDefinitions = [
     53     singleArrayDef,
     54     twoArraysDef,
     55     ...twoToFiveDistsWithWeightsDefs,
     56     ...oneToFiveDistsDefs,
     57 ];
     58 //# sourceMappingURL=mixture.js.map