stan icon indicating copy to clipboard operation
stan copied to clipboard

Things needed by interfaces for Stan 3.x

Open bgoodri opened this issue 8 years ago • 2 comments

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_grad but prob_grad is 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 first std::vector<std::string> contains the names of the things declared in the data block and the second std::vector<std::string> contains the Stan types of the things declared in the data block. 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 the std::vector<std::string> is the same as in the previous method and contains the names of the things declared in the data block and the std::vector<std::vector<int> > > contains the dimensions of the things declared in the data block. In the above example, the second thing would contain 0 and whatever integer K turns 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

bgoodri avatar Jul 25 '17 00:07 bgoodri

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.

syclik avatar Jul 25 '17 01:07 syclik

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.

bob-carpenter avatar Jul 25 '17 10:07 bob-carpenter