Skip to content

Commit e9bc36c

Browse files
committed
fixes #4112, promote dynamic type to full class
1 parent 800dbde commit e9bc36c

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

pymc3/model.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1903,14 +1903,22 @@ def _walk_up_rv(rv, formatting='plain'):
19031903
return all_rvs
19041904

19051905

1906-
def _repr_deterministic_rv(rv, formatting='plain'):
1907-
"""Make latex string for a Deterministic variable"""
1908-
if formatting == 'latex':
1909-
return r"$\text{{{name}}} \sim \text{{Deterministic}}({args})$".format(
1910-
name=rv.name, args=r",~".join(_walk_up_rv(rv, formatting=formatting)))
1911-
else:
1912-
return "{name} ~ Deterministic({args})".format(
1913-
name=rv.name, args=", ".join(_walk_up_rv(rv, formatting=formatting)))
1906+
class DeterministicWrapper(tt.TensorVariable):
1907+
def _str_repr(self, formatting='plain'):
1908+
if formatting == 'latex':
1909+
return r"$\text{{{name}}} \sim \text{{Deterministic}}({args})$".format(
1910+
name=self.name, args=r",~".join(_walk_up_rv(self, formatting=formatting)))
1911+
else:
1912+
return "{name} ~ Deterministic({args})".format(
1913+
name=self.name, args=", ".join(_walk_up_rv(self, formatting=formatting)))
1914+
1915+
def _repr_latex_(self):
1916+
return self._str_repr(formatting='latex')
1917+
1918+
__latex__ = _repr_latex_
1919+
1920+
def __str__(self):
1921+
return self._str_repr(formatting='plain')
19141922

19151923

19161924
def Deterministic(name, var, model=None, dims=None):
@@ -1929,15 +1937,7 @@ def Deterministic(name, var, model=None, dims=None):
19291937
var = var.copy(model.name_for(name))
19301938
model.deterministics.append(var)
19311939
model.add_random_variable(var, dims)
1932-
var._repr_latex_ = functools.partial(_repr_deterministic_rv, var, formatting='latex')
1933-
var.__latex__ = var._repr_latex_
1934-
1935-
# simply assigning var.__str__ is not enough, since str() will default to the class-
1936-
# defined __str__ anyway; see https://stackoverflow.com/a/5918210/1692028
1937-
old_type = type(var)
1938-
new_type = type(old_type.__name__ + '_pymc3_Deterministic', (old_type,),
1939-
{'__str__': functools.partial(_repr_deterministic_rv, var, formatting='plain')})
1940-
var.__class__ = new_type
1940+
var.__class__ = DeterministicWrapper # adds str and latex functionality
19411941

19421942
return var
19431943

0 commit comments

Comments
 (0)