pymc-devs/pytensor - Open Source PR Review Scorecard

PyTensor allows you to define, optimize, and efficiently evaluate mathematical expressions involving multi-dimensional arrays.

C-Rank Grade: A (Welcoming) - 67/100

External PR Merge Rate: 53%

Response Time: 3h

First Timer Success: 43%

Frequently Asked Questions

Is pymc-devs/pytensor welcoming to first-time open-source contributors?

pymc-devs/pytensor has a recorded first-timer success rate of 42.9%. Repositories ranked A typically provide actionable feedback during code reviews and actively nurture new community contributors.

How fast can I expect code review feedback on my pull request?

Maintainers in pymc-devs/pytensor respond to incoming external pull requests in approximately 3.3 hours on average. Keeping PRs focused on single tasks and ensuring tests pass helps maintainers review faster.

What does the 67.4 C-Rank™ score (A Tier) represent?

The C-Rank™ system evaluates GitHub projects on a 0–100 scale using real data: PR merge rates, review turnaround time, active maintainer presence, and first-time contributor success. A score of 67.4 places pymc-devs/pytensor in the A tier.

What is the external contributor pull request merge rate for pymc-devs/pytensor?

The external contributor pull request merge rate for pymc-devs/pytensor is 52.5%, based on public PR activity from non-core contributors.

Are there Good First Issues available in pymc-devs/pytensor?

pymc-devs/pytensor currently has 7 active issue(s) tagged with beginner-friendly labels like "good first issue", "beginner", or "up-for-grabs".

pymc-devs
pymc-devs/pytensorA•Welcoming646
GitHub
Back to Explorer
pymc-devs

pymc-devs/pytensor

646
Active (30d)A•Welcoming(67/100)Python

PyTensor allows you to define, optimize, and efficiently evaluate mathematical expressions involving multi-dimensional arrays.

GitHub
Compare••
Jump to:

AI Maintainer Review Guidelines

Review Persona

Strict Architecture Gatekeeper

Warmth Score
7.1/10
Patience Score
7.8/10
Nitpick Rate
40%

Strict review standards in pymc-devs/pytensor. Ensure PR scope matches issue requirements closely before requesting review.

What Contributors Actually Say

Discussions in pymc-devs/pytensor focus heavily on practical implementation feedback, code formatting standards, and issue reproduction details.

Hidden Friction Signals

Unlinked PRs without issue context and changes that fail automated test suites face the highest review friction.

Unwritten Rules

  • •1) Keep PR scope strictly aligned with the linked issue.
  • •2) Ensure local linters pass before opening a review.
  • •3) Maintain full test coverage for modified logic.

Top PR Submission Do's

  • •Add or update tests for changed behavior before requesting review
  • •Update docs or README when behavior changes
  • •Keep PRs small and focused on one change

