pymc-devs / pymc-devs/pytensor
logsumexp stabilization can make graph fail with zero-sized arrays
Open
Nobody has claimed this yet.
bug
graph rewriting
- Dominant language
- Python
- Stars
- 644
- Forks
- 208
- Avg merge
- 2d 14h
- Merged PRs (30d)
- 16
Description
Description
import numpy as np
import pytensor.tensor as pt
x = pt.tensor("x", shape=(0, 2))
pt.logsumexp(x).eval({x: np.zeros((0, 2))}) # ValueError: Input of CAReduce{maximum} has zero-size on axis %d
Interestingly, scipy has the same failure point
import numpy as np
import scipy
scipy.special.logsumexp(np.zeros((0, 2))) # ValueError: zero-size array to reduction operation maximum which has no identity
This is arguably an edge case. I think a good compromise is to reject the rewrite when the static size is 0, but not otherwise.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the reported pt.logsumexp example with the zero-sized NumPy array. Trace the logsumexp stabilization rewrite and its handling of static shapes; done means the zero-size case no longer produces the invalid reduction while ordinary nonempty inputs retain the existing behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- numpy, python
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100