This commit is contained in:
NunoSempere 2022-09-06 13:59:21 +02:00
parent edce22050a
commit 4903319073

View File

@ -8,8 +8,7 @@ let requiresNamespace = true
module Combinatorics = { module Combinatorics = {
module Helpers = { module Helpers = {
let laplace = ((successes, trials)) => let laplace = ((successes, trials)) => (successes +. 1.0) /. (trials +. 2.0)
(successes +. 1.0) /. (trials +. 2.0)
let factorial = Stdlib.Math.factorial let factorial = Stdlib.Math.factorial
let choose = ((n, k)) => factorial(n) /. (factorial(n -. k) *. factorial(k)) let choose = ((n, k)) => factorial(n) /. (factorial(n -. k) *. factorial(k))
let pow = (base, exp) => Js.Math.pow_float(~base, ~exp) let pow = (base, exp) => Js.Math.pow_float(~base, ~exp)
@ -22,9 +21,7 @@ module Combinatorics = {
~requiresNamespace, ~requiresNamespace,
~output=EvtNumber, ~output=EvtNumber,
~examples=[`Danger.laplace(1, 20)`], ~examples=[`Danger.laplace(1, 20)`],
~definitions=[ ~definitions=[DefineFn.Numbers.twoToOne("laplace", laplace)],
DefineFn.Numbers.twoToOne("laplace", laplace),
],
(), (),
) )
let factorial = Function.make( let factorial = Function.make(
@ -154,7 +151,7 @@ module Integration = {
} }
} }
module Lib = { module Lib = {
// Integral in terms of function, min, max, num points // Integral in terms of function, min, max, num points
// Note that execution time will be more predictable, because it // Note that execution time will be more predictable, because it
// will only depend on num points and the complexity of the function // will only depend on num points and the complexity of the function
let integrateFunctionBetweenWithNumIntegrationPoints = Function.make( let integrateFunctionBetweenWithNumIntegrationPoints = Function.make(
@ -173,7 +170,12 @@ module Integration = {
let result = switch inputs { let result = switch inputs {
| [_, _, _, IEvNumber(0.0)] => | [_, _, _, IEvNumber(0.0)] =>
Error("Integration error 4 in Danger.integrate: Increment can't be 0.") Error("Integration error 4 in Danger.integrate: Increment can't be 0.")
| [IEvLambda(aLambda), IEvNumber(min), IEvNumber(max), IEvNumber(numIntegrationPoints)] => | [
IEvLambda(aLambda),
IEvNumber(min),
IEvNumber(max),
IEvNumber(numIntegrationPoints),
] =>
Helpers.integrateFunctionBetweenWithNumIntegrationPoints( Helpers.integrateFunctionBetweenWithNumIntegrationPoints(
aLambda, aLambda,
min, min,
@ -246,7 +248,6 @@ module Internals = {
->Belt.Array.map(FunctionRegistry_Helpers.Wrappers.evNumber) ->Belt.Array.map(FunctionRegistry_Helpers.Wrappers.evNumber)
->FunctionRegistry_Helpers.Wrappers.evArray ->FunctionRegistry_Helpers.Wrappers.evArray
// Diminishing returns // Diminishing returns
// Helpers // Helpers
type diminishingReturnsAccumulatorInner = { type diminishingReturnsAccumulatorInner = {
@ -359,14 +360,11 @@ module Internals = {
} }
} }
let library = [ let library = [
Combinatorics.Lib.laplace, Combinatorics.Lib.laplace,
Combinatorics.Lib.factorial, Combinatorics.Lib.factorial,
Combinatorics.Lib.choose, Combinatorics.Lib.choose,
Combinatorics.Lib.binomial, Combinatorics.Lib.binomial,
// Diminishing marginal return functions // Diminishing marginal return functions
// There are functions diminishingMarginalReturnsForFunctions2 through diminishingMarginalReturnsForFunctions7 // There are functions diminishingMarginalReturnsForFunctions2 through diminishingMarginalReturnsForFunctions7
// Because of this bug: <https://github.com/quantified-uncertainty/squiggle/issues/1090> // Because of this bug: <https://github.com/quantified-uncertainty/squiggle/issues/1090>