From 4eb424784864cbf32817b86b3374e27fd9c40a1f Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Fri, 14 Feb 2020 22:29:22 +0000 Subject: [PATCH] Simple lazy cdfs --- src/lib/Prop.re | 8 ++++++++ src/models/GlobalCatastrophe.re | 8 +++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/lib/Prop.re b/src/lib/Prop.re index 187511e0..14131b60 100644 --- a/src/lib/Prop.re +++ b/src/lib/Prop.re @@ -16,6 +16,9 @@ module Value = { | Probability(float) | Conditional(conditional) | TimeLimitedDomainCdf(TimeLimitedDomainCdf.t) + | TimeLimitedDomainCdfLazy( + (string => Types.distribution) => TimeLimitedDomainCdf.t, + ) | ConditionalArray(array(conditional)) | FloatCdf(string); @@ -29,6 +32,7 @@ module Value = { | SelectSingle(r) => r | FloatCdf(r) => r | TimeLimitedDomainCdf(_) => "" + | TimeLimitedDomainCdfLazy(_) => "" | Probability(r) => (r *. 100. |> Js.Float.toFixed) ++ "%" | DateTime(r) => r |> MomentRe.Moment.defaultFormat | FloatPoint(r) => r |> Js.Float.toFixed @@ -51,6 +55,10 @@ module Value = { | SelectSingle(r) => r |> ReasonReact.string | ConditionalArray(r) => "Array" |> ReasonReact.string | Conditional(r) => r.name |> ReasonReact.string + | TimeLimitedDomainCdfLazy(r) => + let timeLimited = r(CdfLibrary.Distribution.fromString(_, 1000)); + let cdf = timeLimited.limitedDomainCdf.distribution; + <> Types.toJs} /> ; | TimeLimitedDomainCdf(r) => let cdf: Types.distribution = r.limitedDomainCdf.distribution; <> Types.toJs} /> ; diff --git a/src/models/GlobalCatastrophe.re b/src/models/GlobalCatastrophe.re index 7d901424..5de10984 100644 --- a/src/models/GlobalCatastrophe.re +++ b/src/models/GlobalCatastrophe.re @@ -1,15 +1,13 @@ module Model = { let make = (currentDateTime: MomentRe.Moment.t) => { - let yearsFromNow = "normal(50,30)"; - let dist = CdfLibrary.Distribution.fromString(yearsFromNow, 1000); - let timeLimitedDomain = + let lazyDistribution = r => TimeLimitedDomainCdf.make( ~timeVector={zero: currentDateTime, unit: `years}, - ~distribution=dist, + ~distribution=r("normal(50,30)"), ~probabilityAtMaxX=0.7, ~maxX=`x(200.), ); - Prop.Value.TimeLimitedDomainCdf(timeLimitedDomain); + Prop.Value.TimeLimitedDomainCdfLazy(lazyDistribution); }; };