From 260d159500543bd7c8b7770aecb820c84338fce0 Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Sat, 23 Apr 2022 18:29:58 -0400 Subject: [PATCH 1/9] Make sure pointSetDist toPointSet is normalized --- .../SampleSetDist/SampleSetDist_ToPointSet.res | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist_ToPointSet.res b/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist_ToPointSet.res index 3916e6fe..90537a12 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist_ToPointSet.res +++ b/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist_ToPointSet.res @@ -133,9 +133,17 @@ let toPointSetDist = ( ~discrete=Some(discrete), ) + /* + I'm surprised that this doesn't come out normalized. My guess is that the KDE library + we're using is standardizing on something else. If we ever change that library, we should + check to see if we still need to do this. + */ + + let normalizedPointSet = pointSetDist->E.O2.fmap(PointSetDist.T.normalize) + let samplesParse: Internals.Types.outputs = { continuousParseParams: pdf |> E.O.fmap(snd), - pointSetDist: pointSetDist, + pointSetDist: normalizedPointSet, } samplesParse From 217361b843f52e213dec4dfb12c1a8b1cf8c4261 Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Sat, 23 Apr 2022 19:07:32 -0400 Subject: [PATCH 2/9] Tried to fix tests of math issues --- .../Invariants/AlgebraicCombination_test.res | 18 ++++++++++-------- packages/squiggle-lang/__tests__/TS/JS_test.ts | 8 ++++---- .../__tests__/TS/SampleSet_test.ts | 10 ++-------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res b/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res index a0f492a1..83bcb668 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res @@ -51,6 +51,7 @@ describe("(Algebraic) addition of distributions", () => { ->toBe(Some(2.5e1)) }) + test("uniform(low=9, high=10) + beta(alpha=2, beta=5)", () => { // let uniformMean = (9.0 +. 10.0) /. 2.0 // let betaMean = 1.0 /. (1.0 +. 5.0 /. 2.0) @@ -65,7 +66,8 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=2. - | Some(x) => x->expect->toBeSoCloseTo(0.01927225696028752, ~digits=1) // (uniformMean +. betaMean) + // Answer found from WolframAlpha: ``mean(uniform(9,10)) + mean(betaDistribution(2,5))`` + | Some(x) => x->expect->toBeSoCloseTo(9.786, ~digits=1) // (uniformMean +. betaMean) } }) test("beta(alpha=2, beta=5) + uniform(low=9, high=10)", () => { @@ -82,7 +84,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=2. - | Some(x) => x->expect->toBeSoCloseTo(0.019275414920485248, ~digits=1) // (uniformMean +. betaMean) + | Some(x) => x->expect->toBeSoCloseTo(9.786, ~digits=1) // (uniformMean +. betaMean) } }) }) @@ -163,7 +165,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=4. - | Some(x) => x->expect->toBeSoCloseTo(0.001978994877226945, ~digits=3) + | Some(x) => x->expect->toBeSoCloseTo(1.025, ~digits=1) } }) test("(beta(alpha=2, beta=5) + uniform(low=9, high=10)).pdf(10)", () => { @@ -178,7 +180,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=4. - | Some(x) => x->expect->toBeSoCloseTo(0.001978994877226945, ~digits=3) + | Some(x) => x->expect->toBeSoCloseTo(0.98, ~digits=1) } }) }) @@ -254,7 +256,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=4. - | Some(x) => x->expect->toBeSoCloseTo(0.0013961779932477507, ~digits=3) + | Some(x) => x->expect->toBeSoCloseTo(0.70, ~digits=1) } }) test("(beta(alpha=2, beta=5) + uniform(low=9, high=10)).cdf(10)", () => { @@ -269,7 +271,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=4. - | Some(x) => x->expect->toBeSoCloseTo(0.001388898111625753, ~digits=3) + | Some(x) => x->expect->toBeSoCloseTo(0.71, ~digits=1) } }) }) @@ -346,7 +348,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=2. - | Some(x) => x->expect->toBeSoCloseTo(10.927078217530806, ~digits=0) + | Some(x) => x->expect->toBeSoCloseTo(9.174960348568693, ~digits=0) } }) test("(beta(alpha=2, beta=5) + uniform(low=9, high=10)).inv(2e-2)", () => { @@ -361,7 +363,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=2. - | Some(x) => x->expect->toBeSoCloseTo(10.915396627014363, ~digits=0) + | Some(x) => x->expect->toBeSoCloseTo(9.168291999681523, ~digits=0) } }) }) diff --git a/packages/squiggle-lang/__tests__/TS/JS_test.ts b/packages/squiggle-lang/__tests__/TS/JS_test.ts index 8e6db265..7a68160c 100644 --- a/packages/squiggle-lang/__tests__/TS/JS_test.ts +++ b/packages/squiggle-lang/__tests__/TS/JS_test.ts @@ -56,16 +56,16 @@ describe("Distribution", () => { ); test("mean", () => { - expect(dist.mean().value).toBeCloseTo(3.737); + expect(dist.mean().value).toBeCloseTo(5.3913); }); test("pdf", () => { expect(dist.pdf(5.0).value).toBeCloseTo(0.0431); }); test("cdf", () => { - expect(dist.cdf(5.0).value).toBeCloseTo(0.155); + expect(dist.cdf(5.0).value).toBeCloseTo(0.224); }); test("inv", () => { - expect(dist.inv(0.5).value).toBeCloseTo(9.458); + expect(dist.inv(0.5).value).toBeCloseTo(6.0); }); test("toPointSet", () => { expect( @@ -87,6 +87,6 @@ describe("Distribution", () => { resultMap(dist.pointwiseAdd(dist2), (r: Distribution) => r.toSparkline(20) ).value - ).toEqual(Ok("▁▂▅██▅▅▅▆▇█▆▅▃▃▂▂▁▁▁")); + ).toEqual(Ok("▁▂▅█▇▅▅▆▇██▇▅▄▃▃▃▂▁▁")); }); }); diff --git a/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts b/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts index c4599f7c..677dc44a 100644 --- a/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts +++ b/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts @@ -46,7 +46,7 @@ describe("cumulative density function", () => { ); }); - test("at the highest number in the sample is close to 1", () => { + test("at the highest number in the sample to be approximately 1", () => { fc.assert( fc.property(arrayGen(), (xs_) => { let xs = Array.from(xs_); @@ -57,13 +57,7 @@ describe("cumulative density function", () => { { sampleCount: n, xyPointLength: 100 } ); let cdfValue = dist.cdf(max).value; - let min = Math.min(...xs); - let epsilon = 5e-3; - if (max - min < epsilon) { - expect(cdfValue).toBeLessThan(1 - epsilon); - } else { - expect(dist.cdf(max).value).toBeGreaterThan(1 - epsilon); - } + expect(cdfValue).toBeCloseTo(1.0, 2) }) ); }); From 5563a5dc40ea0a299ee407af234396600b6ff7be Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Sat, 23 Apr 2022 19:18:02 -0400 Subject: [PATCH 3/9] Prettier --- .../Distributions/Invariants/AlgebraicCombination_test.res | 1 - packages/squiggle-lang/__tests__/TS/SampleSet_test.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res b/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res index 83bcb668..430bc900 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res @@ -51,7 +51,6 @@ describe("(Algebraic) addition of distributions", () => { ->toBe(Some(2.5e1)) }) - test("uniform(low=9, high=10) + beta(alpha=2, beta=5)", () => { // let uniformMean = (9.0 +. 10.0) /. 2.0 // let betaMean = 1.0 /. (1.0 +. 5.0 /. 2.0) diff --git a/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts b/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts index 677dc44a..9891839a 100644 --- a/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts +++ b/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts @@ -57,7 +57,7 @@ describe("cumulative density function", () => { { sampleCount: n, xyPointLength: 100 } ); let cdfValue = dist.cdf(max).value; - expect(cdfValue).toBeCloseTo(1.0, 2) + expect(cdfValue).toBeCloseTo(1.0, 2); }) ); }); From 2c1aff25d3bb2f3b5143b3bc670a0ebf4e850f7d Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Mon, 25 Apr 2022 21:46:40 -0400 Subject: [PATCH 4/9] Added basic functins to SampleSetDist --- .../Invariants/AlgebraicCombination_test.res | 11 ++++----- .../Distributions/GenericDist/GenericDist.res | 23 ++++++++++++------- .../SampleSetDist/SampleSetDist.res | 10 ++++++++ .../squiggle-lang/src/rescript/Utility/E.res | 15 +++++++++--- 4 files changed, 42 insertions(+), 17 deletions(-) diff --git a/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res b/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res index 430bc900..c03f934b 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Invariants/AlgebraicCombination_test.res @@ -65,8 +65,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=2. - // Answer found from WolframAlpha: ``mean(uniform(9,10)) + mean(betaDistribution(2,5))`` - | Some(x) => x->expect->toBeSoCloseTo(9.786, ~digits=1) // (uniformMean +. betaMean) + | Some(x) => x->expect->toBeSoCloseTo(9.786831807237022, ~digits=1) // (uniformMean +. betaMean) } }) test("beta(alpha=2, beta=5) + uniform(low=9, high=10)", () => { @@ -83,7 +82,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=2. - | Some(x) => x->expect->toBeSoCloseTo(9.786, ~digits=1) // (uniformMean +. betaMean) + | Some(x) => x->expect->toBeSoCloseTo(9.784290207736126, ~digits=1) // (uniformMean +. betaMean) } }) }) @@ -164,7 +163,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=4. - | Some(x) => x->expect->toBeSoCloseTo(1.025, ~digits=1) + | Some(x) => x->expect->toBeSoCloseTo(0.9677, ~digits=1) } }) test("(beta(alpha=2, beta=5) + uniform(low=9, high=10)).pdf(10)", () => { @@ -347,7 +346,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=2. - | Some(x) => x->expect->toBeSoCloseTo(9.174960348568693, ~digits=0) + | Some(x) => x->expect->toBeSoCloseTo(9.18416389919939, ~digits=0) } }) test("(beta(alpha=2, beta=5) + uniform(low=9, high=10)).inv(2e-2)", () => { @@ -362,7 +361,7 @@ describe("(Algebraic) addition of distributions", () => { | None => "algebraicAdd has"->expect->toBe("failed") // This is nondeterministic, we could be in a situation where ci fails but you click rerun and it passes, which is bad. // sometimes it works with ~digits=2. - | Some(x) => x->expect->toBeSoCloseTo(9.168291999681523, ~digits=0) + | Some(x) => x->expect->toBeSoCloseTo(9.190872365862756, ~digits=0) } }) }) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist/GenericDist.res index 47fb2c01..20da5f75 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist/GenericDist.res @@ -46,18 +46,25 @@ let toFloatOperation = ( ~toPointSetFn: toPointSetFn, ~distToFloatOperation: Operation.distToFloatOperation, ) => { - let symbolicSolution = switch (t: t) { - | Symbolic(r) => - switch SymbolicDist.T.operate(distToFloatOperation, r) { - | Ok(f) => Some(f) - | _ => None - } + let trySymbolicSolution = switch (t: t) { + | Symbolic(r) => SymbolicDist.T.operate(distToFloatOperation, r)->E.R.toOption | _ => None } - switch symbolicSolution { + let trySampleSetSolution = switch ((t: t), distToFloatOperation) { + | (SampleSet(sampleSet), #Mean) => SampleSetDist.mean(sampleSet)->Some + | (SampleSet(sampleSet), #Sample) => SampleSetDist.sample(sampleSet)->Some + | (SampleSet(sampleSet), #Inv(r)) => SampleSetDist.percentile(sampleSet, r)->Some + | _ => None + } + + switch trySymbolicSolution { | Some(r) => Ok(r) - | None => toPointSetFn(t)->E.R2.fmap(PointSetDist.operate(distToFloatOperation)) + | None => + switch trySampleSetSolution { + | Some(r) => Ok(r) + | None => toPointSetFn(t)->E.R2.fmap(PointSetDist.operate(distToFloatOperation)) + } } } diff --git a/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist.res b/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist.res index 74dba954..d85b8716 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist.res @@ -98,3 +98,13 @@ let map2 = (~fn: (float, float) => result, ~t1: t, ~t2 E.R.toExn("Input of samples should be larger than 5", make(x)) ) } + +let mean = t => T.get(t)->E.A.Floats.mean +let geomean = t => T.get(t)->E.A.Floats.geomean +let mode = t => T.get(t)->E.A.Floats.mode +let sum = t => T.get(t)->E.A.Floats.sum +let min = t => T.get(t)->E.A.Floats.min +let max = t => T.get(t)->E.A.Floats.max +let stdev = t => T.get(t)->E.A.Floats.stdev +let variance = t => T.get(t)->E.A.Floats.variance +let percentile = (t,f) => T.get(t)->E.A.Floats.percentile(f) \ No newline at end of file diff --git a/packages/squiggle-lang/src/rescript/Utility/E.res b/packages/squiggle-lang/src/rescript/Utility/E.res index 78c872ff..5a4e1203 100644 --- a/packages/squiggle-lang/src/rescript/Utility/E.res +++ b/packages/squiggle-lang/src/rescript/Utility/E.res @@ -522,7 +522,8 @@ module A = { | n if n == maxIndex => [index - 1] | _ => [index - 1, index + 1] } |> Belt.Array.map(_, r => sortedArray[r]) - let hasSimilarElement = Belt.Array.some(possiblySimilarElements, r => r == element) + // let hasSimilarElement = Belt.Array.some(possiblySimilarElements, r => r == element) + let hasSimilarElement = false hasSimilarElement ? FloatFloatMap.increment(element, discrete) : { @@ -538,10 +539,18 @@ module A = { } module Floats = { - let sum = Belt.Array.reduce(_, 0., (i, j) => i +. j) - let mean = a => sum(a) /. (Array.length(a) |> float_of_int) + let mean = Jstat.mean + let geomean = Jstat.geomean + let mode = Jstat.mode + let variance = Jstat.variance + let stdev = Jstat.stdev + let sum = Jstat.sum let random = Js.Math.random_int + //Passing true for the exclusive parameter excludes both endpoints of the range. + //https://jstat.github.io/all.html + let percentile = (a,b) => Jstat.percentile(a,b, false) + // Gives an array with all the differences between values // diff([1,5,3,7]) = [4,-2,4] let diff = (arr: array): array => From 0b42604ea7c5ee78ad735778f2a96c5dd638233d Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Tue, 26 Apr 2022 11:59:07 -0400 Subject: [PATCH 5/9] First attempt at fixing tests --- .../__tests__/Distributions/SampleSetDist_test.res | 1 + packages/squiggle-lang/__tests__/TS/JS_test.ts | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/squiggle-lang/__tests__/Distributions/SampleSetDist_test.res b/packages/squiggle-lang/__tests__/Distributions/SampleSetDist_test.res index ee36d191..1c430f3d 100644 --- a/packages/squiggle-lang/__tests__/Distributions/SampleSetDist_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/SampleSetDist_test.res @@ -37,4 +37,5 @@ describe("Continuous and discrete splits", () => { ) let toArr2 = discrete2 |> E.FloatFloatMap.toArray makeTest("splitMedium at count=500", toArr2 |> Belt.Array.length, 500) + // makeTest("foo", [] |> Belt.Array.length, 500) }) diff --git a/packages/squiggle-lang/__tests__/TS/JS_test.ts b/packages/squiggle-lang/__tests__/TS/JS_test.ts index 7a68160c..ee1183a4 100644 --- a/packages/squiggle-lang/__tests__/TS/JS_test.ts +++ b/packages/squiggle-lang/__tests__/TS/JS_test.ts @@ -56,13 +56,13 @@ describe("Distribution", () => { ); test("mean", () => { - expect(dist.mean().value).toBeCloseTo(5.3913); + expect(dist.mean().value).toBeCloseTo(9.5555); }); test("pdf", () => { - expect(dist.pdf(5.0).value).toBeCloseTo(0.0431); + expect(dist.pdf(5.0).value).toBeCloseTo(0.10499); }); test("cdf", () => { - expect(dist.cdf(5.0).value).toBeCloseTo(0.224); + expect(dist.cdf(5.0).value).toBeCloseTo(0.328); }); test("inv", () => { expect(dist.inv(0.5).value).toBeCloseTo(6.0); @@ -73,7 +73,7 @@ describe("Distribution", () => { ).toEqual(Ok("Point Set Distribution")); }); test("toSparkline", () => { - expect(dist.toSparkline(20).value).toEqual("▁▁▃▅███▆▄▃▂▁▁▂▂▃▂▁▁▁"); + expect(dist.toSparkline(20).value).toEqual("▁▁▃▇█▇▄▂▂▂▁▁▁▁▁▂▂▁▁▁"); }); test("algebraicAdd", () => { expect( @@ -87,6 +87,6 @@ describe("Distribution", () => { resultMap(dist.pointwiseAdd(dist2), (r: Distribution) => r.toSparkline(20) ).value - ).toEqual(Ok("▁▂▅█▇▅▅▆▇██▇▅▄▃▃▃▂▁▁")); + ).toEqual(Ok("▁▂██▃▃▃▃▄▅▄▃▃▂▂▂▁▁▁▁")); }); }); From 21d4c1b928d5273304106e54e10bb98ba9daaebf Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Wed, 27 Apr 2022 12:39:41 -0400 Subject: [PATCH 6/9] rm warning number 26 Value: [1e-4 to 5e-3] --- packages/squiggle-lang/src/rescript/Utility/E.res | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Utility/E.res b/packages/squiggle-lang/src/rescript/Utility/E.res index de2c5099..daba1861 100644 --- a/packages/squiggle-lang/src/rescript/Utility/E.res +++ b/packages/squiggle-lang/src/rescript/Utility/E.res @@ -523,11 +523,11 @@ module A = { let discrete = FloatFloatMap.empty() Belt.Array.forEachWithIndex(sortedArray, (index, element) => { let maxIndex = (sortedArray |> Array.length) - 1 - let possiblySimilarElements = switch index { - | 0 => [index + 1] - | n if n == maxIndex => [index - 1] - | _ => [index - 1, index + 1] - } |> Belt.Array.map(_, r => sortedArray[r]) + // let possiblySimilarElements = switch index { + // | 0 => [index + 1] + // | n if n == maxIndex => [index - 1] + // | _ => [index - 1, index + 1] + // } |> Belt.Array.map(_, r => sortedArray[r]) // let hasSimilarElement = Belt.Array.some(possiblySimilarElements, r => r == element) let hasSimilarElement = false hasSimilarElement From aabb53957ea320818c9295321fca3e01bfa33b96 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Wed, 27 Apr 2022 12:41:07 -0400 Subject: [PATCH 7/9] rm warnings 26 and 27 Value: [1e-5 to 1e-3] --- packages/squiggle-lang/src/rescript/Utility/E.res | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Utility/E.res b/packages/squiggle-lang/src/rescript/Utility/E.res index daba1861..362ed743 100644 --- a/packages/squiggle-lang/src/rescript/Utility/E.res +++ b/packages/squiggle-lang/src/rescript/Utility/E.res @@ -521,8 +521,8 @@ module A = { let split = (sortedArray: array) => { let continuous = [] let discrete = FloatFloatMap.empty() - Belt.Array.forEachWithIndex(sortedArray, (index, element) => { - let maxIndex = (sortedArray |> Array.length) - 1 + Belt.Array.forEachWithIndex(sortedArray, (_, element) => { + // let maxIndex = (sortedArray |> Array.length) - 1 // let possiblySimilarElements = switch index { // | 0 => [index + 1] // | n if n == maxIndex => [index - 1] From a5c4cba2f098adf62fb0ddb53bf41fca418b8be8 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Wed, 27 Apr 2022 12:54:42 -0400 Subject: [PATCH 8/9] Updated tests Value: [1e-4 to 8e-3] --- packages/squiggle-lang/__tests__/TS/JS_test.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/squiggle-lang/__tests__/TS/JS_test.ts b/packages/squiggle-lang/__tests__/TS/JS_test.ts index 6ce886a0..1974dee6 100644 --- a/packages/squiggle-lang/__tests__/TS/JS_test.ts +++ b/packages/squiggle-lang/__tests__/TS/JS_test.ts @@ -58,14 +58,15 @@ describe("Distribution", () => { ); test("mean", () => { - expect(dist.mean().value).toBeCloseTo(8.704375514292865); + expect(dist.mean().value).toBeCloseTo(9.5555555); }); test("pdf", () => { - expect(dist.pdf(5.0).value).toBeCloseTo(0.052007455285386944, 1); + expect(dist.pdf(5.0).value).toBeCloseTo(0.10499097598222966, 1); }); test("cdf", () => { expect(dist.cdf(5.0).value).toBeCloseTo( - dist1Samples.filter((x) => x <= 5).length / dist1SampleCount + dist1Samples.filter((x) => x <= 5).length / dist1SampleCount, + 1 ); }); test("inv", () => { @@ -91,6 +92,6 @@ describe("Distribution", () => { resultMap(dist.pointwiseAdd(dist2), (r: Distribution) => r.toSparkline(20) ).value - ).toEqual(Ok("▁▂▅██▅▅▅▆▆▇▅▄▃▃▂▂▁▁▁")); + ).toEqual(Ok("▁▂██▃▃▃▃▄▅▄▃▃▂▂▂▁▁▁▁")); }); }); From a22fbb1afde7741da7ef930fe6beeb5db1d661e4 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Wed, 27 Apr 2022 12:57:49 -0400 Subject: [PATCH 9/9] lint Value: [1e-7 to 1e-6] --- .../src/rescript/Distributions/SampleSetDist/SampleSetDist.res | 2 +- packages/squiggle-lang/src/rescript/Utility/E.res | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist.res b/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist.res index d85b8716..14c66812 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/SampleSetDist/SampleSetDist.res @@ -107,4 +107,4 @@ let min = t => T.get(t)->E.A.Floats.min let max = t => T.get(t)->E.A.Floats.max let stdev = t => T.get(t)->E.A.Floats.stdev let variance = t => T.get(t)->E.A.Floats.variance -let percentile = (t,f) => T.get(t)->E.A.Floats.percentile(f) \ No newline at end of file +let percentile = (t, f) => T.get(t)->E.A.Floats.percentile(f) diff --git a/packages/squiggle-lang/src/rescript/Utility/E.res b/packages/squiggle-lang/src/rescript/Utility/E.res index 362ed743..030c2961 100644 --- a/packages/squiggle-lang/src/rescript/Utility/E.res +++ b/packages/squiggle-lang/src/rescript/Utility/E.res @@ -555,7 +555,7 @@ module A = { //Passing true for the exclusive parameter excludes both endpoints of the range. //https://jstat.github.io/all.html - let percentile = (a,b) => Jstat.percentile(a,b, false) + let percentile = (a, b) => Jstat.percentile(a, b, false) // Gives an array with all the differences between values // diff([1,5,3,7]) = [4,-2,4]