Things needed by interfaces for Stan 3.x
Summary:
The class of the C++ model does not have enough functionality for interfaces like RStan and PyStan to implement version 3.x.
Description:
Here are things that I think should exist:
- [ ] An abstract base class that interfaces can be aware of. Currently, the model class inherits from
prob_gradbutprob_gradis not very useful. The abstract base class should have virtual methods for the things that the generated code is going to define. - [ ] A static method that returns a
std::pair<std::vector<std::string>, std::vector<std::string> >where the firststd::vector<std::string>contains the names of the things declared in thedatablock and the secondstd::vector<std::string>contains the Stan types of the things declared in thedatablock. So, if the Stan program were
data {
int K;
simplex[K] pi;
}
then it would return a std::pair with "K" and "pi" as the first std::vector<std::string> and "int" and "simplex" as the second std::vector<std::string>.
- [ ] A method to be called after instantiation that returns a
std::pair<std::vector<std::string>, std::vector<std::vector<int> > >where thestd::vector<std::string>is the same as in the previous method and contains the names of the things declared in thedatablock and thestd::vector<std::vector<int> > >contains the dimensions of the things declared in thedatablock. In the above example, the second thing would contain 0 and whatever integerKturns out to be. - [ ] A static method that returns the names and types of the things in the transformed data block
- [ ] A method to be called after instantiation that returns the names and dimensions of the things in the transformed data block
- [ ] A static method that returns the names and types of the things in the parameters block
- [ ] A method to be called after instantiation that returns the names and dimensions of the things in the parameters block
- [ ] A static method that returns the names and types of the things in the transformed parameters block
- [ ] A method to be called after instantiation that returns the names and dimensions of the things in the transformed parameters block
- [ ] A static method that returns the names and types of the things in the generated quantities block
- [ ] A method to be called after instantiation that returns the names and dimensions of the things in the generated quantities block
Reproducible Steps:
Read the generated C++ code; none of these exist currently.
Current Output:
None of these exist currently so there is nothing to output.
Expected Output:
See description section.
Additional Information:
Current Version:
v2.16.0
Great list. I don't think there's any harm in introducing this earlier than an actual Stan v3 release if any one has time to tackle it.
Agreed, and thanks for putting this together.
We can definitely start these earlier. I'll break them down into more bite-sized issues as we go.