let table = (distPlus, x) => {
{"X Point" |> ReasonReact.string} {"Discrete Value" |> ReasonReact.string} {"Continuous Value" |> ReasonReact.string} {"Y Integral to Point" |> ReasonReact.string} {"Y Integral Total" |> ReasonReact.string}
{x |> E.Float.toString |> ReasonReact.string} {distPlus |> Distributions.DistPlus.T.xToY(x) |> DistTypes.MixedPoint.toDiscreteValue |> Js.Float.toPrecisionWithPrecision(_, ~digits=7) |> ReasonReact.string} {distPlus |> Distributions.DistPlus.T.xToY(x) |> DistTypes.MixedPoint.toContinuousValue |> Js.Float.toPrecisionWithPrecision(_, ~digits=7) |> ReasonReact.string} {distPlus |> Distributions.DistPlus.T.Integral.xToY(~cache=None, x) |> E.Float.with2DigitsPrecision |> ReasonReact.string} {distPlus |> Distributions.DistPlus.T.Integral.sum(~cache=None) |> E.Float.with2DigitsPrecision |> ReasonReact.string}
{"Continuous Total" |> ReasonReact.string} {"Scaled Continuous Total" |> ReasonReact.string} {"Discrete Total" |> ReasonReact.string} {"Scaled Discrete Total" |> ReasonReact.string}
{distPlus |> Distributions.DistPlus.T.toContinuous |> E.O.fmap( Distributions.Continuous.T.Integral.sum(~cache=None), ) |> E.O.fmap(E.Float.with2DigitsPrecision) |> E.O.default("") |> ReasonReact.string} {distPlus |> Distributions.DistPlus.T.toScaledContinuous |> E.O.fmap( Distributions.Continuous.T.Integral.sum(~cache=None), ) |> E.O.fmap(E.Float.with2DigitsPrecision) |> E.O.default("") |> ReasonReact.string} {distPlus |> Distributions.DistPlus.T.toDiscrete |> E.O.fmap(Distributions.Discrete.T.Integral.sum(~cache=None)) |> E.O.fmap(E.Float.with2DigitsPrecision) |> E.O.default("") |> ReasonReact.string} {distPlus |> Distributions.DistPlus.T.toScaledDiscrete |> E.O.fmap(Distributions.Discrete.T.Integral.sum(~cache=None)) |> E.O.fmap(E.Float.with2DigitsPrecision) |> E.O.default("") |> ReasonReact.string}
; }; let adjustBoth = discreteProbabilityMass => { let yMaxDiscreteDomainFactor = discreteProbabilityMass; let yMaxContinuousDomainFactor = 1.0 -. discreteProbabilityMass; let yMax = yMaxDiscreteDomainFactor > yMaxContinuousDomainFactor ? yMaxDiscreteDomainFactor : yMaxContinuousDomainFactor; ( 1.0 /. (yMaxDiscreteDomainFactor /. yMax), 1.0 /. (yMaxContinuousDomainFactor /. yMax), ); }; module DistPlusChart = { [@react.component] let make = (~distPlus: DistTypes.distPlus, ~onHover) => { open Distributions.DistPlus; let discrete = distPlus |> T.toScaledDiscrete; let continuous = distPlus |> T.toScaledContinuous |> E.O.fmap(Distributions.Continuous.getShape); let range = T.xTotalRange(distPlus); let minX = switch (T.minX(distPlus), range) { | (Some(min), Some(range)) => Some(min -. range *. 0.001) | _ => None }; let maxX = T.maxX(distPlus); let timeScale = distPlus.unit |> DistTypes.DistributionUnit.toJson; let toDiscreteProbabilityMass = distPlus |> Distributions.DistPlus.T.toDiscreteProbabilityMass; let (yMaxDiscreteDomainFactor, yMaxContinuousDomainFactor) = adjustBoth(toDiscreteProbabilityMass); ; }; }; module IntegralChart = { [@react.component] let make = (~distPlus: DistTypes.distPlus, ~onHover) => { open Distributions.DistPlus; let integral = Distributions.DistPlus.T.toShape(distPlus) |> Distributions.Shape.T.Integral.get(~cache=None); let continuous = integral |> Distributions.Continuous.toLinear |> E.O.fmap(Distributions.Continuous.getShape); let range = T.xTotalRange(distPlus); let minX = switch (T.minX(distPlus), range) { | (Some(min), Some(range)) => Some(min -. range *. 0.001) | _ => None }; let maxX = integral |> Distributions.Continuous.T.maxX; let timeScale = distPlus.unit |> DistTypes.DistributionUnit.toJson; ; }; }; [@react.component] let make = (~distPlus: DistTypes.distPlus) => { let (x, setX) = React.useState(() => 0.); let chart = React.useMemo1( () => { {setX(_ => r)}} />}, [|distPlus|], ); let chart2 = React.useMemo1( () => { {setX(_ => r)}} />}, [|distPlus|], );
chart chart2 {table(distPlus, x)}
; // chart };