Hi,
We are using PyMC to build a model with a custom distribution and likelihood for the hssm
package. The code ran fine with 5.6.x, but after updating PyMC dependency to 5.8.x, the code broke under some circumstances with certain parameter settings at the sampling stage with this error:
ERROR (pytensor.graph.rewriting.basic): Rewrite failure due to: local_pow_to_nested_squaring
ERROR (pytensor.graph.rewriting.basic): node: Pow(True_div.0, [3])
ERROR (pytensor.graph.rewriting.basic): TRACEBACK:
ERROR (pytensor.graph.rewriting.basic): Traceback (most recent call last):
File "/Users/yxu150/HSSM/.venv/lib/python3.9/site-packages/pytensor/graph/rewriting/basic.py", line 1922, in process_node
replacements = node_rewriter.transform(fgraph, node)
File "/Users/yxu150/HSSM/.venv/lib/python3.9/site-packages/pytensor/graph/rewriting/basic.py", line 1082, in transform
return self.fn(fgraph, node)
File "/Users/yxu150/HSSM/.venv/lib/python3.9/site-packages/pytensor/tensor/rewriting/math.py", line 2139, in local_pow_to_nested_squaring
assert rval[0].type == node.outputs[0].type, (rval, node.outputs)
AssertionError: ([Composite{(sqr(i0) * i0)}.0], [Pow.0])
Since there is only one line with pt.pow(*, 3)
, we found the offending code seems to be this line:
p = p / pt.sqrt(2 * np.pi * pt.power(tt, 3))
where tt
can take negative values, which we thought might be where the composite type came from. However, even after ensuring that tt
is only positive with something like tt = pt.maximum(tt, 1e-25)
, the problem persists. After changing optimizer setting to o2
, the problem also goes away.
I wonder if there is a way to solve this? Thank you!