@@ -1903,14 +1903,22 @@ def _walk_up_rv(rv, formatting='plain'):
1903
1903
return all_rvs
1904
1904
1905
1905
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' )
1914
1922
1915
1923
1916
1924
def Deterministic (name , var , model = None , dims = None ):
@@ -1929,15 +1937,7 @@ def Deterministic(name, var, model=None, dims=None):
1929
1937
var = var .copy (model .name_for (name ))
1930
1938
model .deterministics .append (var )
1931
1939
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
1941
1941
1942
1942
return var
1943
1943
0 commit comments