-
Notifications
You must be signed in to change notification settings - Fork 150
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the issue:
While defining a custom Op, I have encountered two misimplementations in pytensor.scalar. A fix proposal is atached. Tell me if pull-request is more appropriate. (Tested on PyTensor 2.34.0/Python 3.11 and PyTensor 2.35.1/Python 3.14.)
__rtruediv__is missing in ScalarVariable
>>> import pytensor.tensor as T
>>> x = T.dscalar("x")
>>> sx = T.scalar_from_tensor(x)
>>> 1.0 / sx
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'float' and 'ScalarVariable'
- Initialization of superclass is missing in InRange
>>> import pytensor
>>> import pytensor.tensor as T
>>> import pytensor.scalar as S
>>> func = T.elemwise.Elemwise(S.inopenrange, name = "func")
>>> x = T.dscalar("x")
>>> y = func(x, -1.0, 1.0)
>>> f = pytensor.function([x], y) # f itself is successfully compiled.
ERROR (pytensor.graph.rewriting.basic): SequentialGraphRewriter apply <pytensor.graph.rewriting.basic.EquilibriumGraphRewriter object at 0x121d3c8d0>
ERROR (pytensor.graph.rewriting.basic): Traceback:
ERROR (pytensor.graph.rewriting.basic): Traceback (most recent call last):
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/basic.py", line 289, in apply
sub_prof = rewriter.apply(fgraph)
^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/basic.py", line 2384, in apply
for node_rewriter in self.node_tracker.get_trackers(node.op):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/basic.py", line 1139, in get_trackers
[
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/basic.py", line 1142, in <listcomp>
if op_pattern.match_parameters(op)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/unify.py", line 427, in match_parameters
if param.parameters and not param.match_parameters(sub_op):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/unify.py", line 429, in match_parameters
elif getattr(op, key) != param:
^^^^^^^^^^^^^^^^
AttributeError: 'InRange' object has no attribute 'output_types_preference'
Patch:
diff --git a/pytensor/scalar/basic.py b/pytensor/scalar/basic.py
index 5102d5f60..b0680e51b 100644
--- a/pytensor/scalar/basic.py
+++ b/pytensor/scalar/basic.py
@@ -924,6 +924,9 @@ class _scalar_py_operators:
def __truediv__(self, other):
return true_div(self, other)
+ def __rtruediv__(self, other):
+ return true_div(other, self)
+
def __floordiv__(self, other):
return int_div(self, other)
@@ -1654,6 +1657,7 @@ class InRange(LogicalComparison):
nin = 3
def __init__(self, openlow, openhi):
+ super().__init__()
self.openlow = openlow
self.openhi = openhi
Reproducable code example:
# 1.
import pytensor.tensor as T
x = T.dscalar("x")
sx = T.scalar_from_tensor(x)
1.0 / sx
# 2.
import pytensor
import pytensor.tensor as T
import pytensor.scalar as S
func = T.elemwise.Elemwise(S.inopenrange, name = "func")
x = T.dscalar("x")
y = func(x, -1.0, 1.0)
f = pytensor.function([x], y)Error message:
1.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'float' and 'ScalarVariable'
2.
ERROR (pytensor.graph.rewriting.basic): SequentialGraphRewriter apply <pytensor.graph.rewriting.basic.EquilibriumGraphRewriter object at 0x121d3c8d0>
ERROR (pytensor.graph.rewriting.basic): Traceback:
ERROR (pytensor.graph.rewriting.basic): Traceback (most recent call last):
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/basic.py", line 289, in apply
sub_prof = rewriter.apply(fgraph)
^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/basic.py", line 2384, in apply
for node_rewriter in self.node_tracker.get_trackers(node.op):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/basic.py", line 1139, in get_trackers
[
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/basic.py", line 1142, in <listcomp>
if op_pattern.match_parameters(op)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/unify.py", line 427, in match_parameters
if param.parameters and not param.match_parameters(sub_op):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/ikegami/venv3.11/lib/python3.11/site-packages/pytensor/graph/rewriting/unify.py", line 429, in match_parameters
elif getattr(op, key) != param:
^^^^^^^^^^^^^^^^
AttributeError: 'InRange' object has no attribute 'output_types_preference'PyTensor version information:
PyTensor 2.34.0:Python 3.11:MacOS 26.0.1 and
PyTensor 2.35.1:Python 3.14:MacOS 26.0.1
Context for the issue:
No response
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working