probsys / sppl

Probabilistic programming system for fast and exact symbolic inference
Apache License 2.0
76 stars 10 forks source link

Fix relying on `.name` attribute of `rv_discrete` #122

Open fsaad opened 2 years ago

fsaad commented 2 years ago

The .name attribute of a frozen rv_discrete.dist object does not correspond to the underlying class, i.e.,

>>> from scipy.stats import norm
>>> d = norm(loc=0, scale=1)
>>> d.dist.name
'norm'

>>> from scipy.stats import rv_discrete
>>> d = rv_discrete(values=((1, 2), (.5, .5))).freeze()
>>> d.dist.name
'Distribution'

This behavior will cause issue in serializing, since we rely on the name attribute to correspond to a scipy class: https://github.com/probcomp/sppl/blob/efff34fb3d3703247dd7001c36970069c5ac3825/src/compilers/spe_to_dict.py#L48

Related #121

The constructor of rv_discrete does accept a name attribute, which will need to be handled correctly when loading the scipy dist.