Change extrapolation handling in Continuous.combinePointwise to explicit distributionType param

This commit is contained in:
Sebastian Kosch 2020-07-18 21:43:27 -07:00
parent f3922761f4
commit d9141f6b2b
4 changed files with 15 additions and 26 deletions

View File

@ -209,30 +209,9 @@ let toDiscretePointMassesFromDiscrete = (s: DistTypes.xyShape): pointMassesWithM
let {xs, ys}: XYShape.T.t = s;
let n = E.A.length(xs);
let masses: array(float) = Belt.Array.makeUninitializedUnsafe(n); // doesn't include the fake first and last points
let means: array(float) = Belt.Array.makeUninitializedUnsafe(n);
let variances: array(float) = Belt.Array.makeUninitializedUnsafe(n);
for (i in 0 to n - 1) {
Belt.Array.set(
masses,
i,
ys[i]
) |> ignore;
Belt.Array.set(
means,
i,
xs[i]
) |> ignore;
Belt.Array.set(
variances,
i,
0.0
) |> ignore;
();
};
let masses: array(float) = Belt.Array.makeBy(n, i => ys[i]);
let means: array(float) = Belt.Array.makeBy(n, i => xs[i]);
let variances: array(float) = Belt.Array.makeBy(n, i => 0.0);
{n, masses, means, variances};
};

View File

@ -41,7 +41,7 @@ let combinePointwise =
(
~integralSumCachesFn=(_, _) => None,
~integralCachesFn: (t, t) => option(t) =(_, _) => None,
~extrapolation=`UseZero,
~distributionType: DistTypes.distributionType = `PDF,
fn: (float, float) => float,
t1: DistTypes.continuousShape,
t2: DistTypes.continuousShape,
@ -68,6 +68,11 @@ let combinePointwise =
| (`Stepwise, `Linear) => (stepwiseToLinear(t1), t2);
};
let extrapolation = switch (distributionType) {
| `PDF => `UseZero
| `CDF => `UseOutermostPoints
};
let interpolator = XYShape.XtoY.continuousInterpolator(t1.interpolation, extrapolation);
make(

View File

@ -9,6 +9,11 @@ type domain =
| RightLimited(domainLimit)
| LeftAndRightLimited(domainLimit, domainLimit);
type distributionType = [
| `PDF
| `CDF
];
type xyShape = {
xs: array(float),
ys: array(float),

View File

@ -131,7 +131,7 @@ module PointwiseCombination = {
`RenderedDist(
Shape.combinePointwise(
~integralSumCachesFn=(a, b) => Some(a +. b),
~integralCachesFn=(a, b) => Some(Continuous.combinePointwise(~extrapolation=`UseOutermostPoints, (+.), a, b)),
~integralCachesFn=(a, b) => Some(Continuous.combinePointwise(~distributionType=`CDF, (+.), a, b)),
(+.),
rs1,
rs2,