[x] no variable gets assigned a distribution more than once
[x] no variable gets assigned a distribution that references the same variable
[x] no distribution references variables below it (ones that are assigned a distribution after current variable)
[x] Data/DataView with ppl::mat support
[x] ppl::dot
[x] extend fastad to support AD node for DotNode not needed!
[x] finish unit-testing everything that was temporarily given dummy tests
[x] test operator[] for vector-like param viewers
[x] refactor mcmc with new design
[x] update README
[x] cache AD expressions within some of the distribution expressions (see optimization)
[x] potential issue: multiple chaining => multi-threading => race condition since AD expressions built by making copies of the underlying AD variables which will make them point to the original variable. Potential fix: make copies of model expressions for each thread and each copy has its own independent AD variables (do something in the copy constructor to make this happen).
[x] exceptions for non-activated models before calling inference models are pretty small, so inference can just activate.
[ ] adaptive metropolis moved to later issue
[ ] gibbs sampling moved to later issue
Optimization:
sin(x+y) * cos(x+y) will recompute x+y twice. Think about having transformed parameters like STAN to do something like (w = x+y, y |= ppl::normal(w, 1.)); This optimization at the user-level that cannot be predicted or optimized from the library any further. User definitely has a say in how to optimize expressions.
TODO:
Expression Checkermoved to later issueGenerative Model Checking:no variable gets assigned a distribution more than onceno variable gets assigned a distribution that references the same variableno distribution references variables below it (ones that are assigned a distribution after current variable)extend fastad to support AD node for DotNodenot needed!multiple chains/coresexceptions for non-activated models before calling inferencemodels are pretty small, so inference can just activate.adaptive metropolismoved to later issuegibbs samplingmoved to later issueOptimization:
sin(x+y) * cos(x+y)
will recomputex+y
twice. Think about having transformed parameters like STAN to do something like(w = x+y, y |= ppl::normal(w, 1.));
This optimization at the user-level that cannot be predicted or optimized from the library any further. User definitely has a say in how to optimize expressions.