Skip to content

BUG: AssertionError with DiscreteUniform #7834

Open
@jacaseyclyde

Description

@jacaseyclyde

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions