squiggle/packages/squiggle-lang/src/js/index.ts
2022-04-08 15:55:04 -04:00

220 lines
5.5 KiB
TypeScript

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,
resultDist,
resultFloat,
resultString,
} from "../rescript/TSInterface.gen";
import {
env,
Constructors_UsingDists_mean,
Constructors_UsingDists_sample,
Constructors_UsingDists_pdf,
Constructors_UsingDists_cdf,
Constructors_UsingDists_inv,
Constructors_UsingDists_normalize,
Constructors_UsingDists_toPointSet,
Constructors_UsingDists_toSampleSet,
Constructors_UsingDists_truncate,
Constructors_UsingDists_inspect,
Constructors_UsingDists_toString,
Constructors_UsingDists_toSparkline,
Constructors_UsingDists_algebraicAdd,
Constructors_UsingDists_algebraicMultiply,
Constructors_UsingDists_algebraicDivide,
Constructors_UsingDists_algebraicSubtract,
Constructors_UsingDists_algebraicLogarithm,
Constructors_UsingDists_algebraicExponentiate,
Constructors_UsingDists_pointwiseAdd,
Constructors_UsingDists_pointwiseMultiply,
Constructors_UsingDists_pointwiseDivide,
Constructors_UsingDists_pointwiseSubtract,
Constructors_UsingDists_pointwiseLogarithm,
Constructors_UsingDists_pointwiseExponentiate,
} from "../rescript/Distributions/DistributionOperation/DistributionOperation.gen";
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);
}
class GenericDist {
t: genericDist;
env: env;
constructor(t: genericDist, env: env) {
this.t = t;
}
mean(): resultFloat {
return Constructors_UsingDists_mean({ env: this.env }, this.t);
}
sample(): resultFloat {
return Constructors_UsingDists_sample({ env: this.env }, this.t);
}
pdf(n: number): resultFloat {
return Constructors_UsingDists_pdf({ env: this.env }, this.t, n);
}
cdf(n: number): resultFloat {
return Constructors_UsingDists_cdf({ env: this.env }, this.t, n);
}
inv(n: number): resultFloat {
return Constructors_UsingDists_inv({ env: this.env }, this.t, n);
}
normalize(): resultDist {
return Constructors_UsingDists_normalize({ env: this.env }, this.t);
}
toPointSet(): resultDist {
return Constructors_UsingDists_toPointSet({ env: this.env }, this.t);
}
toSampleSet(n: number): resultDist {
return Constructors_UsingDists_toSampleSet({ env: this.env }, this.t, n);
}
truncate(left: number, right: number): resultDist {
return Constructors_UsingDists_truncate(
{ env: this.env },
this.t,
left,
right
);
}
inspect(): resultDist {
return Constructors_UsingDists_inspect({ env: this.env }, this.t);
}
toString(): resultString {
return Constructors_UsingDists_toString({ env: this.env }, this.t);
}
toSparkline(n: number): resultString {
return Constructors_UsingDists_toSparkline({ env: this.env }, this.t, n);
}
algebraicAdd(d2: GenericDist): resultDist {
return Constructors_UsingDists_algebraicAdd(
{ env: this.env },
this.t,
d2.t
);
}
algebraicMultiply(d2: GenericDist): resultDist {
return Constructors_UsingDists_algebraicMultiply(
{ env: this.env },
this.t,
d2.t
);
}
algebraicDivide(d2: GenericDist): resultDist {
return Constructors_UsingDists_algebraicDivide(
{ env: this.env },
this.t,
d2.t
);
}
algebraicSubtract(d2: GenericDist): resultDist {
return Constructors_UsingDists_algebraicSubtract(
{ env: this.env },
this.t,
d2.t
);
}
algebraicLogarithm(d2: GenericDist): resultDist {
return Constructors_UsingDists_algebraicLogarithm(
{ env: this.env },
this.t,
d2.t
);
}
algebraicExponentiate(d2: GenericDist): resultDist {
return Constructors_UsingDists_algebraicExponentiate(
{ env: this.env },
this.t,
d2.t
);
}
pointwiseAdd(d2: GenericDist): resultDist {
return Constructors_UsingDists_pointwiseAdd(
{ env: this.env },
this.t,
d2.t
);
}
pointwiseMultiply(d2: GenericDist): resultDist {
return Constructors_UsingDists_pointwiseMultiply(
{ env: this.env },
this.t,
d2.t
);
}
pointwiseDivide(d2: GenericDist): resultDist {
return Constructors_UsingDists_pointwiseDivide(
{ env: this.env },
this.t,
d2.t
);
}
pointwiseSubtract(d2: GenericDist): resultDist {
return Constructors_UsingDists_pointwiseSubtract(
{ env: this.env },
this.t,
d2.t
);
}
pointwiseLogarithm(d2: GenericDist): resultDist {
return Constructors_UsingDists_pointwiseLogarithm(
{ env: this.env },
this.t,
d2.t
);
}
pointwiseExponentiate(d2: GenericDist): resultDist {
return Constructors_UsingDists_pointwiseExponentiate(
{ env: this.env },
this.t,
d2.t
);
}
}