2022-04-12 05:41:36 +00:00
|
|
|
import * as _ from "lodash";
|
2022-05-31 04:16:04 +00:00
|
|
|
import type {
|
2022-04-29 18:41:30 +00:00
|
|
|
environment,
|
2022-05-31 04:16:04 +00:00
|
|
|
externalBindings,
|
|
|
|
errorValue,
|
|
|
|
} from "../rescript/TypescriptInterface.gen";
|
|
|
|
import {
|
2022-04-29 22:51:00 +00:00
|
|
|
defaultEnvironment,
|
2022-04-12 05:41:36 +00:00
|
|
|
} from "../rescript/TypescriptInterface.gen";
|
|
|
|
export {
|
|
|
|
makeSampleSetDist,
|
|
|
|
distributionErrorToString,
|
2022-05-31 04:16:04 +00:00
|
|
|
} from "../rescript/TypescriptInterface.gen";
|
|
|
|
export type {
|
2022-05-02 19:04:16 +00:00
|
|
|
distributionError,
|
2022-05-25 23:27:15 +00:00
|
|
|
declarationArg,
|
|
|
|
declaration,
|
2022-04-12 05:41:36 +00:00
|
|
|
} from "../rescript/TypescriptInterface.gen";
|
2022-05-10 15:52:13 +00:00
|
|
|
export type { errorValue, externalBindings as bindings, jsImports };
|
2022-04-08 19:55:04 +00:00
|
|
|
import {
|
2022-04-29 20:10:39 +00:00
|
|
|
squiggleExpression,
|
2022-05-10 15:52:13 +00:00
|
|
|
lambdaValue,
|
2022-04-29 20:10:39 +00:00
|
|
|
} from "./rescript_interop";
|
2022-06-26 08:14:51 +00:00
|
|
|
import { result, resultMap, tag, tagged } from "./types";
|
2022-05-02 18:29:59 +00:00
|
|
|
import { Distribution, shape } from "./distribution";
|
2022-04-11 03:16:31 +00:00
|
|
|
|
2022-05-31 04:16:04 +00:00
|
|
|
export { Distribution, resultMap, defaultEnvironment };
|
|
|
|
export type { result, shape, environment, lambdaValue, squiggleExpression };
|
2022-04-28 18:59:15 +00:00
|
|
|
|
2022-06-26 08:14:51 +00:00
|
|
|
export { parse } from "./parse";
|
|
|
|
|
2022-05-10 15:52:13 +00:00
|
|
|
export let defaultSamplingInputs: environment = {
|
2022-04-08 18:42:14 +00:00
|
|
|
sampleCount: 10000,
|
2022-04-12 05:41:36 +00:00
|
|
|
xyPointLength: 10000,
|
2022-04-08 18:42:14 +00:00
|
|
|
};
|
|
|
|
|
2022-04-11 03:16:31 +00:00
|
|
|
|
2022-08-19 15:13:31 +00:00
|
|
|
/*
|
|
|
|
All those functions below are invalid since the introduction of ReducerProject
|
|
|
|
*/
|
|
|
|
// export function run(
|
|
|
|
// squiggleString: string,
|
|
|
|
// bindings?: externalBindings,
|
|
|
|
// environment?: environment,
|
|
|
|
// imports?: jsImports
|
|
|
|
// ): result<squiggleExpression, errorValue> {
|
|
|
|
// let b = bindings ? bindings : defaultBindings;
|
|
|
|
// let i = imports ? imports : defaultImports;
|
|
|
|
// let e = environment ? environment : defaultEnvironment;
|
|
|
|
// let res: result<expressionValue, errorValue> = evaluateUsingOptions(
|
|
|
|
// { externalBindings: mergeImportsWithBindings(b, i), environment: e },
|
|
|
|
// squiggleString
|
|
|
|
// );
|
|
|
|
// return resultMap(res, (x) => createTsExport(x, e));
|
|
|
|
// }
|
2022-04-29 18:46:44 +00:00
|
|
|
|
2022-08-19 15:13:31 +00:00
|
|
|
// // Run Partial. A partial is a block of code that doesn't return a value
|
|
|
|
// export function runPartial(
|
|
|
|
// squiggleString: string,
|
|
|
|
// bindings?: externalBindings,
|
|
|
|
// environment?: environment,
|
|
|
|
// imports?: jsImports
|
|
|
|
// ): result<externalBindings, errorValue> {
|
|
|
|
// let b = bindings ? bindings : defaultBindings;
|
|
|
|
// let i = imports ? imports : defaultImports;
|
|
|
|
// let e = environment ? environment : defaultEnvironment;
|
2022-04-29 18:46:44 +00:00
|
|
|
|
2022-08-19 15:13:31 +00:00
|
|
|
// return evaluatePartialUsingExternalBindings(
|
|
|
|
// squiggleString,
|
|
|
|
// mergeImportsWithBindings(b, i),
|
|
|
|
// e
|
|
|
|
// );
|
|
|
|
// }
|
2022-05-10 15:52:13 +00:00
|
|
|
|
2022-08-19 15:13:31 +00:00
|
|
|
// jsValueToExpressionValue is invalid
|
|
|
|
// export function runForeign(
|
|
|
|
// fn: lambdaValue,
|
|
|
|
// args: jsValue[],
|
|
|
|
// environment?: environment
|
|
|
|
// ): result<squiggleExpression, errorValue> {
|
|
|
|
// let e = environment ? environment : defaultEnvironment;
|
|
|
|
// let res: result<expressionValue, errorValue> = foreignFunctionInterface(
|
|
|
|
// fn,
|
|
|
|
// args.map(jsValueToExpressionValue),
|
|
|
|
// e
|
|
|
|
// );
|
|
|
|
// return resultMap(res, (x) => createTsExport(x, e));
|
|
|
|
// }
|
2022-04-29 13:50:57 +00:00
|
|
|
|
2022-08-19 15:13:31 +00:00
|
|
|
// function mergeImportsWithBindings(
|
|
|
|
// bindings: externalBindings,
|
|
|
|
// imports: jsImports
|
|
|
|
// ): externalBindings {
|
|
|
|
// let transformedImports = Object.fromEntries(
|
|
|
|
// Object.entries(imports).map(([key, value]) => [
|
|
|
|
// "$" + key,
|
|
|
|
// jsValueToBinding(value),
|
|
|
|
// ])
|
|
|
|
// );
|
|
|
|
// return _.merge(bindings, transformedImports);
|
|
|
|
// }
|
2022-04-29 18:46:44 +00:00
|
|
|
|
2022-08-19 15:13:31 +00:00
|
|
|
// type jsImports = { [key: string]: jsValue };
|
2022-04-29 19:02:43 +00:00
|
|
|
|
2022-08-19 15:13:31 +00:00
|
|
|
// export let defaultImports: jsImports = {};
|
|
|
|
// export let defaultBindings: externalBindings = {};
|
2022-05-09 14:18:50 +00:00
|
|
|
|
2022-08-19 15:13:31 +00:00
|
|
|
// export function mergeBindings(
|
|
|
|
// allBindings: externalBindings[]
|
|
|
|
// ): externalBindings {
|
|
|
|
// return allBindings.reduce((acc, x) => ({ ...acc, ...x }));
|
|
|
|
// }
|
|
|
|
|
|
|
|
// function createTsExport(
|
|
|
|
// x: expressionValue,
|
|
|
|
// environment: environment
|
|
|
|
// ): squiggleExpression {
|
|
|
|
// switch (x) {
|
|
|
|
// case "EvVoid":
|
|
|
|
// return tag("void", "");
|
|
|
|
// default: {
|
|
|
|
// switch (x.tag) {
|
|
|
|
// case "EvArray":
|
|
|
|
// // genType doesn't convert anything more than 2 layers down into {tag: x, value: x}
|
|
|
|
// // format, leaving it as the raw values. This converts the raw values
|
|
|
|
// // directly into typescript values.
|
|
|
|
// //
|
|
|
|
// // The casting here is because genType is about the types of the returned
|
|
|
|
// // values, claiming they are fully recursive when that's not actually the
|
|
|
|
// // case
|
|
|
|
// return tag(
|
|
|
|
// "array",
|
|
|
|
// x.value.map(
|
|
|
|
// (arrayItem): squiggleExpression =>
|
|
|
|
// convertRawToTypescript(
|
|
|
|
// arrayItem as unknown as rescriptExport,
|
|
|
|
// environment
|
|
|
|
// )
|
|
|
|
// )
|
|
|
|
// );
|
|
|
|
// case "EvArrayString":
|
|
|
|
// return tag("arraystring", x.value);
|
|
|
|
// case "EvBool":
|
|
|
|
// return tag("boolean", x.value);
|
|
|
|
// case "EvCall":
|
|
|
|
// return tag("call", x.value);
|
|
|
|
// case "EvLambda":
|
|
|
|
// return tag("lambda", x.value);
|
|
|
|
// case "EvDistribution":
|
|
|
|
// return tag("distribution", new Distribution(x.value, environment));
|
|
|
|
// case "EvNumber":
|
|
|
|
// return tag("number", x.value);
|
|
|
|
// case "EvRecord":
|
|
|
|
// // genType doesn't support records, so we have to do the raw conversion ourself
|
|
|
|
// let result: tagged<"record", { [key: string]: squiggleExpression }> =
|
|
|
|
// tag(
|
|
|
|
// "record",
|
|
|
|
// _.mapValues(x.value, (x: unknown) =>
|
|
|
|
// convertRawToTypescript(x as rescriptExport, environment)
|
|
|
|
// )
|
|
|
|
// );
|
|
|
|
// return result;
|
|
|
|
// case "EvString":
|
|
|
|
// return tag("string", x.value);
|
|
|
|
// case "EvSymbol":
|
|
|
|
// return tag("symbol", x.value);
|
|
|
|
// case "EvDate":
|
|
|
|
// return tag("date", x.value);
|
|
|
|
// case "EvTimeDuration":
|
|
|
|
// return tag("timeDuration", x.value);
|
|
|
|
// case "EvDeclaration":
|
|
|
|
// return tag("lambdaDeclaration", x.value);
|
|
|
|
// case "EvTypeIdentifier":
|
|
|
|
// return tag("typeIdentifier", x.value);
|
|
|
|
// case "EvType":
|
|
|
|
// let typeResult: tagged<
|
|
|
|
// "type",
|
|
|
|
// { [key: string]: squiggleExpression }
|
|
|
|
// > = tag(
|
|
|
|
// "type",
|
|
|
|
// _.mapValues(x.value, (x: unknown) =>
|
|
|
|
// convertRawToTypescript(x as rescriptExport, environment)
|
|
|
|
// )
|
|
|
|
// );
|
|
|
|
// return typeResult;
|
|
|
|
// case "EvModule":
|
|
|
|
// let moduleResult: tagged<
|
|
|
|
// "module",
|
|
|
|
// { [key: string]: squiggleExpression }
|
|
|
|
// > = tag(
|
|
|
|
// "module",
|
|
|
|
// _.mapValues(x.value, (x: unknown) =>
|
|
|
|
// convertRawToTypescript(x as rescriptExport, environment)
|
|
|
|
// )
|
|
|
|
// );
|
|
|
|
// return moduleResult;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|