NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3442 most downloaded on PyPI
Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
Last release 2 days ago
02 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
4 years old
109 releases · first in 2022
One column per quarter.
Fix stale incompatible rewrite names in JAX and PyTorch linkers by @N-0-MAD in #2412
Full Changelog: rel-3.3.2...rel-3.3.3
Fix unit_diagonal and non-contiguous reads in MLX linalg by @jessegrabowski in #2403
Full Changelog: rel-3.3.1...rel-3.3.2
Fix broadcast/upcast loss in local_add_of_sparse_write and local_read_of_write by @frankbuckley in #2350
local_add_of_sparse_write and local_read_of_write by @frankbuckley in #2350Full Changelog: rel-3.3.0...rel-3.3.1
Allow building in free-threaded python by @ricardoV94 in #2286
AdvancedIncSubtensor runtime-broadcast check crashing on a scalar update by @velochy in #2339Pad by @jessegrabowski in #2315Full Changelog: rel-3.2.4...rel-3.2.5
Add full mlx blockwise support by @jessegrabowski in #2233
Full Changelog: rel-3.2.3...rel-3.2.4
Handle implicit indexing broadcast in FusedElemwise by @ricardoV94 in #2306
Full Changelog: rel-3.2.2...rel-3.2.3
Add ndtri_exp Op by @prisharai in #2299
Full Changelog: rel-3.2.1...rel-3.2.2
Cast constant ARange bounds to Op dtype in JAX backend by @jessegrabowski in #2298
Full Changelog: rel-3.2.0...rel-3.2.1
Deprecate ExternalCOp by @ricardoV94 in #2292
pointer_add by @ricardoV94 in #2284Full Changelog: rel-3.1.3...rel-3.2.0
Fix incorrect static output shape in several Ops by @zlee-cf in #2275
Full Changelog: rel-3.1.2...rel-3.1.3
Fix several regressions caused by last release by @ricardoV94 in #2272
Full Changelog: rel-3.1.1...rel-3.1.2
Deprecate implicit shared-variable capture in OpFromGraph by @alessandrogentili001 in #2047
until scan gradient step count with recurring outputs by @jessegrabowski in #2217_make_scalar_loop updates dtype-stable by @maresb in #2249Full Changelog: rel-3.0.5...rel-3.1.0
Nothing published for this version
Revert recursion workaround and disable the indexed-elemwise fusion by default (it could RecursionError during OpFromGraph shape inference; supersedes
RecursionError during OpFromGraph shape inference; supersedes 3.0.6) by @ricardoV94Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-3.0.6...rel-3.0.7
Avoid deep recursion in OpFromGraph.infer_shape (backport from main) by @ricardoV94 in https://github.com/pymc-devs/pytensor/commit/c141306ae1f92ce904
OpFromGraph.infer_shape (backport from main) by @ricardoV94 in https://github.com/pymc-devs/pytensor/commit/c141306ae1f92ce9049f37e0ea11af7d63089892Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-3.0.5...rel-3.0.6
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-3.0.4...rel-3.0.5
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-3.0.3...rel-3.0.4
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-3.0.2...rel-3.0.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-3.0.1...rel-3.0.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-3.0.0...rel-3.0.1
Reorganize compile module and remove deprecated functionality by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1351
<!-- Release notes generated using configuration in .github/release.yml at main -->
rich debugprint format via file="rich" by @williambdean in https://github.com/pymc-devs/pytensor/pull/2042output_grads to OFG pullback function consistent at runtime by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/2065values_eq and values_eq_approx by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1914Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.38.0...rel-3.0.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.38.2...rel-2.38.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.38.1...rel-2.38.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
values_eq and values_eq_approx by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1914Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.38.0...rel-2.38.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
QZ Op and support for Numba solve_discrete_are by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1859StructuredDotGradCSR and StructuredDotGradCSC in numba backend by @tomicapretto in https://github.com/pymc-devs/pytensor/pull/1860infer_shape to work with xtensor lowering by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1891Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.37.0...rel-2.38.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
minimize and root wrt higher-dimensional arguments by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1806Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.36.3...rel-2.37.0
Remove deprecated AbstractConv Ops and tests by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1817
<!-- Release notes generated using configuration in .github/release.yml at main -->
L_Op for join_dims and split_dims by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1812numba rewrites from JAX Scan rewrites by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1825tri symbolically by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1814Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.36.2...rel-2.36.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.36.1...rel-2.36.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.36.0...rel-2.36.1
Start deprecating shared updates functionality in Scan by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1704
<!-- Release notes generated using configuration in .github/release.yml at main -->
sparse module by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1674Convolve2D Op by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1397filter helper by @emekaokoli19 in https://github.com/pymc-devs/pytensor/pull/1717axis argument in numba CumOp when input is 1d by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1691wrap_jax when there is a mix of statically known and unknown shapes by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1722scalar_ prefix from several Ops by @Copilot in https://github.com/pymc-devs/pytensor/pull/1683__rtruediv__ and __rfloordiv__ to Scalar variables by @Copilot in https://github.com/pymc-devs/pytensor/pull/1701transfer_type and default inplace Elemwise Ops by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1752Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.35.1...rel-2.36.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
axis=None symbolically instead of within CumOp by @Copilot in https://github.com/pymc-devs/pytensor/pull/1574Expm and add jax dispatch by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1668jax.scipy.linalg.qr when mode = 'r' by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1682Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.35.0...rel-2.35.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
sparse.sandbox by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1664cho_solve, lu_factor, solve_triangular by @Fyrebright in https://github.com/pymc-devs/pytensor/pull/1605Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.34.0...rel-2.35.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
wrap_jax and rename as_op to wrap_py by @aseyboldt in https://github.com/pymc-devs/pytensor/pull/1614flip to handle negative axis correctly by @Copilot in https://github.com/pymc-devs/pytensor/pull/1628Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.33.0...rel-2.34.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
OpPattern for more flexible tracks and PatternNodeRewriter by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1594infer_shape dataset by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1563softplus(log(x)) -> log1p(x) by @lciti in https://github.com/pymc-devs/pytensor/pull/1452compiler_verbose config flag by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1520Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.32.0...rel-2.33.0
Get rid of pydot-ng because it's deprecated since 7 years by @maresb in https://github.com/pymc-devs/pytensor/pull/1534
<!-- Release notes generated using configuration in .github/release.yml at main -->
CheckAndRaise Op C implementation by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1521Join(COp) by @PabloRoque in https://github.com/pymc-devs/pytensor/pull/1527block_diag by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1529PatternNodeRewriter by @lciti in https://github.com/pymc-devs/pytensor/pull/1526Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.31.7...rel-2.32.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
full_like, ones_like, and zeros_like for XTensorVariables by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1519Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.31.6...rel-2.31.7
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
scalar_solve_to_division rewrite by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1516Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.31.5...rel-2.31.6
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
(...,) Transpose by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1500Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.31.4...rel-2.31.5
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
minimize and root Ops by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1182cholesky decomposition with cho_solve in graphs with multiple pt.solve when assume_a = "pos" by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1467log1mexp stabilization by @lciti in https://github.com/pymc-devs/pytensor/pull/1483CholeskySolve Op by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1491grad to compute jacobian when input shape is known to be (1,) by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1454scipy.linalg.cholesky by @Fyrebright in https://github.com/pymc-devs/pytensor/pull/1487Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.31.3...rel-2.31.4
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
compute_map=None in Scan by @zaxtax in https://github.com/pymc-devs/pytensor/pull/1435__props__ to string due to invalid hash of np.dtype() objects by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1436Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.31.2...rel-2.31.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.31.1...rel-2.31.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.31.0...rel-2.31.1
Update pyproject license schema according to deprecation warnings by @maresb in https://github.com/pymc-devs/pytensor/pull/1362
<!-- Release notes generated using configuration in .github/release.yml at main -->
shell=False for Popen on Windows by @michaelosthege in https://github.com/pymc-devs/pytensor/pull/1324PyObject_CallNoArgs to call thunks from VM by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1383Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.30.3...rel-2.31.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
sort and argsort functions by @victorgarcia98 in https://github.com/pymc-devs/pytensor/pull/1309Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.30.2...rel-2.30.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
convolve1d with mode="same" by @tvwenger in https://github.com/pymc-devs/pytensor/pull/1337Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.30.1...rel-2.30.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.30.0...rel-2.30.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
kn helper by @Aarsh-Wankar in https://github.com/pymc-devs/pytensor/pull/1313get_vector_length incorrectly returning for shared variable without static shape by @Abhinav-Khot in https://github.com/pymc-devs/pytensor/pull/1295NotImplementedError from grad by @Aarsh-Wankar in https://github.com/pymc-devs/pytensor/pull/1314arange by @Abhinav-Khot in https://github.com/pymc-devs/pytensor/pull/1302Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.29.0...rel-2.30.0
Deprecate batched blas helpers by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1215
<!-- Release notes generated using configuration in .github/release.yml at main -->
atleast_Nd to accept only one positional argument by @Abhinav-Khot in https://github.com/pymc-devs/pytensor/pull/1291Unbroadcast Op by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1286vecdot, vecmat and matvec helpers by @twiecki in https://github.com/pymc-devs/pytensor/pull/1250linalg.solve assume_a cases by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1273einsum failing with repeated inputs by @Abhinav-Khot in https://github.com/pymc-devs/pytensor/pull/1260transpose by @velochy in https://github.com/pymc-devs/pytensor/pull/1258scipy.stats by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1268AdvancedIncSubtensor by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1272Scan in different backends by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1281Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.28.3...rel-2.29.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
transposed argument in linalg.solve by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1231Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.28.2...rel-2.28.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
trust_input to function by @Aarsh-Wankar in https://github.com/pymc-devs/pytensor/pull/1206inc_subtensor by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1243Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.28.1...rel-2.28.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
print_shape and print_memory_map option to debugprint by @Aarsh-Wankar in https://github.com/pymc-devs/pytensor/pull/1236overwrite_b=True by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1235local_reshape_to_dimshuffle by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1242Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.28.0...rel-2.28.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
method of covariance decomposition by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1203tensordot when needed by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1202Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.27.1...rel-2.28.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
1 ** x = 1 by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/1179Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.27.0...rel-2.27.1
Deprecate redundant utilities for extracting constants by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1046
<!-- Release notes generated using configuration in .github/release.yml at main -->
get_default_mode by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1166Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.26.4...rel-2.27.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
broadcast_tensor and vmap by @Ch0ronomato in https://github.com/pymc-devs/pytensor/pull/1032verify_grad by @aibit0111 in https://github.com/pymc-devs/pytensor/pull/1093Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.26.3...rel-2.26.4
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
on_unused_input for string parameter names in eval by @tvwenger in https://github.com/pymc-devs/pytensor/pull/1085Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.26.2...rel-2.26.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
local_div_switch_sink rewrite by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1080Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.26.1...rel-2.26.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.26.0...rel-2.26.1
Reduce overhead of function call and deprecate rarely used utilities by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1024
<!-- Release notes generated using configuration in .github/release.yml at main -->
_sum_grad_over_bcasted_dims by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1036local_[mul|div]_switch_sink rewrite by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1059local_useless_slice and local_reduce_join rewrites by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1057variadic_add and variadic_mul helpers by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/932_asarray by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1025blas__ldflags tests by @lucianopaz in https://github.com/pymc-devs/pytensor/pull/1056Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.25.5...rel-2.26.0
Do not use deprecated find_executable by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1000
<!-- Release notes generated using configuration in .github/release.yml at main -->
find_executable by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/1000Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.25.4...rel-2.25.5
Your coding agent can read these notes before it upgrades. Set up the MCP server →