Closed
Description
When attempting to fit the Mauna Loa example in pymc-examples
:
with pm.Model() as model:
# yearly periodic component x long term trend
η_per = pm.HalfCauchy("η_per", beta=2, initval=1.0)
ℓ_pdecay = pm.Gamma("ℓ_pdecay", alpha=10, beta=0.075)
period = pm.Normal("period", mu=1, sigma=0.05)
ℓ_psmooth = pm.Gamma("ℓ_psmooth ", alpha=4, beta=3)
cov_seasonal = (
η_per**2 * pm.gp.cov.Periodic(1, period, ℓ_psmooth) * pm.gp.cov.Matern52(1, ℓ_pdecay)
)
gp_seasonal = pm.gp.Marginal(cov_func=cov_seasonal)
# small/medium term irregularities
η_med = pm.HalfCauchy("η_med", beta=0.5, initval=0.1)
ℓ_med = pm.Gamma("ℓ_med", alpha=2, beta=0.75)
α = pm.Gamma("α", alpha=5, beta=2)
cov_medium = η_med**2 * pm.gp.cov.RatQuad(1, ℓ_med, α)
gp_medium = pm.gp.Marginal(cov_func=cov_medium)
# long term trend
η_trend = pm.HalfCauchy("η_trend", beta=2, initval=2.0)
ℓ_trend = pm.Gamma("ℓ_trend", alpha=4, beta=0.1)
cov_trend = η_trend**2 * pm.gp.cov.ExpQuad(1, ℓ_trend)
gp_trend = pm.gp.Marginal(cov_func=cov_trend)
# noise model
η_noise = pm.HalfNormal("η_noise", sigma=0.5, initval=0.05)
ℓ_noise = pm.Gamma("ℓ_noise", alpha=2, beta=4)
σ = pm.HalfNormal("σ", sigma=0.25, initval=0.05)
cov_noise = η_noise**2 * pm.gp.cov.Matern32(1, ℓ_noise) + pm.gp.cov.WhiteNoise(σ)
# The Gaussian process is a sum of these three components
gp = gp_seasonal + gp_medium + gp_trend
# Since the normal noise model and the GP are conjugates, we use `Marginal` with the `.marginal_likelihood` method
y_ = gp.marginal_likelihood("y", X=t, y=y, noise=cov_noise)
approx = pmx.fit(method='pathfinder')
It appears to generate rewrite errors:
ERROR (pytensor.graph.rewriting.basic): SequentialGraphRewriter apply <pytensor.tensor.rewriting.elemwise.InplaceElemwiseOptimizer object at 0x7f01855aabd0>
ERROR (pytensor.graph.rewriting.basic): Traceback:
ERROR (pytensor.graph.rewriting.basic): Traceback (most recent call last):
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/graph/rewriting/basic.py", line 292, in apply
sub_prof = rewriter.apply(fgraph)
^^^^^^^^^^^^^^^^^^^^^^
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/tensor/rewriting/elemwise.py", line 192, in apply
and not fgraph.has_destroyers([node.inputs[i]])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/graph/destroyhandler.py", line 393, in has_destroyers
droot, _, root_destroyer = self.refresh_droot_impact()
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/graph/destroyhandler.py", line 431, in refresh_droot_impact
self.droot, self.impact, self.root_destroyer = _build_droot_impact(self)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/graph/destroyhandler.py", line 200, in _build_droot_impact
raise InconsistencyError(f"Multiple destroyers of {input_root}")
pytensor.graph.utils.InconsistencyError: Multiple destroyers of Blockwise{SolveTriangular{unit_diagonal=False, lower=False, check_finite=True, b_ndim=2, overwrite_b=True}, (m,m),(m,n)->(m,n)}.0
ERROR (pytensor.graph.rewriting.basic): SequentialGraphRewriter apply <pytensor.scan.rewriting.ScanInplaceOptimizer object at 0x7f01852667e0>
ERROR (pytensor.graph.rewriting.basic): Traceback:
ERROR (pytensor.graph.rewriting.basic): Traceback (most recent call last):
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/graph/rewriting/basic.py", line 292, in apply
sub_prof = rewriter.apply(fgraph)
^^^^^^^^^^^^^^^^^^^^^^
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/scan/rewriting.py", line 1035, in apply
for scan_idx, original_node in enumerate(reversed(fgraph.toposort())):
^^^^^^^^^^^^^^^^^
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/graph/fg.py", line 760, in toposort
return io_toposort(self.inputs, self.outputs, self.orderings())
^^^^^^^^^^^^^^^^
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/graph/fg.py", line 784, in orderings
orderings = feature.orderings(self)
^^^^^^^^^^^^^^^^^^^^^^^
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/graph/destroyhandler.py", line 683, in orderings
droot, impact, __ignore = self.refresh_droot_impact()
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/graph/destroyhandler.py", line 431, in refresh_droot_impact
self.droot, self.impact, self.root_destroyer = _build_droot_impact(self)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/home/fonnesbeck/repos/pymc-examples/.pixi/envs/default/lib/python3.12/site-packages/pytensor/graph/destroyhandler.py", line 200, in _build_droot_impact
raise InconsistencyError(f"Multiple destroyers of {input_root}")
pytensor.graph.utils.InconsistencyError: Multiple destroyers of Blockwise{SolveTriangular{unit_diagonal=False, lower=False, check_finite=True, b_ndim=2, overwrite_b=True}, (m,m),(m,n)->(m,n)}.0
pymc_extras: 0.2.4
pymc : 5.22.0
pytensor : 2.30.3
Metadata
Metadata
Assignees
Labels
No labels