pymc-devs / pymc-devs/pytensor

Move the _is_provably_positive helpers out of tensor/subtensor.py

Open
#2,404 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

maintenance refactor
Dominant language
Python
Stars
644
Forks
208
Avg merge
2d 14h
Merged PRs (30d)
16

Description

_is_provably_positive and _is_provably_non_negative are general graph predicates that just happen to live in pytensor/tensor/subtensor.py. The module does use them itself for slice canonicalization, but five others import them from there — rewriting/subtensor.py, rewriting/math.py, rewriting/linalg/summary.py, assumptions/elemwise.py, and assumptions/positive_definite.py — so math rewrites and the assumptions system both pull in the indexing module just to ask whether a variable is non-negative.

No obvious destination. assumptions/ already holds two of the callers, but importing it from pytensor/tensor inverts the current direction.

Follow-up from #2380.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read the two predicate helpers in pytensor/tensor/subtensor.py, then trace their imports from rewriting/subtensor.py, rewriting/math.py, rewriting/linalg/summary.py, assumptions/elemwise.py, and assumptions/positive_definite.py. Identify a neutral home that avoids inverting the current dependency direction, update all callers and slice canonicalization, and verify that no caller needs to import the indexing module just for these predicates.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, tooling
Issue type
Refactor
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
50/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.