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