@@ -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
19161924def  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