squiggle.c/ROADMAP.md

4.7 KiB

Roadmap

To do

  • Big refactor
    • Come up with a better headline example; fermi paradox paper is too complicated
    • Make README.md less messy
    • Give examples of new functions
    • Reference commit with cdf functions, even though deleted
  • Post on suckless subreddit
  • Look into https://lite.duckduckgo.com/html/ instead?
  • Drive in a few more real-life applications
    • US election modelling?
  • Look into using size_t instead of int for sample numbers
  • Reorganize code a little bit to reduce usage of gcc's nested functions
  • Rename examples

Done

  • Document print stats
  • Document rudimentary algebra manipulations for normal/lognormal
  • Think through whether to delete cdf => samples function => not for now
  • Think through whether to:
    • simplify and just abort on error
    • complexify and use boxes for everything
    • leave as is
    • Offer both options
  • Add more functions to do algebra and get the 90% c.i. of normals, lognormals, betas, etc.
    • Think through which of these make sense.
  • Systematize references
  • Think through seed initialization
  • Document parallelism
  • Document confidence intervals
  • Add example for only one sample
  • Add example for many samples
  • Use gcc extension to define functions nested inside main.
  • Chain various sample_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
  • Simplify PROCESS_ERROR macro
  • Add README
    • Schema: a function which takes a sample and manipulates it,
    • and at the end, an array of samples.
    • Explain boxes
    • Explain nested functions
    • Explain exit on error
    • Explain individual examples
  • Rename functions to something more self-explanatory, e.g,. sample_unit_normal.
  • Add summarization functions: mean, std
  • Add sampling from a gamma distribution
  • Explain correlated samples
  • Test summary statistics for each of the distributions.
    • For uniform
    • For normal
    • For lognormal
    • For lognormal (to syntax)
    • For beta distribution
  • Clarify gamma/standard gamma
  • Add efficient sampling from a beta distribution
  • Pontificate about lognormal tests
  • Give warning about sampling-based methods.
  • Have some more complicated & realistic example
  • Add summarization functions: 90% ci (or all c.i.?)
  • Link to the examples in the examples section.
  • Add a few functions for doing simple algebra on normals, and lognormals
    • Add prototypes
    • Use named structs
    • Add to header file
    • Provide example algebra
    • Add conversion between 90% ci and parameters.
    • Use that conversion in conjunction with small algebra.
    • Consider ergonomics of using ci instead of c_i
      • use named struct instead
      • demonstrate and document feeding a struct directly to a function; my_function((struct c_i){.low = 1, .high = 2});
    • Move to own file? Or signpost in file? => signposted in file.
  • Write twitter thread: now here; retweets appreciated.
  • Write better confidence interval code that:
    • Gets number of samples as an input
    • Gets either a sampler function or a list of samples
    • is O(n), not O(nlog(n))
    • Parallelizes stuff

Discarded

  • Disambiguate sample_laplace--successes vs failures || successes vs total trials as two distinct and differently named functions
  • Support all distribution functions in https://www.squiggle-language.com/docs/Api/Dist
  • Add a custom preprocessor to allow simple nested functions that don't rely on local scope?
  • Add tests in Stan?
  • Test results for lognormal manipulations
  • Consider desirability of defining shortcuts for algebra functions. Adds a level of magic, though.
  • Think about whether to write a simple version of this for uxn, a minimalist portable programming stack which, sadly, doesn't have doubles (64 bit floats)