Fix broken filter in Discrete.truncate; switch to epsilon_float in Continuous.truncate

This commit is contained in:
Sebastian Kosch 2020-07-16 20:50:12 -07:00
parent 5fb5d2639f
commit 9cdcc85d6c
3 changed files with 4 additions and 6 deletions

View File

@ -167,12 +167,10 @@ module T =
|> XYShape.T.zip |> XYShape.T.zip
|> XYShape.Zipped.filterByX(x => x >= lc && x <= rc); |> XYShape.Zipped.filterByX(x => x >= lc && x <= rc);
let eps = (t |> getShape |> XYShape.T.xTotalRange) *. 0.0001;
let leftNewPoint = let leftNewPoint =
leftCutoff |> E.O.dimap(lc => [|(lc -. eps, 0.)|], _ => [||]); leftCutoff |> E.O.dimap(lc => [|(lc -. epsilon_float, 0.)|], _ => [||]);
let rightNewPoint = let rightNewPoint =
rightCutoff |> E.O.dimap(rc => [|(rc +. eps, 0.)|], _ => [||]); rightCutoff |> E.O.dimap(rc => [|(rc +. epsilon_float, 0.)|], _ => [||]);
let truncatedZippedPairsWithNewPoints = let truncatedZippedPairsWithNewPoints =
E.A.concatMany([|leftNewPoint, truncatedZippedPairs, rightNewPoint|]); E.A.concatMany([|leftNewPoint, truncatedZippedPairs, rightNewPoint|]);

View File

@ -203,7 +203,7 @@ module T =
|> XYShape.T.zip |> XYShape.T.zip
|> XYShape.Zipped.filterByX(x => |> XYShape.Zipped.filterByX(x =>
x >= E.O.default(neg_infinity, leftCutoff) x >= E.O.default(neg_infinity, leftCutoff)
|| x <= E.O.default(infinity, rightCutoff) && x <= E.O.default(infinity, rightCutoff)
) )
|> XYShape.T.fromZippedArray; |> XYShape.T.fromZippedArray;

View File

@ -177,7 +177,7 @@ module Truncate = {
let truncateAsShape = let truncateAsShape =
(evaluationParams: evaluationParams, leftCutoff, rightCutoff, t) => { (evaluationParams: evaluationParams, leftCutoff, rightCutoff, t) => {
// TODO: use named args in renderToShape; if we're lucky we can at least get the tail // TODO: use named args for xMin/xMax in renderToShape; if we're lucky we can at least get the tail
// of a distribution we otherwise wouldn't get at all // of a distribution we otherwise wouldn't get at all
switch (render(evaluationParams, t)) { switch (render(evaluationParams, t)) {
| Ok(`RenderedDist(rs)) => | Ok(`RenderedDist(rs)) =>