A simple, self-contained C99 library for judgmental estimation.
examples | ||
README.md | ||
squiggle.c | ||
squiggle.h |
Squiggle.c
A self-contained C99 library that provides a subset of Squiggle's functionality in C.
Why C?
- Because it is fast
- Because I enjoy it
- Because C is honest
- Because it will last long
- Because it can fit in my head
- Because if you can implement something in C, you can implement it anywhere else
- Because it can be made faster if need be, e.g., with a multi-threading library like OpenMP, or by adding more algorithmic complexity
The core strategy
Have some basic building blocks, like , and return samplers. Use previous samplers to . Then use the final sampler to produce an array of samples.
Getting started
You can follow some example usage in the examples/ folder
- In the first example, we define a small model, and draw one sample from it
- In the second example, we define a small model, and return many samples
- In the third example, we use a gcc extension—nested functions—to rewrite the code from point 2. in a more linear way.
- In the fourth example, we define some simple cdfs, and we draw samples from those cdfs. We see that this approach is slower than using the built-in samplers, e.g., the normal sampler.
- In the fifth example, we define the cdf for the beta distribution, and we draw samples from it.
Related projects
To do list
- Have some more complicated & realistic example
- Add summarization functions, like mean, std, 90% ci (or all c.i.?)
- Add README
- Schema: a function which takes a sample and manipulates it,
- and at the end, an array of samples.
- Explain boxes
- Explain individual examples
- Explain nested functions
- Publish online
- Support all distribution functions in https://www.squiggle-language.com/docs/Api/Dist
- Support all distribution functions in https://www.squiggle-language.com/docs/Api/Dist, and do so efficiently
Done
- Add example for only one sample
- Add example for many samples
[ ] Add a custom preprocessor to allow simple nested functions that don't rely on local scope?- Use gcc extension to define functions nested inside main.
- Chain various mixture functions
- Add beta distribution
[-] Use OpenMP for acceleration- Add function to get sample when given a cdf
- Don't have a single header file.
- Structure project a bit better