Merge pull request #498 from quantified-uncertainty/mx-polymorph
`mx`/`mixture` polymorphism
This commit is contained in:
commit
7e4ee94b7a
|
@ -119,26 +119,43 @@ module Helpers = {
|
||||||
mixtureWithGivenWeights(distributions, weights)
|
mixtureWithGivenWeights(distributions, weights)
|
||||||
}
|
}
|
||||||
|
|
||||||
let mixture = (args: array<expressionValue>): DistributionOperation.outputType =>
|
let mixture = (args: array<expressionValue>): DistributionOperation.outputType => {
|
||||||
switch E.A.last(args) {
|
let error = (err: string): DistributionOperation.outputType => err->ArgumentError->GenDistError
|
||||||
| Some(EvArray(b)) => {
|
switch args {
|
||||||
let weights = parseNumberArray(b)
|
| [EvArray(distributions)] =>
|
||||||
let distributions = parseDistributionArray(
|
switch parseDistributionArray(distributions) {
|
||||||
Belt.Array.slice(args, ~offset=0, ~len=E.A.length(args) - 1),
|
| Ok(distrs) => mixtureWithDefaultWeights(distrs)
|
||||||
)
|
| Error(err) => error(err)
|
||||||
switch E.R.merge(distributions, weights) {
|
}
|
||||||
| Ok(d, w) => mixtureWithGivenWeights(d, w)
|
| [EvArray(distributions), EvArray(weights)] =>
|
||||||
| Error(err) => GenDistError(ArgumentError(err))
|
switch (parseDistributionArray(distributions), parseNumberArray(weights)) {
|
||||||
|
| (Ok(distrs), Ok(wghts)) => mixtureWithGivenWeights(distrs, wghts)
|
||||||
|
| (Error(err), Ok(_)) => error(err)
|
||||||
|
| (Ok(_), Error(err)) => error(err)
|
||||||
|
| (Error(err1), Error(err2)) => error(`${err1}|${err2}`)
|
||||||
|
}
|
||||||
|
| _ =>
|
||||||
|
switch E.A.last(args) {
|
||||||
|
| Some(EvArray(b)) => {
|
||||||
|
let weights = parseNumberArray(b)
|
||||||
|
let distributions = parseDistributionArray(
|
||||||
|
Belt.Array.slice(args, ~offset=0, ~len=E.A.length(args) - 1),
|
||||||
|
)
|
||||||
|
switch E.R.merge(distributions, weights) {
|
||||||
|
| Ok(d, w) => mixtureWithGivenWeights(d, w)
|
||||||
|
| Error(err) => error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
| Some(EvNumber(_))
|
||||||
|
| Some(EvDistribution(_)) =>
|
||||||
|
switch parseDistributionArray(args) {
|
||||||
|
| Ok(distributions) => mixtureWithDefaultWeights(distributions)
|
||||||
|
| Error(err) => error(err)
|
||||||
|
}
|
||||||
|
| _ => error("Last argument of mx must be array or distribution")
|
||||||
}
|
}
|
||||||
| Some(EvNumber(_))
|
|
||||||
| Some(EvDistribution(_)) =>
|
|
||||||
switch parseDistributionArray(args) {
|
|
||||||
| Ok(distributions) => mixtureWithDefaultWeights(distributions)
|
|
||||||
| Error(err) => GenDistError(ArgumentError(err))
|
|
||||||
}
|
|
||||||
| _ => GenDistError(ArgumentError("Last argument of mx must be array or distribution"))
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module SymbolicConstructors = {
|
module SymbolicConstructors = {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user