ran rescript format on ProgramEvaluator.res
				
					
				
			This commit is contained in:
		
							parent
							
								
									b12f3f0c2d
								
							
						
					
					
						commit
						e4e8e4b847
					
				| 
						 | 
					@ -39,17 +39,16 @@ module Inputs = {
 | 
				
			||||||
type exportDistribution = [
 | 
					type exportDistribution = [
 | 
				
			||||||
  | #DistPlus(DistPlus.t)
 | 
					  | #DistPlus(DistPlus.t)
 | 
				
			||||||
  | #Float(float)
 | 
					  | #Float(float)
 | 
				
			||||||
  | #Function((float) => Belt.Result.t<DistPlus.t,string>)
 | 
					  | #Function(float => Belt.Result.t<DistPlus.t, string>)
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type exportEnv = array<(string, ASTTypes.node)>
 | 
					type exportEnv = array<(string, ASTTypes.node)>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type exportType = {
 | 
					type exportType = {
 | 
				
			||||||
  environment : exportEnv,
 | 
					  environment: exportEnv,
 | 
				
			||||||
  exports: array<exportDistribution>
 | 
					  exports: array<exportDistribution>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
module Internals = {
 | 
					module Internals = {
 | 
				
			||||||
  let addVariable = (
 | 
					  let addVariable = (
 | 
				
			||||||
    {samplingInputs, squiggleString, environment}: Inputs.inputs,
 | 
					    {samplingInputs, squiggleString, environment}: Inputs.inputs,
 | 
				
			||||||
| 
						 | 
					@ -58,9 +57,7 @@ module Internals = {
 | 
				
			||||||
  ): Inputs.inputs => {
 | 
					  ): Inputs.inputs => {
 | 
				
			||||||
    samplingInputs: samplingInputs,
 | 
					    samplingInputs: samplingInputs,
 | 
				
			||||||
    squiggleString: squiggleString,
 | 
					    squiggleString: squiggleString,
 | 
				
			||||||
    environment: ASTTypes.Environment.update(environment, str, _ => Some(
 | 
					    environment: ASTTypes.Environment.update(environment, str, _ => Some(node)),
 | 
				
			||||||
      node,
 | 
					 | 
				
			||||||
    )),
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  type outputs = {
 | 
					  type outputs = {
 | 
				
			||||||
| 
						 | 
					@ -76,8 +73,7 @@ module Internals = {
 | 
				
			||||||
    pointSetDistLength: inputs.samplingInputs.pointDistLength |> E.O.default(10000),
 | 
					    pointSetDistLength: inputs.samplingInputs.pointDistLength |> E.O.default(10000),
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let runNode = (inputs, node) =>
 | 
					  let runNode = (inputs, node) => AST.toLeaf(makeInputs(inputs), inputs.environment, node)
 | 
				
			||||||
    AST.toLeaf(makeInputs(inputs), inputs.environment, node)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let renderIfNeeded = (inputs: Inputs.inputs, node: ASTTypes.node): result<
 | 
					  let renderIfNeeded = (inputs: Inputs.inputs, node: ASTTypes.node): result<
 | 
				
			||||||
    ASTTypes.node,
 | 
					    ASTTypes.node,
 | 
				
			||||||
| 
						 | 
					@ -106,16 +102,14 @@ module Internals = {
 | 
				
			||||||
  let outputToDistPlus = (inputs: Inputs.inputs, pointSetDist: PointSetTypes.pointSetDist) =>
 | 
					  let outputToDistPlus = (inputs: Inputs.inputs, pointSetDist: PointSetTypes.pointSetDist) =>
 | 
				
			||||||
    DistPlus.make(~pointSetDist, ~squiggleString=Some(inputs.squiggleString), ())
 | 
					    DistPlus.make(~pointSetDist, ~squiggleString=Some(inputs.squiggleString), ())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let rec returnDist = (functionInfo : (array<string>, ASTTypes.node), 
 | 
					  let rec returnDist = (
 | 
				
			||||||
                    inputs : Inputs.inputs,
 | 
					    functionInfo: (array<string>, ASTTypes.node),
 | 
				
			||||||
                    env : ASTTypes.environment) => {
 | 
					    inputs: Inputs.inputs,
 | 
				
			||||||
    (input : float) => {
 | 
					    env: ASTTypes.environment,
 | 
				
			||||||
      let foo: Inputs.inputs = {...inputs, environment: env};
 | 
					  ) => {
 | 
				
			||||||
      evaluateFunction(
 | 
					    (input: float) => {
 | 
				
			||||||
        foo,
 | 
					      let foo: Inputs.inputs = {...inputs, environment: env}
 | 
				
			||||||
        functionInfo,
 | 
					      evaluateFunction(foo, functionInfo, [#SymbolicDist(#Float(input))]) |> E.R.bind(_, a =>
 | 
				
			||||||
        [#SymbolicDist(#Float(input))],
 | 
					 | 
				
			||||||
      ) |> E.R.bind(_, a =>
 | 
					 | 
				
			||||||
        switch a {
 | 
					        switch a {
 | 
				
			||||||
        | #DistPlus(d) => Ok(DistPlus.T.normalize(d))
 | 
					        | #DistPlus(d) => Ok(DistPlus.T.normalize(d))
 | 
				
			||||||
        | n =>
 | 
					        | n =>
 | 
				
			||||||
| 
						 | 
					@ -126,11 +120,10 @@ module Internals = {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  // TODO: Consider using ExpressionTypes.ExpressionTree.getFloat or similar in this function
 | 
					  // TODO: Consider using ExpressionTypes.ExpressionTree.getFloat or similar in this function
 | 
				
			||||||
  and coersionToExportedTypes = (
 | 
					  and coersionToExportedTypes = (inputs, env: ASTTypes.environment, ex: ASTTypes.node): result<
 | 
				
			||||||
    inputs,
 | 
					    exportDistribution,
 | 
				
			||||||
    env: ASTTypes.environment,
 | 
					    string,
 | 
				
			||||||
    ex: ASTTypes.node,
 | 
					  > =>
 | 
				
			||||||
  ): result<exportDistribution, string> =>
 | 
					 | 
				
			||||||
    ex
 | 
					    ex
 | 
				
			||||||
    |> renderIfNeeded(inputs)
 | 
					    |> renderIfNeeded(inputs)
 | 
				
			||||||
    |> E.R.bind(_, x =>
 | 
					    |> E.R.bind(_, x =>
 | 
				
			||||||
| 
						 | 
					@ -143,56 +136,45 @@ module Internals = {
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  and evaluateFunction = (
 | 
					  and evaluateFunction = (inputs: Inputs.inputs, fn: (array<string>, ASTTypes.node), fnInputs) => {
 | 
				
			||||||
    inputs: Inputs.inputs,
 | 
					    let output = AST.runFunction(makeInputs(inputs), inputs.environment, fnInputs, fn)
 | 
				
			||||||
    fn: (array<string>, ASTTypes.node),
 | 
					 | 
				
			||||||
    fnInputs,
 | 
					 | 
				
			||||||
  ) => {
 | 
					 | 
				
			||||||
    let output = AST.runFunction(
 | 
					 | 
				
			||||||
      makeInputs(inputs),
 | 
					 | 
				
			||||||
      inputs.environment,
 | 
					 | 
				
			||||||
      fnInputs,
 | 
					 | 
				
			||||||
      fn,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
    output |> E.R.bind(_, coersionToExportedTypes(inputs, inputs.environment))
 | 
					    output |> E.R.bind(_, coersionToExportedTypes(inputs, inputs.environment))
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let runProgram = (inputs: Inputs.inputs, p: ASTTypes.program) => {
 | 
					  let runProgram = (inputs: Inputs.inputs, p: ASTTypes.program) => {
 | 
				
			||||||
    let ins = ref(inputs)
 | 
					    let ins = ref(inputs)
 | 
				
			||||||
    p
 | 
					    p
 | 
				
			||||||
      |> E.A.fmap(x =>
 | 
					    |> E.A.fmap(x =>
 | 
				
			||||||
        switch x {
 | 
					      switch x {
 | 
				
			||||||
        | #Assignment(name, node) =>
 | 
					      | #Assignment(name, node) =>
 | 
				
			||||||
          ins := addVariable(ins.contents, name, node)
 | 
					        ins := addVariable(ins.contents, name, node)
 | 
				
			||||||
          None
 | 
					        None
 | 
				
			||||||
        | #Expression(node) =>
 | 
					      | #Expression(node) => Some(runNode(ins.contents, node))
 | 
				
			||||||
          Some(runNode(ins.contents, node))
 | 
					      }
 | 
				
			||||||
        }
 | 
					    )
 | 
				
			||||||
      )
 | 
					    |> E.A.O.concatSomes
 | 
				
			||||||
      |> E.A.O.concatSomes
 | 
					    |> E.A.R.firstErrorOrOpen
 | 
				
			||||||
 | 
					    |> E.R.bind(_, d =>
 | 
				
			||||||
 | 
					      d
 | 
				
			||||||
 | 
					      |> E.A.fmap(x => coersionToExportedTypes(inputs, ins.contents.environment, x))
 | 
				
			||||||
      |> E.A.R.firstErrorOrOpen
 | 
					      |> E.A.R.firstErrorOrOpen
 | 
				
			||||||
      |> E.R.bind(_, d => 
 | 
					    )
 | 
				
			||||||
           d
 | 
					    |> E.R.fmap(ex => {
 | 
				
			||||||
            |> E.A.fmap(x => coersionToExportedTypes(inputs, ins.contents.environment, x))
 | 
					      environment: Belt.Map.String.toArray(ins.contents.environment),
 | 
				
			||||||
            |> E.A.R.firstErrorOrOpen
 | 
					      exports: ex,
 | 
				
			||||||
         )
 | 
					    })
 | 
				
			||||||
      |> E.R.fmap(ex => 
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            environment: Belt.Map.String.toArray(ins.contents.environment),
 | 
					 | 
				
			||||||
            exports: ex
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let inputsToLeaf = (inputs: Inputs.inputs) =>
 | 
					  let inputsToLeaf = (inputs: Inputs.inputs) =>
 | 
				
			||||||
    Parser.fromString(inputs.squiggleString) |> E.R.bind(_, g => runProgram(inputs, g))
 | 
					    Parser.fromString(inputs.squiggleString) |> E.R.bind(_, g => runProgram(inputs, g))
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
@genType
 | 
					@genType
 | 
				
			||||||
let runAll : (string, Inputs.SamplingInputs.t, exportEnv) => result<exportType,string> = 
 | 
					let runAll: (string, Inputs.SamplingInputs.t, exportEnv) => result<exportType, string> = (
 | 
				
			||||||
   (squiggleString, samplingInputs, environment) => {
 | 
					  squiggleString,
 | 
				
			||||||
 | 
					  samplingInputs,
 | 
				
			||||||
 | 
					  environment,
 | 
				
			||||||
 | 
					) => {
 | 
				
			||||||
  let inputs = Inputs.make(
 | 
					  let inputs = Inputs.make(
 | 
				
			||||||
    ~samplingInputs,
 | 
					    ~samplingInputs,
 | 
				
			||||||
    ~squiggleString,
 | 
					    ~squiggleString,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user