pymc icon indicating copy to clipboard operation
pymc copied to clipboard

BUG: AssertionError with DiscreteUniform

Open jacaseyclyde opened this issue 5 months ago • 2 comments

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.

jacaseyclyde avatar Jun 24 '25 18:06 jacaseyclyde