Suggestion about sampling methods


#1

It looks like the three sampling methods all treat their vars arguments differently. sample_posterior_predictive wants an iterable of Distribution objects. sample_prior_predictive wants a list of variable names (strings). sample doesn’t take any vars argument (or only to pass through to somewhere else – I didn’t chase this down carefully enough).
The clash in argument type between posterior and prior predictive seems unnecessary and it’s a pain for the programmer.
I’m willing to submit a PR given a little guidance about which is best to use. Ideally, I think it would be great to have a general protocol for passing vars arguments.


#2

Indeed currently there are some inconsistencies of API (eg., see long discussion in https://github.com/pymc-devs/pymc3/pull/3119#issuecomment-408404682)

I think to make all API consistence, I would pass variable names to sample_* functions as a general protocol. However, for sampling the option passing vars should not be removed for backward compatibility.


#3

Right. I think the two functions should both accept either an iterable of variables or of variable names (the Common Lisp spec would refer to this as an iterable of “variable designators”), and then internally they can translate one way or the other, as preferred. I suppose one could even accept a dictionary of names to variables, since that’s what named_vars holds.

There should be one or more library functions that will regularize these arguments to either an iterable of names or an iterable of variables.