squiggle/src/distPlus/renderers/ShapeRenderer.re
2020-04-18 18:54:30 +01:00

45 lines
1.2 KiB
ReasonML

// This transforms an array intesperced with spaces or newlines with a normally formatted one.
// "3 4 5 3 2 1 " -> "[3,4,5,3,2,1]""
let formatMessyArray = str => {
let split = Js.String.splitByRe([%re "/\\n|\\r|\\s/"], str);
if (E.A.length(split) > 20) {
let inner = split |> Js.Array.joinWith(",");
{j|[$inner]|j};
} else {
str;
};
};
let formatString = str => {
str |> formatMessyArray;
};
let runSymbolic = (guesstimatorString, length) => {
let str = formatString(guesstimatorString);
let graph = MathJsParser.fromString(str);
graph
|> E.R.fmap(g =>
RenderTypes.ShapeRenderer.Symbolic.make(
g,
SymbolicDist.toShape(length, g),
)
);
};
let run =
(inputs: RenderTypes.ShapeRenderer.Combined.inputs)
: RenderTypes.ShapeRenderer.Combined.outputs => {
let symbolic =
runSymbolic(inputs.guesstimatorString, inputs.symbolicInputs.length);
let sampling =
switch (symbolic) {
| Ok(_) => None
| Error(_) =>
Samples.T.fromGuesstimatorString(
~guesstimatorString=inputs.guesstimatorString,
~samplingInputs=inputs.samplingInputs,
(),
)
};
{symbolic: Some(symbolic), sampling};
};