Simple SampleSet.fromDist function
This commit is contained in:
parent
223ddf6a3e
commit
acebaa517b
|
@ -62,6 +62,7 @@ describe("FunctionRegistry Library", () => {
|
||||||
testEvalToBe("Dist.klDivergence(normal(5,2), normal(5,1.5))", "Ok(0.06874342818671068)")
|
testEvalToBe("Dist.klDivergence(normal(5,2), normal(5,1.5))", "Ok(0.06874342818671068)")
|
||||||
testEvalToBe("SampleSet.fromList([3,5,2,3,5,2,3,5,2,3,3,5])", "Ok(Sample Set Distribution)")
|
testEvalToBe("SampleSet.fromList([3,5,2,3,5,2,3,5,2,3,3,5])", "Ok(Sample Set Distribution)")
|
||||||
testEvalToBe("SampleSet.fromList([3,5,2,3,5,2,3,5,2,3,3,5])", "Ok(Sample Set Distribution)")
|
testEvalToBe("SampleSet.fromList([3,5,2,3,5,2,3,5,2,3,3,5])", "Ok(Sample Set Distribution)")
|
||||||
|
testEvalToBe("SampleSet.fromFn({|| sample(normal(5,2))})", "Ok(Sample Set Distribution)")
|
||||||
testEvalToBe(
|
testEvalToBe(
|
||||||
"addOne(t)=t+1; SampleSet.toList(SampleSet.map(SampleSet.fromList([1,2,3,4,5,6]), addOne))",
|
"addOne(t)=t+1; SampleSet.toList(SampleSet.map(SampleSet.fromList([1,2,3,4,5,6]), addOne))",
|
||||||
"Ok([2,3,4,5,6,7])",
|
"Ok([2,3,4,5,6,7])",
|
||||||
|
|
|
@ -21,6 +21,17 @@ module Internal = {
|
||||||
| Error(r) => Error(REDistributionError(SampleSetError(r)))
|
| Error(r) => Error(REDistributionError(SampleSetError(r)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: I don't know why this seems to need at least one input
|
||||||
|
let fromFn = (
|
||||||
|
aLambdaValue,
|
||||||
|
env: ReducerInterface_InternalExpressionValue.environment,
|
||||||
|
reducer,
|
||||||
|
) => {
|
||||||
|
let sampleCount = env.sampleCount
|
||||||
|
let fn = (r) => doLambdaCall(aLambdaValue, list{IEvNumber(r)}, env, reducer)
|
||||||
|
Belt_Array.makeBy(sampleCount, (r) => fn(r->Js.Int.toFloat))->E.A.R.firstErrorOrOpen
|
||||||
|
}
|
||||||
|
|
||||||
let map1 = (sampleSetDist: t, aLambdaValue, env, reducer) => {
|
let map1 = (sampleSetDist: t, aLambdaValue, env, reducer) => {
|
||||||
let fn = r => doLambdaCall(aLambdaValue, list{IEvNumber(r)}, env, reducer)
|
let fn = r => doLambdaCall(aLambdaValue, list{IEvNumber(r)}, env, reducer)
|
||||||
SampleSetDist.samplesMap(~fn, sampleSetDist)->toType
|
SampleSetDist.samplesMap(~fn, sampleSetDist)->toType
|
||||||
|
@ -132,6 +143,30 @@ let library = [
|
||||||
],
|
],
|
||||||
(),
|
(),
|
||||||
),
|
),
|
||||||
|
Function.make(
|
||||||
|
~name="fromFn",
|
||||||
|
~nameSpace,
|
||||||
|
~requiresNamespace=false,
|
||||||
|
~examples=[`SampleSet.fromFn(sample(normal(5,2)))`],
|
||||||
|
~output=ReducerInterface_InternalExpressionValue.EvtArray,
|
||||||
|
~definitions=[
|
||||||
|
FnDefinition.make(
|
||||||
|
~name="fromFn",
|
||||||
|
~inputs=[FRTypeLambda],
|
||||||
|
~run=(inputs, _, env, reducer) =>
|
||||||
|
switch inputs {
|
||||||
|
| [IEvLambda(lambda)] =>
|
||||||
|
switch Internal.fromFn(lambda, env, reducer) {
|
||||||
|
| Ok(r) => Ok(r->Wrappers.sampleSet->Wrappers.evDistribution)
|
||||||
|
| Error(_) => Error("issue")
|
||||||
|
}
|
||||||
|
| _ => Error(impossibleError)
|
||||||
|
},
|
||||||
|
(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
(),
|
||||||
|
),
|
||||||
Function.make(
|
Function.make(
|
||||||
~name="map",
|
~name="map",
|
||||||
~nameSpace,
|
~nameSpace,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user