Rename parameters to imports

This commit is contained in:
Sam Nolan 2022-04-29 20:29:42 +00:00
parent 74df093a42
commit b710289096
5 changed files with 53 additions and 45 deletions

View File

@ -7,8 +7,8 @@ import {
squiggleExpression,
bindings,
samplingParams,
parameters,
defaultParameters,
jsImports,
defaultImports,
defaultBindings,
} from "@quri/squiggle-lang";
import { NumberShower } from "./NumberShower";
@ -154,7 +154,7 @@ export interface SquiggleChartProps {
/** Bindings of previous variables declared */
bindings?: bindings;
/** JS imported parameters */
parameters?: parameters;
imports?: jsImports;
}
const ChartWrapper = styled.div`
@ -170,19 +170,14 @@ export const SquiggleChart: React.FC<SquiggleChartProps> = ({
onChange = () => {},
height = 60,
bindings = defaultBindings,
parameters = defaultParameters,
imports = defaultImports,
width = NaN,
}: SquiggleChartProps) => {
let samplingInputs: samplingParams = {
sampleCount: sampleCount,
xyPointLength: outputXYPoints,
};
let expressionResult = run(
squiggleString,
bindings,
samplingInputs,
parameters
);
let expressionResult = run(squiggleString, bindings, samplingInputs, imports);
let internal: JSX.Element;
if (expressionResult.tag === "Ok") {
let expression = expressionResult.value;

View File

@ -5,13 +5,14 @@ import { CodeEditor } from "./CodeEditor";
import styled from "styled-components";
import type {
squiggleExpression,
samplingParams,
bindings,
parameters,
jsImports,
} from "@quri/squiggle-lang";
import {
runPartial,
errorValueToString,
defaultParameters,
defaultImports,
defaultBindings,
} from "@quri/squiggle-lang";
import { ErrorBox } from "./ErrorBox";
@ -39,8 +40,8 @@ export interface SquiggleEditorProps {
width: number;
/** Previous variable declarations */
bindings: bindings;
/** JS Imported parameters */
parameters: parameters;
/** JS Imports */
imports: jsImports;
}
const Input = styled.div`
@ -62,7 +63,7 @@ export let SquiggleEditor: React.FC<SquiggleEditorProps> = ({
onChange,
environment,
bindings = defaultBindings,
parameters = defaultParameters,
imports = defaultImports,
}: SquiggleEditorProps) => {
let [expression, setExpression] = React.useState(initialSquiggleString);
return (
@ -89,7 +90,7 @@ export let SquiggleEditor: React.FC<SquiggleEditorProps> = ({
environment={environment}
onChange={onChange}
bindings={bindings}
parameters={parameters}
imports={imports}
/>
</div>
);
@ -148,18 +149,29 @@ export interface SquigglePartialProps {
width: number;
/** Previously declared variables */
bindings?: bindings;
/** Parameters imported from js */
parameters?: parameters;
/** Variables imported from js */
imports?: jsImports;
}
export let SquigglePartial: React.FC<SquigglePartialProps> = ({
initialSquiggleString = "",
onChange,
bindings = defaultBindings,
parameters = defaultParameters,
sampleCount = 1000,
outputXYPoints = 1000,
imports = defaultImports,
}: SquigglePartialProps) => {
let samplingInputs: samplingParams = {
sampleCount: sampleCount,
xyPointLength: outputXYPoints,
};
let [expression, setExpression] = React.useState(initialSquiggleString);
let squiggleResult = runPartial(expression, bindings);
let squiggleResult = runPartial(
expression,
bindings,
samplingInputs,
imports
);
if (squiggleResult.tag == "Ok") {
if (onChange) onChange(squiggleResult.value);
}

View File

@ -68,13 +68,13 @@ describe("Partials", () => {
});
});
describe("Parameters", () => {
describe("JS Imports", () => {
test("Can pass parameters into partials and cells", () => {
let bindings = testRunPartial(`y = $x + 2`, defaultBindings, { x: 1 });
let bindings2 = testRunPartial(`z = y + $a`, bindings, { a: 3 });
expect(testRun(`z`, bindings2)).toEqual({
tag: "number",
value: 17,
value: 6,
});
});
test("Complicated deep parameters", () => {

View File

@ -4,12 +4,15 @@ import {
bindings,
squiggleExpression,
errorValueToString,
defaultImports,
defaultBindings,
jsImports,
} from "../../src/js/index";
export function testRun(
x: string,
bindings = {},
parameters = {}
bindings: bindings = defaultBindings,
imports: jsImports = defaultImports
): squiggleExpression {
let squiggleResult = run(
x,
@ -18,9 +21,8 @@ export function testRun(
sampleCount: 1000,
xyPointLength: 100,
},
parameters
imports
);
// return squiggleResult.value
if (squiggleResult.tag === "Ok") {
return squiggleResult.value;
} else {
@ -34,8 +36,8 @@ export function testRun(
export function testRunPartial(
x: string,
bindings: bindings = {},
parameters = {}
bindings: bindings = defaultBindings,
imports: jsImports = defaultImports
): bindings {
let squiggleResult = runPartial(
x,
@ -44,7 +46,7 @@ export function testRunPartial(
sampleCount: 1000,
xyPointLength: 100,
},
parameters
imports
);
if (squiggleResult.tag === "Ok") {
return squiggleResult.value;

View File

@ -16,7 +16,7 @@ export type {
samplingParams,
errorValue,
externalBindings as bindings,
parameters,
jsImports,
};
import {
jsValueToBinding,
@ -28,7 +28,7 @@ import {
import { result, resultMap, tag, tagged } from "./types";
import { Distribution } from "./distribution";
export { Distribution, squiggleExpression, result };
export { Distribution, squiggleExpression, result, resultMap };
export let defaultSamplingInputs: samplingParams = {
sampleCount: 10000,
@ -39,16 +39,16 @@ export function run(
squiggleString: string,
bindings?: externalBindings,
samplingInputs?: samplingParams,
parameters?: parameters
imports?: jsImports
): result<squiggleExpression, errorValue> {
let b = bindings ? bindings : defaultBindings;
let p = parameters ? parameters : defaultParameters;
let i = imports ? imports : defaultImports;
let si: samplingParams = samplingInputs
? samplingInputs
: defaultSamplingInputs;
let result: result<expressionValue, errorValue> =
evaluateUsingExternalBindings(squiggleString, mergeParameters(b, p));
evaluateUsingExternalBindings(squiggleString, mergeImports(b, i));
return resultMap(result, (x) => createTsExport(x, si));
}
@ -57,33 +57,33 @@ export function runPartial(
squiggleString: string,
bindings?: externalBindings,
_samplingInputs?: samplingParams,
parameters?: parameters
imports?: jsImports
): result<externalBindings, errorValue> {
let b = bindings ? bindings : defaultBindings;
let p = parameters ? parameters : defaultParameters;
let i = imports ? imports : defaultImports;
return evaluatePartialUsingExternalBindings(
squiggleString,
mergeParameters(b, p)
mergeImports(b, i)
);
}
function mergeParameters(
function mergeImports(
bindings: externalBindings,
parameters: parameters
imports: jsImports
): externalBindings {
let transformedParameters = Object.fromEntries(
Object.entries(parameters).map(([key, value]) => [
let transformedImports = Object.fromEntries(
Object.entries(imports).map(([key, value]) => [
"$" + key,
jsValueToBinding(value),
])
);
return _.merge(bindings, transformedParameters);
return _.merge(bindings, transformedImports);
}
type parameters = { [key: string]: jsValue };
type jsImports = { [key: string]: jsValue };
export let defaultParameters: parameters = {};
export let defaultImports: jsImports = {};
export let defaultBindings: externalBindings = {};
function createTsExport(
@ -146,4 +146,3 @@ function createTsExport(
return tag("symbol", x.value);
}
}