2022-04-08 18:42:14 +00:00
|
|
|
import { runAll } from "../rescript/ProgramEvaluator.gen";
|
|
|
|
import type {
|
|
|
|
Inputs_SamplingInputs_t as SamplingInputs,
|
|
|
|
exportEnv,
|
|
|
|
exportType,
|
|
|
|
exportDistribution,
|
|
|
|
} from "../rescript/ProgramEvaluator.gen";
|
|
|
|
export type { SamplingInputs, exportEnv, exportDistribution };
|
|
|
|
export type { t as DistPlus } from "../rescript/OldInterpreter/DistPlus.gen";
|
|
|
|
import type { Operation_genericFunctionCallInfo } from "../rescript/Distributions/GenericDist/GenericDist_Types.gen";
|
|
|
|
import { genericDist } from "../rescript/TSInterface.gen";
|
|
|
|
import {
|
|
|
|
run as runR,
|
|
|
|
env,
|
|
|
|
outputType,
|
|
|
|
} from "../rescript/Distributions/DistributionOperation/DistributionOperation.gen";
|
|
|
|
import { add } from "lodash";
|
|
|
|
|
|
|
|
export let defaultSamplingInputs: SamplingInputs = {
|
|
|
|
sampleCount: 10000,
|
|
|
|
outputXYPoints: 10000,
|
|
|
|
pointDistLength: 1000,
|
|
|
|
};
|
|
|
|
|
|
|
|
export function run(
|
|
|
|
squiggleString: string,
|
|
|
|
samplingInputs?: SamplingInputs,
|
|
|
|
environment?: exportEnv
|
|
|
|
): { tag: "Ok"; value: exportType } | { tag: "Error"; value: string } {
|
|
|
|
let si: SamplingInputs = samplingInputs
|
|
|
|
? samplingInputs
|
|
|
|
: defaultSamplingInputs;
|
|
|
|
let env: exportEnv = environment ? environment : [];
|
|
|
|
return runAll(squiggleString, si, env);
|
2022-03-01 07:43:35 +00:00
|
|
|
}
|
|
|
|
|
2022-04-08 18:42:14 +00:00
|
|
|
class GenericDist {
|
|
|
|
t: genericDist;
|
|
|
|
env: env;
|
|
|
|
|
|
|
|
constructor(t: genericDist, env: env) {
|
|
|
|
this.t = t;
|
|
|
|
}
|
|
|
|
|
|
|
|
mean(): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{ tag: "FromDist", value: [{ tag: "ToFloat", value: "Mean" }, this.t] }
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
pdf(n: number): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{
|
|
|
|
tag: "FromDist",
|
|
|
|
value: [{ tag: "ToFloat", value: { NAME: "Pdf", VAL: n } }, this.t],
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
cdf(n: number): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{
|
|
|
|
tag: "FromDist",
|
|
|
|
value: [{ tag: "ToFloat", value: { NAME: "Pdf", VAL: n } }, this.t],
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
inv(n: number): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{
|
|
|
|
tag: "FromDist",
|
|
|
|
value: [{ tag: "ToFloat", value: { NAME: "Pdf", VAL: n } }, this.t],
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
normalize(n: number): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{
|
|
|
|
tag: "FromDist",
|
|
|
|
value: [{ tag: "ToDist", value: "Normalize" }, this.t],
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
toPointSet(): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{
|
|
|
|
tag: "FromDist",
|
|
|
|
value: [{ tag: "ToDist", value: "ToPointSet" }, this.t],
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
inspect(): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{ tag: "FromDist", value: [{ tag: "ToDist", value: "Inspect" }, this.t] }
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
toSampleSet(n: number): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{
|
|
|
|
tag: "FromDist",
|
|
|
|
value: [
|
|
|
|
{ tag: "ToDist", value: { tag: "ToSampleSet", value: n } },
|
|
|
|
this.t,
|
|
|
|
],
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
truncate(
|
|
|
|
left: null | undefined | number,
|
|
|
|
right: null | undefined | number
|
|
|
|
): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{
|
|
|
|
tag: "FromDist",
|
|
|
|
value: [
|
|
|
|
{ tag: "ToDist", value: { tag: "Truncate", value: [left, right] } },
|
|
|
|
this.t,
|
|
|
|
],
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
toString(): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{
|
|
|
|
tag: "FromDist",
|
|
|
|
value: [{ tag: "ToString", value: "ToString" }, this.t],
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
toSparkline(n: number): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{
|
|
|
|
tag: "FromDist",
|
|
|
|
value: [
|
|
|
|
{ tag: "ToString", value: { tag: "ToSparkline", value: n } },
|
|
|
|
this.t,
|
|
|
|
],
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
add(g2: genericDist): outputType {
|
|
|
|
return runR(
|
|
|
|
{ env: this.env },
|
|
|
|
{
|
|
|
|
tag: "FromDist",
|
|
|
|
value: [
|
|
|
|
{
|
|
|
|
tag: "ToDistCombination",
|
|
|
|
value: [
|
|
|
|
{
|
|
|
|
tag: "ToDistCombination",
|
|
|
|
value: ["Algebraic", "Add", { NAME: "Dist", VAL: g2 }],
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
this.t,
|
|
|
|
],
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
2022-03-01 07:43:35 +00:00
|
|
|
}
|