25
25
from pymc .model .fgraph import (
26
26
ModelDeterministic ,
27
27
ModelFreeRV ,
28
+ ModelValuedVar ,
28
29
extract_dims ,
29
30
fgraph_from_model ,
30
31
model_deterministic ,
@@ -74,7 +75,9 @@ def observe(
74
75
75
76
m_new = pm.observe(m, {y: 0.5})
76
77
77
- Deterministic variables can also be observed.
78
+ Deterministic variables can also be observed. If the variable has already
79
+ been observed, its old value is replaced with the one provided.
80
+
78
81
This relies on PyMC ability to infer the logp of the underlying expression
79
82
80
83
.. code-block:: python
@@ -95,9 +98,9 @@ def observe(
95
98
for var , obs in vars_to_observations .items ()
96
99
}
97
100
98
- valid_model_vars = set (model .free_RVs + model .deterministics )
101
+ valid_model_vars = set (model .basic_RVs + model .deterministics )
99
102
if any (var not in valid_model_vars for var in vars_to_observations ):
100
- raise ValueError ("At least one var is not a free variable or deterministic in the model" )
103
+ raise ValueError ("At least one var is not a random variable or deterministic in the model" )
101
104
102
105
fgraph , memo = fgraph_from_model (model )
103
106
@@ -106,7 +109,7 @@ def observe(
106
109
model_var = memo [var ]
107
110
108
111
# Just a sanity check
109
- assert isinstance (model_var .owner .op , ModelFreeRV | ModelDeterministic )
112
+ assert isinstance (model_var .owner .op , ModelValuedVar | ModelDeterministic )
110
113
assert model_var in fgraph .variables
111
114
112
115
var = model_var .owner .inputs [0 ]
0 commit comments