NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3283 most downloaded on PyPI
Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
Last release 3 days ago
15 Sep 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
4 years old
108 releases · first in 2022
One column per quarter.
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
einsum by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/722pad by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/748OpFromGraph wrapper around alloc_diag by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/915Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.25.2...rel-2.25.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.25.1...rel-2.25.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.25.0...rel-2.25.1
<!-- 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.24.2...rel-2.25.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
nan_to_num helper by @Dhruvanshu-Joshi in https://github.com/pymc-devs/pytensor/pull/796make_vector by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/889Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.24.1...rel-2.24.2
✅ Now available on conda-forge after major outage https://github.com/conda-forge/status/issues/181 ✅
✅ Now available on conda-forge after major outage https://github.com/conda-forge/status/issues/181 ✅
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.24.0...rel-2.24.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
tensor.where to allow for case with only condition by @tanish1729 in https://github.com/pymc-devs/pytensor/pull/844stable argument to sorting functions by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/848KroneckerProduct Op by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/822Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.23.0...rel-2.24.0
This PR introduces multiple (long delayed) breaking changes regarding RandomVariables:
<!-- Release notes generated using configuration in .github/release.yml at main -->
RandomVariables:
dist_params = x.owner.inputs[3:] must be updated. A helper RandomVariable method dist_params can be used instead like dist_params = x.owner.op.dist_params(x.owner)RandomVariable Op must now be created for each distinct dtype. Comparisons that don't care about this distinction that used to look like x.owner.op == normal should be replaced by isinstance(x.owner.op, NormalRV)RandomGenerator type. randint, which only worked with RandomState rngs was removed. Use integers instead.size=None is no longer internally converted to size=(). size=() now behaves differently than size=None (just like Numpy)ndims_params and ndim_supp is deprecated in favor of a numpy-like gufunc signature such as (),(p)->(p) for MultinomialRV.ndims_params and ndim_supp are now derived from the signature, and available only as properties of initialized RandomVariable Ops.expand_dims are now introduced for parameters that are being broadcasted internally by the RandomVariable Op, like Elemwise and Blockwise do.OpFromGraph with disconnected/related outputs by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/723slogdet and expose it in linalg module by @theorashid in https://github.com/pymc-devs/pytensor/pull/807Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.22.1...rel-2.23.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
ifelse accesible from root by @Dhruvanshu-Joshi in https://github.com/pymc-devs/pytensor/pull/777Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.22.0...rel-2.22.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
list_of_nodes in favour of applys_between by @Dhruvanshu-Joshi in https://github.com/pymc-devs/pytensor/pull/776local_fill_sink rewrite for multiple output Elemwise Ops by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/773Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.21.0...rel-2.22.0
Remove deprecated bin module by @maresb in https://github.com/pymc-devs/pytensor/pull/726
<!-- Release notes generated using configuration in .github/release.yml at main -->
TopkOp by @mory91 in https://github.com/pymc-devs/pytensor/pull/686set/inc to act on an indexed variable directly by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/730matrix_transpose and .mT helpers by @Dhruvanshu-Joshi in https://github.com/pymc-devs/pytensor/pull/702explicit_graph_inputs by @Dhruvanshu-Joshi in https://github.com/pymc-devs/pytensor/pull/712ufunc_outer like add.outer for binary Elemwise operations by @Dhruvanshu-Joshi in https://github.com/pymc-devs/pytensor/pull/745scan_checkpoints with sequences by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/754specify_broadcastable by @Dhruvanshu-Joshi in https://github.com/pymc-devs/pytensor/pull/710local_pow_to_nested_squaring rewrite more permissive by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/742local_blockwise_alloc by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/751pt.full by @wd60622 in https://github.com/pymc-devs/pytensor/pull/759Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.20.0...rel-2.21.0
Fix PyPy by eliminating deprecated library detection code by @maresb in https://github.com/pymc-devs/pytensor/pull/662
<!-- Release notes generated using configuration in .github/release.yml at main -->
log10 L_op from upcasting by @tvwenger in https://github.com/pymc-devs/pytensor/pull/668Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.19.0...rel-2.20.0
Deprecate ScalarSharedVariable by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/629
<!-- Release notes generated using configuration in .github/release.yml at main -->
nlinalg.norm to match np.linalg.norm signature and functionaly by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/588tensor.special.logit helper by @HarshvirSandhu in https://github.com/pymc-devs/pytensor/pull/645sys.stdout.encoding with sys.getdefaultencoding() by @t-kalinowski in https://github.com/pymc-devs/pytensor/pull/617local_sum_make_vector from introducing forbidden float64 by @tvwenger in https://github.com/pymc-devs/pytensor/pull/659Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.18.6...rel-2.19.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
linalg.block_diag and sparse equivalent by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/576solve usage in psd_solve_with_chol rewrite by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/575vectorize_graph bug when replacements were provided for only some outputs of a node by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/570fortran objects in ScipyGer tag by @lucianopaz in https://github.com/pymc-devs/pytensor/pull/574Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.18.5...rel-2.18.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-2.18.4...rel-2.18.5
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
vectorize_node for CheckAndRaise Op by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/553Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.18.3...rel-2.18.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-2.18.2...rel-2.18.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
infer_static_shape by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/521Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.18.1...rel-2.18.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
COps by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/513Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.18.0...rel-2.18.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
set and inc TensorVariable methods for set_subtensor and inc_subtensor operations by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/494Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.17.4...rel-2.18.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.17.3...rel-2.17.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-2.17.2...rel-2.17.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.17.1...rel-2.17.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
local_pow_to_nested_squaring when static type shape is updated by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/461TensorVariable.__rmatmul__ by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/465__props__ in SVD Op by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/467Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.17.0...rel-2.17.1
<!-- 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.16.3...rel-2.17.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
solve_triangular by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/423Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.16.2...rel-2.16.3
Fix jax deprecated product by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/448
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.16.1...rel-2.16.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
SoftmaxGrad failure with constant dy in numba backend by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/435local_dimshuffle_subtensor rewrite by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/438Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.16.0...rel-2.16.1
Deprecate extract_diag and linalg.trace in favor of numpy look-alikes by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/428
<!-- Release notes generated using configuration in .github/release.yml at main -->
graph.vectorize and Blockwise Op by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/306extract_diag and linalg.trace in favor of numpy look-alikes by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/428Op corresponding to scipy.linalg.solve_discrete_are by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/417gradient.py by @hsinfan1996 in https://github.com/pymc-devs/pytensor/pull/415pytensor.tensor.var to pytensor.tensor.variable by @purna135 in https://github.com/pymc-devs/pytensor/pull/424Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.15.0...rel-2.16.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
shape_unsafe tag to rewrites that can hide shape errors by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/381Alloc by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/390ExtractDiag gradient and numba implementation to higher dimensional inputs by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/389CumOp when axis is None by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/420betainc_grad function by @amyoshino in https://github.com/pymc-devs/pytensor/pull/412ScalarInnerGraphOp.fgraph by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/406Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.14.2...rel-2.15.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.14.1...rel-2.14.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
local_uint_constant_indices rewrite in JAX mode due to XLA bug by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/400local_pow_specialize rewrite by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/402Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.14.0...rel-2.14.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
local_det_chol rewrite by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/393truncated_graph_inputs by @ferrine in https://github.com/pymc-devs/pytensor/pull/394graph_replace and clone_replace by @ferrine in https://github.com/pymc-devs/pytensor/pull/398Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.13.1...rel-2.14.0
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
tag_solve_triangular rewrite by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/383Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.13.0...rel-2.13.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
log_softmax stabilization rewrite to graphs with indexing and expand_dims by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/352boolean_indexing_set_or_inc by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/359expand_dims by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/353Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.12.3...rel-2.13.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.12.2...rel-2.12.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
pydot-ng by @l8l in https://github.com/pymc-devs/pytensor/pull/336Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.12.1...rel-2.12.2
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
gammaincc_grad by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/318Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.12.0...rel-2.12.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
pt.linalg.pinv by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/294pt.tri by @jessegrabowski in https://github.com/pymc-devs/pytensor/pull/302Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.11.3...rel-2.12.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.11.2...rel-2.11.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
log_diff_exp by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/212local_subtensor_rv_lift rewrite bug with vector parameters by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/281Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.11.1...rel-2.11.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.11.0...rel-2.11.1
Fix numpy DeprecationWarning when converting integers to PyTensor Constants by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/238
<!-- Release notes generated using configuration in .github/release.yml at main -->
_print_name to long names by @shreyas3156 in https://github.com/pymc-devs/pytensor/pull/244sgn to sign by @sudarsan2k5 in https://github.com/pymc-devs/pytensor/pull/228eval utility by @Raj-Parekh24 in https://github.com/pymc-devs/pytensor/pull/242get_scalar_constant_value now raises for non-scalar inputs by @shreyas3156 in https://github.com/pymc-devs/pytensor/pull/248NotImplementedError when trying to convert MaskedArrays by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/260set_subtensor by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/267DeprecationWarning when converting integers to PyTensor Constants by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/238Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.10.1...rel-2.11.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.10.0...rel-2.10.1
Fix DeprecationWarning from scipy.sparse.base by @covertg in https://github.com/pymc-devs/pytensor/pull/214
<!-- Release notes generated using configuration in .github/release.yml at main -->
RandomVariables in JAX backend by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/200MaxAndArgmax by @covertg in https://github.com/pymc-devs/pytensor/pull/206Split by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/209Elemwise graphs that have multiple outputs and clients by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/121Subtensor and IncSubtensor dispatcher by @ricardoV94 in https://github.com/pymc-devs/pytensor/pull/211DimShuffle by @aseyboldt in https://github.com/pymc-devs/pytensor/pull/218sigmoid by @SangamSwadiK in https://github.com/pymc-devs/pytensor/pull/202stack type hints by @covertg in https://github.com/pymc-devs/pytensor/pull/205scipy.sparse.base by @covertg in https://github.com/pymc-devs/pytensor/pull/214Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.9.1...rel-2.10.0
[from 2.8.12] Remove deprecated modules by @ferrine in https://github.com/pymc-devs/pytensor/pull/111
<!-- Release notes generated using configuration in .github/release.yml at main -->
ℹ️ Versions 2.8.12 and 2.9.0 did not get released on PyPI or conda-forge due to hiccups in our CI pipeline. The corresponding release notes were merged into the seconds below.
tensor is now name. dtype and shape are now keyword-only arguments in all tensor constructor helpers (tensor, matrix, ...)slogdet for Numba and JAX by @mtsokol in https://github.com/pymc-devs/pytensor/pull/172Join by @michaelosthege in https://github.com/pymc-devs/pytensor/pull/164HalfNormalRV JAX implementation" by @theorashid in https://github.com/pymc-devs/pytensor/pull/129Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.8.11...rel-2.8.12 Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.8.12...rel-2.9.0 Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.9.0...rel-2.9.1
Stop using deprecated generated_jit by @aseyboldt in https://github.com/pymc-devs/pytensor/pull/69
<!-- Release notes generated using configuration in .github/release.yml at main -->
Full Changelog: https://github.com/pymc-devs/pytensor/compare/rel-2.8.10...rel-2.8.11
The project was renamed to _PyTensor_ by @pymc-devs.
mypy v0.991 by @michaelosthege in d88f3f9e6e6892aa56d2cca5d9c12a63f87ceb99The last Aesara release before we forked was 2.8.9 and these were the contributions to aesara-devs/aesara that happened before we forked:
time.clock() to time.perf_counter() in documentation under tutorial/conditions by @ntmkhanh in https://github.com/aesara-devs/aesara/pull/1293kwargs to aesara.graph.basic.clone_get_equiv by @brandonwillard in https://github.com/aesara-devs/aesara/pull/1296TensorType.broadcastable with TensorType.shape by @brandonwillard in https://github.com/aesara-devs/aesara/pull/1297as_symbolic work with sparse matrices by @brandonwillard in https://github.com/aesara-devs/aesara/pull/1298Your coding agent can read these notes before it upgrades. Set up the MCP server →