diff --git a/packages/squiggle-lang/src/rescript/GenericDist/GenericDist.res b/packages/squiggle-lang/src/rescript/GenericDist/GenericDist.res index 0bdf004d..84259de3 100644 --- a/packages/squiggle-lang/src/rescript/GenericDist/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/GenericDist/GenericDist.res @@ -28,8 +28,6 @@ let normalize = (t: t) => | #SampleSet(_) => t } -// let isNormalized = (t:t) => - let operationToFloat = (toPointSet: toPointSetFn, fnName, t: genericDist): result => { let symbolicSolution = switch t { | #Symbolic(r) => diff --git a/packages/squiggle-lang/src/rescript/GenericDist/GenericDist_GenericOperation.res b/packages/squiggle-lang/src/rescript/GenericDist/GenericDist_GenericOperation.res index 9958051c..dd4bcd5d 100644 --- a/packages/squiggle-lang/src/rescript/GenericDist/GenericDist_GenericOperation.res +++ b/packages/squiggle-lang/src/rescript/GenericDist/GenericDist_GenericOperation.res @@ -21,6 +21,7 @@ type outputType = [ | #Dist(genericDist) | #Error(error) | #Float(float) + | #String(string) ] let fromResult = (r: result): outputType => @@ -77,7 +78,7 @@ let rec run = (extra, fnName: operation): outputType => { GenericDist.operationToFloat(toPointSet, fnName, dist) |> E.R.fmap(r => #Float(r)) |> fromResult - | #toString => #Error(GenericDist_Types.NotYetImplemented) + | #toString => dist |> GenericDist.toString |> (r => #String(r)) | #toDist(#normalize) => dist |> GenericDist.normalize |> (r => #Dist(r)) | #toDist(#truncate(left, right)) => dist diff --git a/packages/squiggle-lang/src/rescript/GenericDist/GenericDist_Types.res b/packages/squiggle-lang/src/rescript/GenericDist/GenericDist_Types.res index a870d557..321b3a6c 100644 --- a/packages/squiggle-lang/src/rescript/GenericDist/GenericDist_Types.res +++ b/packages/squiggle-lang/src/rescript/GenericDist/GenericDist_Types.res @@ -82,4 +82,4 @@ module Operation = { | #toDistCombination(#Algebraic, _, _) => `algebraic` | #toDistCombination(#Pointwise, _, _) => `pointwise` } -} +} \ No newline at end of file diff --git a/packages/squiggle-lang/src/rescript/GenericDist/README.md b/packages/squiggle-lang/src/rescript/GenericDist/README.md new file mode 100644 index 00000000..9a3ca6ce --- /dev/null +++ b/packages/squiggle-lang/src/rescript/GenericDist/README.md @@ -0,0 +1,32 @@ +# Generic Distribution Library + +This library provides one interface to generic distributions. These distributions can either be symbolic, point set (xy-coordinates of the shape), or sample set (arrays of random samples). + +Different internal formats (symbolic, point set, sample set) allow for benefits and features. It's common for distributions to be converted into either point sets or sample sets to enable certain functions. + +In addition to this interface, there's a second, generic function, for calling functions on this generic distribution type. This ``genericOperation`` standardizes the inputs and outputs for these various function calls. See it's ``run()`` function. + +Performance is very important. Some operations can take a long time to run, and even then, be inaccurate. Because of this, we plan to have a lot of logging and stack tracing functionality eventually built in. + +## Diagram of Distribution Types +```mermaid +graph TD + A[Generic Distribution] -->B{Point Set} + A --> C{Sample Set} + A --> D{Symbolic} + B ---> continuous(Continuous) + B ---> discrete(Discrete) + B --> mixed(Mixed) + continuous -.-> XYshape(XYshape) + discrete -.-> XYshape(XYshape) + mixed -.-> continuous + mixed -.-> discrete + D --> Normal(Normal) + D --> Lognormal(Lognormal) + D --> Triangular(Triangular) + D --> Beta(Beta) + D --> Uniform(Uniform) + D --> Float(Float) + D --> Exponential(Exponential) + D --> Cauchy(Cauchy) +``` \ No newline at end of file