99 lines
2.4 KiB
ReasonML
99 lines
2.4 KiB
ReasonML
type assumption =
|
|
| ADDS_TO_1
|
|
| ADDS_TO_CORRECT_PROBABILITY;
|
|
|
|
type assumptions = {
|
|
continuous: assumption,
|
|
discrete: assumption,
|
|
discreteProbabilityMass: option(float),
|
|
};
|
|
|
|
let buildSimple = (~continuous, ~discrete): option(DistTypes.shape) => {
|
|
let cLength =
|
|
continuous |> Distributions.Continuous.getShape |> XYShape.xs |> E.A.length;
|
|
let dLength = discrete |> XYShape.xs |> E.A.length;
|
|
switch (cLength, dLength) {
|
|
| (0 | 1, 0) => None
|
|
| (0 | 1, _) => Some(Discrete(discrete))
|
|
| (_, 0) => Some(Continuous(continuous))
|
|
| (_, _) =>
|
|
let discreteProbabilityMassFraction =
|
|
Distributions.Discrete.T.Integral.sum(~cache=None, discrete);
|
|
let discrete =
|
|
Distributions.Discrete.T.scaleToIntegralSum(~intendedSum=1.0, discrete);
|
|
let continuous =
|
|
Distributions.Continuous.T.scaleToIntegralSum(
|
|
~intendedSum=1.0,
|
|
continuous,
|
|
);
|
|
let mixedDist =
|
|
Distributions.Mixed.make(
|
|
~continuous,
|
|
~discrete,
|
|
~discreteProbabilityMassFraction,
|
|
);
|
|
Some(Mixed(mixedDist));
|
|
};
|
|
};
|
|
|
|
let build = (~continuous, ~discrete, ~assumptions) =>
|
|
switch (assumptions) {
|
|
| {
|
|
continuous: ADDS_TO_CORRECT_PROBABILITY,
|
|
discrete: ADDS_TO_CORRECT_PROBABILITY,
|
|
discreteProbabilityMass: Some(r),
|
|
} =>
|
|
// TODO: Fix this, it's wrong :(
|
|
Some(
|
|
Distributions.Mixed.make(
|
|
~continuous,
|
|
~discrete,
|
|
~discreteProbabilityMassFraction=r,
|
|
),
|
|
)
|
|
|
|
| {
|
|
continuous: ADDS_TO_1,
|
|
discrete: ADDS_TO_1,
|
|
discreteProbabilityMass: Some(r),
|
|
} =>
|
|
Some(
|
|
Distributions.Mixed.make(
|
|
~continuous,
|
|
~discrete,
|
|
~discreteProbabilityMassFraction=r,
|
|
),
|
|
)
|
|
|
|
| {
|
|
continuous: ADDS_TO_1,
|
|
discrete: ADDS_TO_1,
|
|
discreteProbabilityMass: None,
|
|
} =>
|
|
None
|
|
|
|
| {
|
|
continuous: ADDS_TO_CORRECT_PROBABILITY,
|
|
discrete: ADDS_TO_1,
|
|
discreteProbabilityMass: None,
|
|
} =>
|
|
None
|
|
|
|
| {
|
|
continuous: ADDS_TO_1,
|
|
discrete: ADDS_TO_CORRECT_PROBABILITY,
|
|
discreteProbabilityMass: None,
|
|
} =>
|
|
let discreteProbabilityMassFraction =
|
|
Distributions.Discrete.T.Integral.sum(~cache=None, discrete);
|
|
let discrete =
|
|
Distributions.Discrete.T.scaleToIntegralSum(~intendedSum=1.0, discrete);
|
|
Some(
|
|
Distributions.Mixed.make(
|
|
~continuous,
|
|
~discrete,
|
|
~discreteProbabilityMassFraction,
|
|
),
|
|
);
|
|
| _ => None
|
|
}; |