47 lines
1.4 KiB
ReasonML
47 lines
1.4 KiB
ReasonML
module JS = {
|
|
[@bs.deriving abstract]
|
|
type distJs = {
|
|
xs: array(float),
|
|
ys: array(float),
|
|
};
|
|
|
|
let distToJs = (d: DistTypes.xyShape) => distJs(~xs=d.xs, ~ys=d.ys);
|
|
|
|
let jsToDist = (d: distJs): DistTypes.xyShape => {
|
|
xs: xsGet(d),
|
|
ys: ysGet(d),
|
|
};
|
|
|
|
let doAsDist = (f, d: DistTypes.xyShape) => d |> distToJs |> f |> jsToDist;
|
|
|
|
[@bs.module "./CdfLibrary.js"]
|
|
external cdfToPdf: distJs => distJs = "cdfToPdf";
|
|
|
|
[@bs.module "./CdfLibrary.js"]
|
|
external pdfToCdf: distJs => distJs = "pdfToCdf";
|
|
|
|
[@bs.module "./CdfLibrary.js"]
|
|
external findY: (float, distJs) => float = "findY";
|
|
|
|
[@bs.module "./CdfLibrary.js"]
|
|
external findX: (float, distJs) => float = "findX";
|
|
|
|
[@bs.module "./CdfLibrary.js"]
|
|
external integral: distJs => float = "integral";
|
|
|
|
[@bs.module "./CdfLibrary.js"]
|
|
external differentialEntropy: (int, distJs) => distJs =
|
|
"differentialEntropy";
|
|
};
|
|
|
|
module Distribution = {
|
|
let toPdf = dist => dist |> JS.doAsDist(JS.cdfToPdf);
|
|
let toCdf = dist => dist |> JS.doAsDist(JS.pdfToCdf);
|
|
let findX = (y, dist) => dist |> JS.distToJs |> JS.findX(y);
|
|
let findY = (x, dist) => dist |> JS.distToJs |> JS.findY(x);
|
|
let integral = dist => dist |> JS.distToJs |> JS.integral;
|
|
let differentialEntropy = (maxCalculationLength, dist) =>
|
|
dist
|
|
|> JS.doAsDist(JS.differentialEntropy(maxCalculationLength))
|
|
|> integral;
|
|
}; |