Open
Description
Describe the issue:
If I sample the prior predictive while using DiscreteUniform as a prior I get the error AssertionError: FunctionGraph(Floor(x))
, where "x" is the value of the upper limit of the distribution (e.g., AssertionError: FunctionGraph(Floor(10))
when setting upper=10
).
This only happens when using gcc compilers -- running PyMC using python only avoids this issue, but of course sacrifices speed. This error is also not raised when using a Uniform distribution, but that is continuous instead of discrete.
Reproduceable code example:
import pymc as pm
with pm.Model() as test_model:
x = pm.DiscreteUniform("x", lower=0, upper=10)
test_idata = pm.sample_prior_predictive()
Error message:
<details>
ERROR (pytensor.graph.rewriting.basic): Rewrite failure due to: constant_folding
ERROR (pytensor.graph.rewriting.basic): node: Floor(10)
ERROR (pytensor.graph.rewriting.basic): TRACEBACK:
ERROR (pytensor.graph.rewriting.basic): Traceback (most recent call last):
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\graph\rewriting\basic.py", line 1922, in process_node
replacements = node_rewriter.transform(fgraph, node)
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\graph\rewriting\basic.py", line 1086, in transform
return self.fn(fgraph, node)
~~~~~~~^^^^^^^^^^^^^^
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\tensor\rewriting\basic.py", line 1162, in constant_folding
return unconditional_constant_folding.transform(fgraph, node)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\graph\rewriting\basic.py", line 1086, in transform
return self.fn(fgraph, node)
~~~~~~~^^^^^^^^^^^^^^
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\tensor\rewriting\basic.py", line 1111, in unconditional_constant_folding
thunk = node.op.make_thunk(node, storage_map, compute_map, no_recycling=[])
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\link\c\op.py", line 125, in make_thunk
return self.make_c_thunk(node, storage_map, compute_map, no_recycling)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\link\c\op.py", line 84, in make_c_thunk
outputs = cl.make_thunk(
input_storage=node_input_storage, output_storage=node_output_storage
)
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\link\c\basic.py", line 1185, in make_thunk
cthunk, module, in_storage, out_storage, error_storage = self.__compile__(
~~~~~~~~~~~~~~~~^
input_storage, output_storage, storage_map, cache
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\link\c\basic.py", line 1102, in __compile__
thunk, module = self.cthunk_factory(
~~~~~~~~~~~~~~~~~~~^
error_storage,
^^^^^^^^^^^^^^
...<3 lines>...
cache,
^^^^^^
)
^
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\link\c\basic.py", line 1626, in cthunk_factory
module = cache.module_from_key(key=key, lnk=self)
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\link\c\cmodule.py", line 1251, in module_from_key
module = lnk.compile_cmodule(location)
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\link\c\basic.py", line 1527, in compile_cmodule
module = c_compiler.compile_str(
module_name=mod.code_hash,
...<5 lines>...
preargs=preargs,
)
File "c:\Users\jcaseycl\Projects\pvi_sensitivity_analysis\.venv\Lib\site-packages\pytensor\link\c\cmodule.py", line 2689, in compile_str
assert os.path.isfile(lib_filename)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^
AssertionError: FunctionGraph(Floor(10))
</details>
PyMC version information:
PyMC Version: v5.23.0
PyTensor Version: v2.31.3
Python Version: v3.13.5
Operating system: Windows 11, v10.0.26100
How did you install PyMC/PyMC3: pip
Context for the issue:
This issue prevents me from using faster C-compiled models in my work. Example given here is minimal. The model I am trying to build is more complicated, but proprietary.