Minor cleanup of RenderTypes
This commit is contained in:
parent
d17299a5b1
commit
2316820db1
|
@ -167,30 +167,12 @@ module DemoDist = {
|
||||||
);
|
);
|
||||||
|
|
||||||
let response1 = DistPlusRenderer.run(inputs1);
|
let response1 = DistPlusRenderer.run(inputs1);
|
||||||
let inputs2 =
|
switch (response1) {
|
||||||
RenderTypes.DistPlusRenderer.make(
|
| (Ok(distPlus1)) =>
|
||||||
~samplingInputs={
|
|
||||||
sampleCount: Some(options.sampleCount),
|
|
||||||
outputXYPoints: Some(options.outputXYPoints),
|
|
||||||
kernelWidth: options.kernelWidth,
|
|
||||||
},
|
|
||||||
~distPlusIngredients,
|
|
||||||
~shouldDownsample=options.downsampleTo |> E.O.isSome,
|
|
||||||
~recommendedLength=options.downsampleTo |> E.O.default(1000),
|
|
||||||
~inputVariables=
|
|
||||||
[|("p", `SymbolicDist(`Float(2.0)))|]
|
|
||||||
->Belt.Map.String.fromArray,
|
|
||||||
(),
|
|
||||||
);
|
|
||||||
let response2 = DistPlusRenderer.run(inputs2);
|
|
||||||
switch (response1, response2) {
|
|
||||||
| (Ok(distPlus1), Ok(distPlus2)) =>
|
|
||||||
<>
|
<>
|
||||||
<DistPlusPlot distPlus={DistPlus.T.normalize(distPlus1)} />
|
<DistPlusPlot distPlus={DistPlus.T.normalize(distPlus1)} />
|
||||||
<DistPlusPlot distPlus={DistPlus.T.normalize(distPlus2)} />
|
|
||||||
</>
|
</>
|
||||||
| (Error(r), _) => r |> R.ste
|
| (Error(r)) => r |> R.ste
|
||||||
| (_, Error(r)) => r |> R.ste
|
|
||||||
};
|
};
|
||||||
| _ =>
|
| _ =>
|
||||||
"Nothing to show. Try to change the distribution description."
|
"Nothing to show. Try to change the distribution description."
|
||||||
|
|
|
@ -1,4 +1,16 @@
|
||||||
let inputsToShape = (inputs: RenderTypes.ShapeRenderer.Combined.inputs) => {
|
type inputs = {
|
||||||
|
samplingInputs: RenderTypes.ShapeRenderer.Sampling.inputs,
|
||||||
|
symbolicInputs: RenderTypes.ShapeRenderer.Symbolic.inputs,
|
||||||
|
guesstimatorString: string,
|
||||||
|
inputVariables: Belt.Map.String.t(ExpressionTypes.ExpressionTree.node),
|
||||||
|
};
|
||||||
|
type outputs = {
|
||||||
|
graph: ExpressionTypes.ExpressionTree.node,
|
||||||
|
shape: DistTypes.shape,
|
||||||
|
};
|
||||||
|
let makeOutputs = (graph, shape): outputs => {graph, shape};
|
||||||
|
|
||||||
|
let inputsToShape = (inputs: inputs) => {
|
||||||
MathJsParser.fromString(inputs.guesstimatorString, inputs.inputVariables)
|
MathJsParser.fromString(inputs.guesstimatorString, inputs.inputVariables)
|
||||||
|> E.R.bind(_, g =>
|
|> E.R.bind(_, g =>
|
||||||
ExpressionTree.toShape(
|
ExpressionTree.toShape(
|
||||||
|
@ -12,20 +24,11 @@ let inputsToShape = (inputs: RenderTypes.ShapeRenderer.Combined.inputs) => {
|
||||||
},
|
},
|
||||||
g,
|
g,
|
||||||
)
|
)
|
||||||
|> E.R.fmap(RenderTypes.ShapeRenderer.Symbolic.make(g))
|
|> E.R.fmap(makeOutputs(g))
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
let run = (inputs: RenderTypes.DistPlusRenderer.inputs) => {
|
let run = (inputs: RenderTypes.DistPlusRenderer.inputs) => {
|
||||||
let toDist = shape =>
|
|
||||||
DistPlus.make(
|
|
||||||
~shape,
|
|
||||||
~domain=inputs.distPlusIngredients.domain,
|
|
||||||
~unit=inputs.distPlusIngredients.unit,
|
|
||||||
~guesstimatorString=Some(inputs.distPlusIngredients.guesstimatorString),
|
|
||||||
(),
|
|
||||||
)
|
|
||||||
|> DistPlus.T.normalize;
|
|
||||||
let output =
|
let output =
|
||||||
inputsToShape({
|
inputsToShape({
|
||||||
samplingInputs: inputs.samplingInputs,
|
samplingInputs: inputs.samplingInputs,
|
||||||
|
@ -36,7 +39,14 @@ let run = (inputs: RenderTypes.DistPlusRenderer.inputs) => {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
output
|
output
|
||||||
|> E.R.fmap((o: RenderTypes.ShapeRenderer.Symbolic.outputs) =>
|
|> E.R.fmap((o: outputs) =>
|
||||||
toDist(o.shape)
|
DistPlus.make(
|
||||||
|
~shape=o.shape,
|
||||||
|
~domain=inputs.distPlusIngredients.domain,
|
||||||
|
~unit=inputs.distPlusIngredients.unit,
|
||||||
|
~guesstimatorString=
|
||||||
|
Some(inputs.distPlusIngredients.guesstimatorString),
|
||||||
|
(),
|
||||||
|
)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,20 +7,8 @@ module ShapeRenderer = {
|
||||||
outputXYPoints: option(int),
|
outputXYPoints: option(int),
|
||||||
kernelWidth: option(float),
|
kernelWidth: option(float),
|
||||||
};
|
};
|
||||||
type samplingStats = {
|
|
||||||
sampleCount: int,
|
|
||||||
outputXYPoints: int,
|
|
||||||
bandwidthXSuggested: float,
|
|
||||||
bandwidthUnitSuggested: float,
|
|
||||||
bandwidthXImplemented: float,
|
|
||||||
bandwidthUnitImplemented: float,
|
|
||||||
};
|
|
||||||
type outputs = {
|
|
||||||
continuousParseParams: option(samplingStats),
|
|
||||||
shape: option(DistTypes.shape),
|
|
||||||
};
|
|
||||||
module Inputs = {
|
module Inputs = {
|
||||||
let defaultSampleCount = 5000;
|
let defaultSampleCount = 10000;
|
||||||
let defaultOutputXYPoints = 10000;
|
let defaultOutputXYPoints = 10000;
|
||||||
let empty = {
|
let empty = {
|
||||||
sampleCount: None,
|
sampleCount: None,
|
||||||
|
@ -44,36 +32,6 @@ module ShapeRenderer = {
|
||||||
|
|
||||||
module Symbolic = {
|
module Symbolic = {
|
||||||
type inputs = {length: int};
|
type inputs = {length: int};
|
||||||
type outputs = {
|
|
||||||
graph: ExpressionTypes.ExpressionTree.node,
|
|
||||||
shape: DistTypes.shape,
|
|
||||||
};
|
|
||||||
let make = (graph, shape) => {graph, shape};
|
|
||||||
};
|
|
||||||
|
|
||||||
module Combined = {
|
|
||||||
type inputs = {
|
|
||||||
samplingInputs: Sampling.inputs,
|
|
||||||
symbolicInputs: Symbolic.inputs,
|
|
||||||
guesstimatorString: string,
|
|
||||||
inputVariables: MS.t(ExpressionTypes.ExpressionTree.node),
|
|
||||||
};
|
|
||||||
type outputs = {
|
|
||||||
symbolic: option(Belt.Result.t(Symbolic.outputs, string)),
|
|
||||||
sampling: option(Sampling.outputs),
|
|
||||||
};
|
|
||||||
let methodUsed = ({symbolic, sampling}: outputs) =>
|
|
||||||
switch (symbolic, sampling) {
|
|
||||||
| (Some(Ok(_)), _) => `Symbolic
|
|
||||||
| (_, Some({shape: Some(_)})) => `Sampling
|
|
||||||
| _ => `None
|
|
||||||
};
|
|
||||||
let getShape = (r: outputs) =>
|
|
||||||
switch (r.symbolic, r.sampling) {
|
|
||||||
| (Some(Ok({shape})), _) => Some(shape)
|
|
||||||
| (_, Some({shape})) => shape
|
|
||||||
| _ => None
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -85,14 +43,8 @@ module DistPlusRenderer = {
|
||||||
domain: DistTypes.domain,
|
domain: DistTypes.domain,
|
||||||
unit: DistTypes.distributionUnit,
|
unit: DistTypes.distributionUnit,
|
||||||
};
|
};
|
||||||
type inputs = {
|
|
||||||
distPlusIngredients: ingredients,
|
|
||||||
samplingInputs: ShapeRenderer.Sampling.inputs,
|
|
||||||
recommendedLength: int,
|
|
||||||
shouldDownsample: bool,
|
|
||||||
inputVariables: MS.t(ExpressionTypes.ExpressionTree.node),
|
|
||||||
};
|
|
||||||
module Ingredients = {
|
module Ingredients = {
|
||||||
|
type t = ingredients;
|
||||||
let make =
|
let make =
|
||||||
(
|
(
|
||||||
~guesstimatorString,
|
~guesstimatorString,
|
||||||
|
@ -100,12 +52,19 @@ module DistPlusRenderer = {
|
||||||
~unit=DistTypes.UnspecifiedDistribution,
|
~unit=DistTypes.UnspecifiedDistribution,
|
||||||
(),
|
(),
|
||||||
)
|
)
|
||||||
: ingredients => {
|
: t => {
|
||||||
guesstimatorString,
|
guesstimatorString,
|
||||||
domain,
|
domain,
|
||||||
unit,
|
unit,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
type inputs = {
|
||||||
|
distPlusIngredients: ingredients,
|
||||||
|
samplingInputs: ShapeRenderer.Sampling.inputs,
|
||||||
|
recommendedLength: int,
|
||||||
|
shouldDownsample: bool,
|
||||||
|
inputVariables: MS.t(ExpressionTypes.ExpressionTree.node),
|
||||||
|
};
|
||||||
let make =
|
let make =
|
||||||
(
|
(
|
||||||
~samplingInputs=ShapeRenderer.Sampling.Inputs.empty,
|
~samplingInputs=ShapeRenderer.Sampling.Inputs.empty,
|
||||||
|
@ -122,16 +81,4 @@ module DistPlusRenderer = {
|
||||||
shouldDownsample,
|
shouldDownsample,
|
||||||
inputVariables,
|
inputVariables,
|
||||||
};
|
};
|
||||||
type outputs = {
|
|
||||||
shapeRenderOutputs: ShapeRenderer.Combined.outputs,
|
|
||||||
distPlus: option(DistTypes.distPlus),
|
|
||||||
};
|
|
||||||
module Outputs = {
|
|
||||||
let distplus = (t: outputs) => t.distPlus;
|
|
||||||
let shapeRenderOutputs = (t: outputs) => t.shapeRenderOutputs;
|
|
||||||
let make = (shapeRenderOutputs, distPlus) => {
|
|
||||||
shapeRenderOutputs,
|
|
||||||
distPlus,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user