Hi, Rasul! Happy to see you there.
I think commenting your thoughts on our current issues and ongoing PRs is the best way to get involved. As you may see, pymc4 development is now a lot about testing new directions and discussions about design choices. It is a strategical decision to start with a well designed architecture to easily extent pymc4.
Global design issue is a lack of theano related “neat features” like
theano.clone and tensorflow graph management: add only. Moreover tensorflow is moving forward to functional eager first api (like pytorch). That’s why we prioritize our efforts on functional design.
- Model is a function: data generative process
- Models don’t change, but every modification returns a copy, like in Pandas.
- Execute model function 1st time after configure
- Make xarray a first-class citizen (used for input data as well as storage of samples)
- Allow creation of submodules by treating a model like a RV
- debugging. How does one get a good error message before hi starts sampling? In pymc3 graph was built in runtime and the was no such issue. Now we have a delayed construction. (but we can run an inspection very first run)
- inspection. How do we inspect pymc4 model like we did in pymc3? Setting smart starting values for sampling, Transform variables, etc
- reparametrization. It is a common problem in hierarchical models to choose a parametrizations. e.g. cantered vs non-centered. We would like to create a unified way to do that
- Variables as models. Some random variables are itself a composition of other variables (Horseshoe, WishartBartlett). The best way to deal with it is to treat ANY variable or model as a model with same API. This direction is not yet well explored. In my opinion it is the best design idea so far.
If you have any comments or clarifications from me or other developers, feel free to ask