Top PR Friction Pitfalls (Don'ts)

  • •Do not leave requested test coverage unresolved
  • •Do not ship user-facing changes without matching docs
  • •Do not mix unrelated refactors with feature work
Response Velocity
3 hours
Standard maintainer review cycle

Average Response Latency

Tracks hours until a maintainer leaves a review, comment, or PR response.

Merge Efficiency
52.5%
Moderate PR acceptance rate

External Acceptance Rate

Percentage of community pull requests successfully merged into main.

First-Timer Success
42.9%
Accepts new contributor PRs

First PR Conversion

Rate at which developers submitting their first repository PR succeed.

Active Maintainers
13 core
Highly collaborative maintainer core
Diagnostic Health HUD
52.5%
Merge Gauge
42.9%
1st-Timer
Community Vibe61/100

Embed C-Rank Badge

Show contributors that your repository actively reviews and merges external pull requests.

GetMerged C-Rank badge for pymc-devs/pytensor
[![GetMerged C-Rank](https://getmerged.abhishekco.de/api/badge/pymc-devs/pytensor)](https://getmerged.abhishekco.de/pymc-devs/pytensor?utm_source=github&utm_medium=badge)

Active Good First Issues (5)

View on GitHub

Description I found this project: https://github.com/guillaume-osmo/mlx-addons It looks vibe coded, but it has MLX GPU kernels for cholesky, QR, random SVD, LU, triangular solve, and others. Also far be it from me to judge vibe coding these days :) Would be a big speedup for many models, especially GP/KF/MvN stuff. It's MIT licensed so we could "take inspiration" or try to work with them directly. Tagging the dev @guillaume-osmo/@thegodone in case you're interested in collaborating on this.

📅 Opened Aug 26, 2026💬 4 comments
Quality: 90/100Contribute

We've talked about this before so I just want an issue to track it. The idea is that: perform should be in python, but it should be as simple as possible mode = 'py' should have python-specific dispatches where we can put mode full-featured "performance" python code. An example would be the QZ Op. All that should be moved out of perform, perform should just do scipy.linalg.qz Replace the default FAST_COMPILE with python mode (no compile is really fast right?) There might not actually be much to do to get this off the ground, just some refactor to make things nice and hide complexity in certain cases. Not sure about how this would impact random variables, scan, etc.

📅 Opened Jun 1, 2026💬 3 comments
Quality: 70/100Contribute

Description Integer-to-integer casts on shape arguments of Alloc (and other shape-consuming ops like Reshape) are not removed during canonicalization, even though these ops accept any integer dtype for shape inputs. For example, Alloc(val, int32_var.astype("int64")) keeps the Cast{int64} node in the optimized graph, despite Alloc working correctly with int32 shape inputs directly. Reproducer import pytensor.tensor as pt from pytensor import function, dprint from pytensor.compile.mode import get_default_mode x = pt.scalar('x') s = pt.scalar('s', dtype='int32') g1 = pt.alloc(x, s) g2 = pt.alloc(x, s.astype('int64')) mode = get_default_mode().including('canonicalize') f1 = function([x, s], g1, mode=mode) f2 = function([x, s], g2, mode=mode) print('Without cast:') dprint(f1) # Alloc [id A] # |-- x [id B] # `-- s [id C] print('With useless int32->int64 cast:') dprint(f2) # Alloc [id A] # |-- x [id B] # `-- Cast{int64} [id C] # `-- s [id D] The same issue applies to all integer

📅 Opened May 14, 2026💬 0 comments
Quality: 70/100Contribute

Description https://github.com/pymc-devs/pytensor/actions/runs/22731848114/job/65922904767?pr=1937#step:6:222 Started failing with jax 0.9.1

📅 Opened Mar 5, 2026💬 1 comment
Quality: 55/100Contribute

Description After #1756 Advanced and IncSubtensor take idx_list (just like Subtensor did). It would be nice to use the same string representation we used for Subtensor to make dprint more readable. import pytensor.tensor as pt x = pt.zeros((2, 3, 4, 5)) basic_sub = x[0, :, :1, 1] basic_sub.dprint() # Subtensor{i, :, :stop, j} [id A] # ├─ Alloc [id B] # │ ├─ 0.0 [id C] # │ ├─ 2 [id D] # │ ├─ 3 [id E] # │ ├─ 4 [id F] # │ └─ 5 [id G] # ├─ 0 [id H] # ├─ 1 [id I] # └─ 1 [id J] adv_sub = x[[0], :, :1, 1] adv_sub.dprint() # AdvancedSubtensor{idx_list=(0, slice(None, None, None), slice(None, 1, None), 2)} [id A] # ├─ Alloc [id B] # │ ├─ 0.0 [id C] # │ ├─ 2 [id D] # │ ├─ 3 [id E] # │ ├─ 4 [id F] # │ └─ 5 [id G] # ├─ [0] [id H] # ├─ TensorFromScalar [id I] # │ └─ 1 [id J] # └─ TensorFromScalar [id K] # └─ 1 [id L] (We should also check what's going on with th

📅 Opened Feb 21, 2026💬 2 comments
Quality: 60/100Contribute
Looking for more Python beginner tasks?Explore Python GFI

Contributor Community Vibe Feedback

Rate what actually matters after opening a pull request here.

Have you contributed to this repo?

Rate your first-hand PR experience (review speed, maintainer responsiveness, and onboarding ease) to help other contributors.

3 ratings required
Maintainer helpfulness
Review speed
Beginner friendliness

Contributor Compatibility & Review Speed Analysis for pymc-devs/pytensor

When evaluating whether to contribute to pymc-devs/pytensor, response velocity and maintainer engagement are crucial. GetMerged continuously tracks pull request trajectories, first-comment latency, and code review rounds to help developers avoid submitting pull requests to backlogged repositories.

Currently, maintainers of pymc-devs/pytensor acknowledge new external contributions in approximately 3 hours. Out of all submitted pull requests from non-core authors in the last 180-day window, 52.5% were successfully merged into the primary branch.

Frequently Asked Questions - Contributing to pymc-devs/pytensor

01

Is pymc-devs/pytensor welcoming to first-time open-source contributors?

pymc-devs/pytensor has a recorded first-timer success rate of 42.9%. Repositories ranked Welcoming typically provide actionable feedback during code reviews and actively nurture new community contributors.

02

How fast can I expect code review feedback on my pull request?

The initial maintainer response time averages ~3 hours. Keeping PRs scoped to single concerns and ensuring CI checks succeed will optimize review turnaround.

03

What does the 67.4 C-Rank™ score represent?

The C-Rank™ index scores repositories on a 0 to 100 scale using an objective formula: external PR merge rates, initial response speed, active maintainer count, and first-time contributor retention. A score of 67.4 places pymc-devs/pytensor in the Welcoming tier.

04

What is the external contributor pull request merge rate for pymc-devs/pytensor?

The external pull request merge rate is 52.5%. GetMerged isolates non-core community contributions so external developers get an accurate benchmark of PR acceptance probability.

05

Are there beginner Good First Issues open in pymc-devs/pytensor?

Yes, pymc-devs/pytensor currently has 7 active issue(s) tagged with beginner-friendly labels. You can inspect these directly from the repository issues tab.

GetMerged C-Rank™ Indexing Standard

All metrics displayed for pymc-devs/pytensor are automatically retrieved via the public GitHub API and recalculated daily. Insider pull requests submitted by repository owners or organization members are excluded from merge rate calculations to preserve objective external contributor statistics.