Skip to content

Commit 358b825

Browse files
authored
Relax pm.observe to allow observing already observed variables (#7679)
1 parent d7d2be2 commit 358b825

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

pymc/model/transform/conditioning.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from pymc.model.fgraph import (
2626
ModelDeterministic,
2727
ModelFreeRV,
28+
ModelValuedVar,
2829
extract_dims,
2930
fgraph_from_model,
3031
model_deterministic,
@@ -74,7 +75,9 @@ def observe(
7475
7576
m_new = pm.observe(m, {y: 0.5})
7677
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+
7881
This relies on PyMC ability to infer the logp of the underlying expression
7982
8083
.. code-block:: python
@@ -95,9 +98,9 @@ def observe(
9598
for var, obs in vars_to_observations.items()
9699
}
97100

98-
valid_model_vars = set(model.free_RVs + model.deterministics)
101+
valid_model_vars = set(model.basic_RVs + model.deterministics)
99102
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")
101104

102105
fgraph, memo = fgraph_from_model(model)
103106

@@ -106,7 +109,7 @@ def observe(
106109
model_var = memo[var]
107110

108111
# Just a sanity check
109-
assert isinstance(model_var.owner.op, ModelFreeRV | ModelDeterministic)
112+
assert isinstance(model_var.owner.op, ModelValuedVar | ModelDeterministic)
110113
assert model_var in fgraph.variables
111114

112115
var = model_var.owner.inputs[0]

0 commit comments

Comments
 (0)