pytensor 3.2.0__tar.gz → 3.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. {pytensor-3.2.0/pytensor.egg-info → pytensor-3.2.2}/PKG-INFO +1 -1
  2. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/basic.rst +4 -0
  3. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/_version.py +3 -3
  4. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/scalar.py +11 -0
  5. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/subtensor.py +2 -2
  6. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/tensor_basic.py +4 -1
  7. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/subtensor.py +1 -2
  8. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/subtensor.py +3 -10
  9. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/math.py +34 -0
  10. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/math.py +6 -0
  11. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/subtensor.py +29 -59
  12. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/subtensor_lift.py +5 -0
  13. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/subtensor.py +25 -23
  14. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/math.py +4 -0
  15. {pytensor-3.2.0 → pytensor-3.2.2/pytensor.egg-info}/PKG-INFO +1 -1
  16. {pytensor-3.2.0 → pytensor-3.2.2}/LICENSE.txt +0 -0
  17. {pytensor-3.2.0 → pytensor-3.2.2}/MANIFEST.in +0 -0
  18. {pytensor-3.2.0 → pytensor-3.2.2}/README.rst +0 -0
  19. {pytensor-3.2.0 → pytensor-3.2.2}/doc/.templates/PLACEHOLDER +0 -0
  20. {pytensor-3.2.0 → pytensor-3.2.2}/doc/.templates/layout.html +0 -0
  21. {pytensor-3.2.0 → pytensor-3.2.2}/doc/.templates/nb-badges.html +0 -0
  22. {pytensor-3.2.0 → pytensor-3.2.2}/doc/.templates/rendered_citation.html +0 -0
  23. {pytensor-3.2.0 → pytensor-3.2.2}/doc/LICENSE.txt +0 -0
  24. {pytensor-3.2.0 → pytensor-3.2.2}/doc/README.md +0 -0
  25. {pytensor-3.2.0 → pytensor-3.2.2}/doc/_drafts/benchmark_mlx_v_jax_corrected.ipynb +0 -0
  26. {pytensor-3.2.0 → pytensor-3.2.2}/doc/_thumbnails/autodiff/vector_jacobian_product.png +0 -0
  27. {pytensor-3.2.0 → pytensor-3.2.2}/doc/acknowledgement.rst +0 -0
  28. {pytensor-3.2.0 → pytensor-3.2.2}/doc/bcast.png +0 -0
  29. {pytensor-3.2.0 → pytensor-3.2.2}/doc/bcast.svg +0 -0
  30. {pytensor-3.2.0 → pytensor-3.2.2}/doc/blog.md +0 -0
  31. {pytensor-3.2.0 → pytensor-3.2.2}/doc/conf.py +0 -0
  32. {pytensor-3.2.0 → pytensor-3.2.2}/doc/core_development_guide.rst +0 -0
  33. {pytensor-3.2.0 → pytensor-3.2.2}/doc/css.inc +0 -0
  34. {pytensor-3.2.0 → pytensor-3.2.2}/doc/dev_start_guide.rst +0 -0
  35. {pytensor-3.2.0 → pytensor-3.2.2}/doc/environment.yml +0 -0
  36. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/apply.png +0 -0
  37. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/apply.svg +0 -0
  38. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/apply2.svg +0 -0
  39. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/creating_a_c_op.rst +0 -0
  40. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  41. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/creating_an_op.rst +0 -0
  42. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/ctype.rst +0 -0
  43. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/extending_faq.rst +0 -0
  44. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/extending_pytensor_solution_1.py +0 -0
  45. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/graph_rewriting.rst +0 -0
  46. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/graphstructures.rst +0 -0
  47. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/index.rst +0 -0
  48. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/inplace.rst +0 -0
  49. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/op.rst +0 -0
  50. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/other_ops.rst +0 -0
  51. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  52. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  53. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/pipeline.rst +0 -0
  54. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/scan.rst +0 -0
  55. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/tips.rst +0 -0
  56. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/type.rst +0 -0
  57. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/unification_kanren.rst +0 -0
  58. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/unittest.rst +0 -0
  59. {pytensor-3.2.0 → pytensor-3.2.2}/doc/extending/using_params.rst +0 -0
  60. {pytensor-3.2.0 → pytensor-3.2.2}/doc/faq.rst +0 -0
  61. {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/applications/normalizing_flows_in_pytensor.ipynb +0 -0
  62. {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/applications/tiny_transformer_llm.ipynb +0 -0
  63. {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/autodiff/vector_jacobian_product.ipynb +0 -0
  64. {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/introduction/pytensor_intro.ipynb +0 -0
  65. {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/optimize/root.ipynb +0 -0
  66. {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/page_footer.md +0 -0
  67. {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
  68. {pytensor-3.2.0 → pytensor-3.2.2}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
  69. {pytensor-3.2.0 → pytensor-3.2.2}/doc/generate_dtype_tensor_table.py +0 -0
  70. {pytensor-3.2.0 → pytensor-3.2.2}/doc/glossary.rst +0 -0
  71. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/Elman_srnn.png +0 -0
  72. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/PyTensor.png +0 -0
  73. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/PyTensor_RGB.svg +0 -0
  74. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/PyTensor_logo.png +0 -0
  75. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/binder.svg +0 -0
  76. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/blocksparse.png +0 -0
  77. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/colab.svg +0 -0
  78. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/github.svg +0 -0
  79. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/lstm.png +0 -0
  80. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/lstm_memorycell.png +0 -0
  81. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/talk2010.gif +0 -0
  82. {pytensor-3.2.0 → pytensor-3.2.2}/doc/images/talk2010.png +0 -0
  83. {pytensor-3.2.0 → pytensor-3.2.2}/doc/index.rst +0 -0
  84. {pytensor-3.2.0 → pytensor-3.2.2}/doc/install.rst +0 -0
  85. {pytensor-3.2.0 → pytensor-3.2.2}/doc/internal/how_to_release.rst +0 -0
  86. {pytensor-3.2.0 → pytensor-3.2.2}/doc/internal/index.rst +0 -0
  87. {pytensor-3.2.0 → pytensor-3.2.2}/doc/internal/metadocumentation.rst +0 -0
  88. {pytensor-3.2.0 → pytensor-3.2.2}/doc/introduction.rst +0 -0
  89. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/debugmode.rst +0 -0
  90. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/function.rst +0 -0
  91. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/index.rst +0 -0
  92. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/io.rst +0 -0
  93. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/mode.rst +0 -0
  94. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/nanguardmode.rst +0 -0
  95. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/opfromgraph.rst +0 -0
  96. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/ops.rst +0 -0
  97. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/profilemode.rst +0 -0
  98. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/compile/shared.rst +0 -0
  99. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/config.rst +0 -0
  100. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  101. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  102. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  103. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  104. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  105. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  106. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  107. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/mlp.html +0 -0
  108. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/mlp.png +0 -0
  109. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/mlp2.html +0 -0
  110. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  111. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/mlp2.png +0 -0
  112. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/ofg.html +0 -0
  113. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/examples/ofg2.html +0 -0
  114. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index.ipynb +0 -0
  115. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index.rst +0 -0
  116. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  117. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  118. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  119. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  120. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/features.rst +0 -0
  121. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/fgraph.rst +0 -0
  122. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/graph.rst +0 -0
  123. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/index.rst +0 -0
  124. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/op.rst +0 -0
  125. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/replace.rst +0 -0
  126. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/type.rst +0 -0
  127. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/graph/utils.rst +0 -0
  128. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/index.rst +0 -0
  129. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/misc/pkl_utils.rst +0 -0
  130. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/printing.rst +0 -0
  131. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/scalar/index.rst +0 -0
  132. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/scan.rst +0 -0
  133. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/sparse/index.rst +0 -0
  134. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/sparse/sandbox.rst +0 -0
  135. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/basic_opt.rst +0 -0
  136. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/bcast.png +0 -0
  137. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/bcast.svg +0 -0
  138. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/elemwise.rst +0 -0
  139. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/extra_ops.rst +0 -0
  140. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/fft.rst +0 -0
  141. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/functional.rst +0 -0
  142. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/index.rst +0 -0
  143. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/io.rst +0 -0
  144. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/linalg.rst +0 -0
  145. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/math_opt.rst +0 -0
  146. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/nlinalg.rst +0 -0
  147. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/optimize.rst +0 -0
  148. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/plot_fft.png +0 -0
  149. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/random.rst +0 -0
  150. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/slinalg.rst +0 -0
  151. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/tensor/utils.rst +0 -0
  152. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/typed_list.rst +0 -0
  153. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/index.md +0 -0
  154. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/linalg.md +0 -0
  155. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/math.md +0 -0
  156. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/module_functions.md +0 -0
  157. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/random.md +0 -0
  158. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/signal.md +0 -0
  159. {pytensor-3.2.0 → pytensor-3.2.2}/doc/library/xtensor/type.md +0 -0
  160. {pytensor-3.2.0 → pytensor-3.2.2}/doc/links.rst +0 -0
  161. {pytensor-3.2.0 → pytensor-3.2.2}/doc/optimizations.rst +0 -0
  162. {pytensor-3.2.0 → pytensor-3.2.2}/doc/pylintrc +0 -0
  163. {pytensor-3.2.0 → pytensor-3.2.2}/doc/robots.txt +0 -0
  164. {pytensor-3.2.0 → pytensor-3.2.2}/doc/troubleshooting.rst +0 -0
  165. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/adding.rst +0 -0
  166. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/adding_solution_1.py +0 -0
  167. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/aliasing.rst +0 -0
  168. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/apply.png +0 -0
  169. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/apply.svg +0 -0
  170. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/bcast.png +0 -0
  171. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/broadcasting.rst +0 -0
  172. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/conditions.rst +0 -0
  173. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/debug_faq.rst +0 -0
  174. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/dlogistic.png +0 -0
  175. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/examples.rst +0 -0
  176. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/faq_tutorial.rst +0 -0
  177. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/gradients.rst +0 -0
  178. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/index.rst +0 -0
  179. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/loading_and_saving.rst +0 -0
  180. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/logistic.gp +0 -0
  181. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/logistic.png +0 -0
  182. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/loop.rst +0 -0
  183. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/loop_solution_1.py +0 -0
  184. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/modes.rst +0 -0
  185. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/modes_solution_1.py +0 -0
  186. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/multi_cores.rst +0 -0
  187. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/nan_tutorial.rst +0 -0
  188. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/pics/d3viz.png +0 -0
  189. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  190. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  191. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  192. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/printing_drawing.rst +0 -0
  193. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/prng.rst +0 -0
  194. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/profiling.rst +0 -0
  195. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/profiling_example.py +0 -0
  196. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/profiling_example_out.prof +0 -0
  197. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/shape_info.rst +0 -0
  198. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/sparse.rst +0 -0
  199. {pytensor-3.2.0 → pytensor-3.2.2}/doc/tutorial/symbolic_graphs.rst +0 -0
  200. {pytensor-3.2.0 → pytensor-3.2.2}/doc/user_guide.rst +0 -0
  201. {pytensor-3.2.0 → pytensor-3.2.2}/pyproject.toml +0 -0
  202. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/__init__.py +0 -0
  203. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/_sparse_lazy.py +0 -0
  204. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/__init__.py +0 -0
  205. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/alloc.py +0 -0
  206. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/blockwise.py +0 -0
  207. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/core.py +0 -0
  208. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/diagonal.py +0 -0
  209. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/dimshuffle.py +0 -0
  210. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/dot.py +0 -0
  211. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/elemwise.py +0 -0
  212. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/orthogonal.py +0 -0
  213. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/permutation.py +0 -0
  214. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/positive_definite.py +0 -0
  215. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/reshape.py +0 -0
  216. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/selection.py +0 -0
  217. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/shape.py +0 -0
  218. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/specify.py +0 -0
  219. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/subtensor.py +0 -0
  220. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/symmetric.py +0 -0
  221. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/assumptions/triangular.py +0 -0
  222. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/basic.py +0 -0
  223. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/bin/__init__.py +0 -0
  224. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/bin/pytensor_cache.py +0 -0
  225. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/breakpoint.py +0 -0
  226. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/__init__.py +0 -0
  227. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/aliasing.py +0 -0
  228. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/builders.py +0 -0
  229. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/compiledir.py +0 -0
  230. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/compilelock.py +0 -0
  231. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/__init__.py +0 -0
  232. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/debugmode.py +0 -0
  233. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/dump.py +0 -0
  234. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/monitormode.py +0 -0
  235. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/nanguardmode.py +0 -0
  236. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/debug/profiling.py +0 -0
  237. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/executor.py +0 -0
  238. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/inner_function.py +0 -0
  239. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/io.py +0 -0
  240. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/maker.py +0 -0
  241. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/mode.py +0 -0
  242. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/ops.py +0 -0
  243. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/rebuild.py +0 -0
  244. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/rewriting.py +0 -0
  245. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/compile/sharedvalue.py +0 -0
  246. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/configdefaults.py +0 -0
  247. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/configparser.py +0 -0
  248. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/__init__.py +0 -0
  249. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  250. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/css/d3viz.css +0 -0
  251. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/d3viz.py +0 -0
  252. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/formatting.py +0 -0
  253. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/html/template.html +0 -0
  254. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  255. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  256. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/js/d3viz.js +0 -0
  257. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  258. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  259. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/gradient.py +0 -0
  260. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/__init__.py +0 -0
  261. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/basic.py +0 -0
  262. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/destroyhandler.py +0 -0
  263. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/features.py +0 -0
  264. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/fg.py +0 -0
  265. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/null_type.py +0 -0
  266. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/op.py +0 -0
  267. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/replace.py +0 -0
  268. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/__init__.py +0 -0
  269. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/basic.py +0 -0
  270. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/db.py +0 -0
  271. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/kanren.py +0 -0
  272. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/reachability.py +0 -0
  273. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/unify.py +0 -0
  274. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/rewriting/utils.py +0 -0
  275. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/traversal.py +0 -0
  276. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/type.py +0 -0
  277. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/graph/utils.py +0 -0
  278. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/ifelse.py +0 -0
  279. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/ipython.py +0 -0
  280. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/__init__.py +0 -0
  281. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/basic.py +0 -0
  282. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/__init__.py +0 -0
  283. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/basic.py +0 -0
  284. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  285. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  286. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/cmodule.py +0 -0
  287. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/cutils.py +0 -0
  288. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/cvm.py +0 -0
  289. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/exceptions.py +0 -0
  290. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/interface.py +0 -0
  291. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/lazylinker_c.py +0 -0
  292. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/op.py +0 -0
  293. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/params_type.py +0 -0
  294. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/c/type.py +0 -0
  295. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/__init__.py +0 -0
  296. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/__init__.py +0 -0
  297. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/basic.py +0 -0
  298. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/blas.py +0 -0
  299. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/blockwise.py +0 -0
  300. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/einsum.py +0 -0
  301. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  302. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  303. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/__init__.py +0 -0
  304. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/constructors.py +0 -0
  305. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/decomposition.py +0 -0
  306. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/inverse.py +0 -0
  307. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/products.py +0 -0
  308. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/solvers.py +0 -0
  309. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/linalg/summary.py +0 -0
  310. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/math.py +0 -0
  311. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/pad.py +0 -0
  312. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/random.py +0 -0
  313. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/scan.py +0 -0
  314. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/shape.py +0 -0
  315. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
  316. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
  317. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/sort.py +0 -0
  318. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/dispatch/sparse.py +0 -0
  319. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/linker.py +0 -0
  320. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/jax/ops.py +0 -0
  321. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/__init__.py +0 -0
  322. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/__init__.py +0 -0
  323. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/basic.py +0 -0
  324. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/blas.py +0 -0
  325. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/blockwise.py +0 -0
  326. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/einsum.py +0 -0
  327. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/elemwise.py +0 -0
  328. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/extra_ops.py +0 -0
  329. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/__init__.py +0 -0
  330. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/decomposition.py +0 -0
  331. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/inverse.py +0 -0
  332. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/products.py +0 -0
  333. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/solvers.py +0 -0
  334. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/linalg/summary.py +0 -0
  335. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/math.py +0 -0
  336. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/pad.py +0 -0
  337. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/scalar.py +0 -0
  338. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/shape.py +0 -0
  339. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/signal/__init__.py +0 -0
  340. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/signal/conv.py +0 -0
  341. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/sort.py +0 -0
  342. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/dispatch/tensor_basic.py +0 -0
  343. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/mlx/linker.py +0 -0
  344. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/__init__.py +0 -0
  345. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/cache.py +0 -0
  346. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/__init__.py +0 -0
  347. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/_llvmlite_self_ref.py +0 -0
  348. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/_patch_pointer_add.py +0 -0
  349. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/basic.py +0 -0
  350. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/blockwise.py +0 -0
  351. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/compile_ops.py +0 -0
  352. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  353. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/elemwise.py +0 -0
  354. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  355. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
  356. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
  357. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/constructors.py +0 -0
  358. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
  359. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
  360. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/dispatch.py +0 -0
  361. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/eigen.py +0 -0
  362. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
  363. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
  364. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/qr.py +0 -0
  365. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/qz.py +0 -0
  366. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/schur.py +0 -0
  367. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/decomposition/svd.py +0 -0
  368. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/inverse.py +0 -0
  369. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/products.py +0 -0
  370. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/__init__.py +0 -0
  371. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/cholesky.py +0 -0
  372. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/dispatch.py +0 -0
  373. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/general.py +0 -0
  374. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/hermitian.py +0 -0
  375. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/linear_control.py +0 -0
  376. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/lu_solve.py +0 -0
  377. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/posdef.py +0 -0
  378. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/symmetric.py +0 -0
  379. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/triangular.py +0 -0
  380. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/tridiagonal.py +0 -0
  381. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/solvers/utils.py +0 -0
  382. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/summary.py +0 -0
  383. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
  384. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/random.py +0 -0
  385. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/scalar.py +0 -0
  386. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/scan.py +0 -0
  387. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/shape.py +0 -0
  388. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
  389. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
  390. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/sort.py +0 -0
  391. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/sparse/__init__.py +0 -0
  392. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/sparse/basic.py +0 -0
  393. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/sparse/math.py +0 -0
  394. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/sparse/variable.py +0 -0
  395. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/string_codegen.py +0 -0
  396. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/subtensor.py +0 -0
  397. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
  398. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/typed_list.py +0 -0
  399. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
  400. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/numba/linker.py +0 -0
  401. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
  402. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  403. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/blas.py +0 -0
  404. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
  405. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  406. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
  407. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/linalg/__init__.py +0 -0
  408. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/linalg/decomposition.py +0 -0
  409. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/linalg/inverse.py +0 -0
  410. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/linalg/products.py +0 -0
  411. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/linalg/summary.py +0 -0
  412. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/math.py +0 -0
  413. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  414. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/shape.py +0 -0
  415. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/dispatch/sort.py +0 -0
  416. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/pytorch/linker.py +0 -0
  417. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/utils.py +0 -0
  418. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/link/vm.py +0 -0
  419. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/__init__.py +0 -0
  420. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/check_blas.py +0 -0
  421. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/check_blas_many.sh +0 -0
  422. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/check_duplicate_key.py +0 -0
  423. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  424. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/elemwise_time_test.py +0 -0
  425. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/frozendict.py +0 -0
  426. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/may_share_memory.py +0 -0
  427. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/ordered_set.py +0 -0
  428. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/misc/pkl_utils.py +0 -0
  429. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/npy_2_compat.py +0 -0
  430. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/printing.py +0 -0
  431. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/py.typed +0 -0
  432. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/raise_op.py +0 -0
  433. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/__init__.py +0 -0
  434. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/basic.py +0 -0
  435. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  436. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  437. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/c_code/gamma.c +0 -0
  438. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/c_code/incbet.c +0 -0
  439. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/loop.py +0 -0
  440. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scalar/sharedvar.py +0 -0
  441. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/__init__.py +0 -0
  442. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/basic.py +0 -0
  443. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/checkpoints.py +0 -0
  444. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/op.py +0 -0
  445. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/__init__.py +0 -0
  446. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/db.py +0 -0
  447. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/inner_graph.py +0 -0
  448. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/inplace.py +0 -0
  449. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/io.py +0 -0
  450. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/merge.py +0 -0
  451. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/push_out.py +0 -0
  452. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/trace.py +0 -0
  453. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/rewriting/utils.py +0 -0
  454. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/scan_perform.pyx +0 -0
  455. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/scan_perform_ext.py +0 -0
  456. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/utils.py +0 -0
  457. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/scan/views.py +0 -0
  458. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/__init__.py +0 -0
  459. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/basic.py +0 -0
  460. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/linalg.py +0 -0
  461. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/math.py +0 -0
  462. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/rewriting.py +0 -0
  463. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/sharedvar.py +0 -0
  464. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/type.py +0 -0
  465. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/utils.py +0 -0
  466. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/sparse/variable.py +0 -0
  467. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/__init__.py +0 -0
  468. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/basic.py +0 -0
  469. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/__init__.py +0 -0
  470. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/_core.py +0 -0
  471. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/batched.py +0 -0
  472. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/blas_c.py +0 -0
  473. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/c_code/__init__.py +0 -0
  474. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/c_code/alt_blas_common.h +0 -0
  475. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/c_code/alt_blas_template.c +0 -0
  476. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/c_code/blas_headers.py +0 -0
  477. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/c_code/codegen.py +0 -0
  478. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/gemm.py +0 -0
  479. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/gemv.py +0 -0
  480. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blas/ger.py +0 -0
  481. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/blockwise.py +0 -0
  482. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/einsum.py +0 -0
  483. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/elemwise.py +0 -0
  484. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/elemwise_cgen.py +0 -0
  485. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/exceptions.py +0 -0
  486. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/extra_ops.py +0 -0
  487. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/fft.py +0 -0
  488. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/fourier.py +0 -0
  489. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/functional.py +0 -0
  490. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/interpolate.py +0 -0
  491. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/__init__.py +0 -0
  492. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/_lazy.py +0 -0
  493. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/constructors.py +0 -0
  494. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/__init__.py +0 -0
  495. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/cholesky.py +0 -0
  496. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/eigen.py +0 -0
  497. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/lu.py +0 -0
  498. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/qr.py +0 -0
  499. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/schur.py +0 -0
  500. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/decomposition/svd.py +0 -0
  501. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/dtype_utils.py +0 -0
  502. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/inverse.py +0 -0
  503. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/products.py +0 -0
  504. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/__init__.py +0 -0
  505. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/core.py +0 -0
  506. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/general.py +0 -0
  507. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/linear_control.py +0 -0
  508. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/lstsq.py +0 -0
  509. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/psd.py +0 -0
  510. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/triangular.py +0 -0
  511. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/solvers/tridiagonal.py +0 -0
  512. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/linalg/summary.py +0 -0
  513. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/nlinalg.py +0 -0
  514. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/optimize.py +0 -0
  515. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/pad.py +0 -0
  516. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/__init__.py +0 -0
  517. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/basic.py +0 -0
  518. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/op.py +0 -0
  519. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  520. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/rewriting/basic.py +0 -0
  521. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/rewriting/jax.py +0 -0
  522. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/rewriting/numba.py +0 -0
  523. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/type.py +0 -0
  524. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/utils.py +0 -0
  525. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/random/variable.py +0 -0
  526. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/reshape.py +0 -0
  527. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/__init__.py +0 -0
  528. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/assumptions.py +0 -0
  529. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/basic.py +0 -0
  530. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/blas.py +0 -0
  531. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/blas_c.py +0 -0
  532. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/blockwise.py +0 -0
  533. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/einsum.py +0 -0
  534. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/elemwise.py +0 -0
  535. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/extra_ops.py +0 -0
  536. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/fused_elemwise.py +0 -0
  537. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/jax.py +0 -0
  538. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/__init__.py +0 -0
  539. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/decomposition.py +0 -0
  540. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/inverse.py +0 -0
  541. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/products.py +0 -0
  542. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/solvers.py +0 -0
  543. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/summary.py +0 -0
  544. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/linalg/utils.py +0 -0
  545. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/math.py +0 -0
  546. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/numba.py +0 -0
  547. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/ofg.py +0 -0
  548. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/optimize.py +0 -0
  549. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/reshape.py +0 -0
  550. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/shape.py +0 -0
  551. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/special.py +0 -0
  552. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  553. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/shape.py +0 -0
  554. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/sharedvar.py +0 -0
  555. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/signal/__init__.py +0 -0
  556. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/signal/conv.py +0 -0
  557. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/slinalg.py +0 -0
  558. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/sort.py +0 -0
  559. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/special.py +0 -0
  560. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/symbolic.py +0 -0
  561. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/type.py +0 -0
  562. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/type_other.py +0 -0
  563. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/utils.py +0 -0
  564. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/var.py +0 -0
  565. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/variable.py +0 -0
  566. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/tensor/xlogx.py +0 -0
  567. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/typed_list/__init__.py +0 -0
  568. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/typed_list/basic.py +0 -0
  569. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/typed_list/rewriting.py +0 -0
  570. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/typed_list/type.py +0 -0
  571. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/utils.py +0 -0
  572. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/__init__.py +0 -0
  573. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/basic.py +0 -0
  574. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/indexing.py +0 -0
  575. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/linalg.py +0 -0
  576. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/random/__init__.py +0 -0
  577. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/random/basic.py +0 -0
  578. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/random/type.py +0 -0
  579. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/random/variable.py +0 -0
  580. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/reduction.py +0 -0
  581. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/__init__.py +0 -0
  582. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/basic.py +0 -0
  583. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/indexing.py +0 -0
  584. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/math.py +0 -0
  585. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/reduction.py +0 -0
  586. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/shape.py +0 -0
  587. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/utils.py +0 -0
  588. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/rewriting/vectorization.py +0 -0
  589. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/shape.py +0 -0
  590. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/signal.py +0 -0
  591. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/type.py +0 -0
  592. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor/xtensor/vectorization.py +0 -0
  593. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor.egg-info/SOURCES.txt +0 -0
  594. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor.egg-info/dependency_links.txt +0 -0
  595. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor.egg-info/entry_points.txt +0 -0
  596. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor.egg-info/requires.txt +0 -0
  597. {pytensor-3.2.0 → pytensor-3.2.2}/pytensor.egg-info/top_level.txt +0 -0
  598. {pytensor-3.2.0 → pytensor-3.2.2}/scripts/mypy-failing.txt +0 -0
  599. {pytensor-3.2.0 → pytensor-3.2.2}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
  600. {pytensor-3.2.0 → pytensor-3.2.2}/setup.cfg +0 -0
  601. {pytensor-3.2.0 → pytensor-3.2.2}/setup.py +0 -0
  602. {pytensor-3.2.0 → pytensor-3.2.2}/tests/link/c/c_code/test_cenum.h +0 -0
  603. {pytensor-3.2.0 → pytensor-3.2.2}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  604. {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_basic.py +0 -0
  605. {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_breakpoint.py +0 -0
  606. {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_config.py +0 -0
  607. {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_gradient.py +0 -0
  608. {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_ifelse.py +0 -0
  609. {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_printing.py +0 -0
  610. {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_raise_op.py +0 -0
  611. {pytensor-3.2.0 → pytensor-3.2.2}/tests/test_rop.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytensor
3
- Version: 3.2.0
3
+ Version: 3.2.2
4
4
  Summary: Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
5
5
  Author-email: pymc-devs <pymc.devs@gmail.com>
6
6
  License-Expression: BSD-3-Clause
@@ -1528,6 +1528,10 @@ Mathematical
1528
1528
 
1529
1529
  Returns a variable representing the inverse error function or the inverse complementary error function. `wikipedia <http://en.wikipedia.org/wiki/Error_function#Inverse_functions>`__
1530
1530
 
1531
+ .. function:: ndtri_exp(a)
1532
+
1533
+ Returns a variable representing the inverse of the standard normal CDF evaluated at the exponent of a, computed accurately even where ``exp(a)`` underflows.
1534
+
1531
1535
  .. function:: gamma(a)
1532
1536
 
1533
1537
  Returns a variable representing the gamma function.
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-07-16T16:05:00+0200",
11
+ "date": "2026-07-19T19:39:04+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "5480dc534c09f11c8cc5b0cf66374eabb44f0c6e",
15
- "version": "3.2.0"
14
+ "full-revisionid": "301ed014903acb2d1ed1a34466819cf22f8a3a2b",
15
+ "version": "3.2.2"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -32,6 +32,7 @@ from pytensor.scalar.math import (
32
32
  Ive,
33
33
  Kve,
34
34
  Log1mexp,
35
+ NdtriExp,
35
36
  Psi,
36
37
  TriGamma,
37
38
  )
@@ -270,6 +271,16 @@ def jax_funcify_from_tfp(op, **kwargs):
270
271
  return tfp_jax_op
271
272
 
272
273
 
274
+ @jax_funcify.register(NdtriExp)
275
+ def jax_funcify_NdtriExp(op, **kwargs):
276
+ def ndtri_exp(x):
277
+ # JAX has no ndtri_exp, so this composition loses accuracy where
278
+ # exp(x) underflows
279
+ return jax.scipy.special.ndtri(jnp.exp(x))
280
+
281
+ return ndtri_exp
282
+
283
+
273
284
  @jax_funcify.register(Ive)
274
285
  def jax_funcify_Ive(op, **kwargs):
275
286
  return try_import_tfp_jax_op(op, jax_op_name="bessel_ive")
@@ -59,8 +59,8 @@ def jax_funcify_IncSubtensor(op, node, **kwargs):
59
59
  if len(indices) == 1:
60
60
  indices = indices[0]
61
61
 
62
- if isinstance(op, AdvancedIncSubtensor) and op.idx_list == (0,):
63
- op._check_runtime_broadcasting(node, x, y, indices)
62
+ if isinstance(op, AdvancedIncSubtensor):
63
+ op._check_runtime_broadcast_of_vector_index(node, x, y, indices)
64
64
 
65
65
  return jax_fn(x, indices, y)
66
66
 
@@ -71,7 +71,10 @@ def jax_funcify_ARange(op, node, **kwargs):
71
71
  case (Subtensor(), shape_var, *_) if isinstance(shape_var.owner_op, Shape):
72
72
  constant_args.append(None)
73
73
  case _ if isinstance(arg, Constant):
74
- constant_args.append(arg.value)
74
+ # Cast to the Op's dtype: PyTensor types integer literals (e.g. 0/1 arange
75
+ # start/step) as int8, and jnp.arange bounds-checks stop against the argument dtype,
76
+ # overflowing for stop > 127.
77
+ constant_args.append(np.asarray(arg.value, op.dtype))
75
78
  case _:
76
79
  # TODO: This might be failing without need (e.g., if arg = shape(x)[-1] + 1)!
77
80
  raise NotImplementedError(ARANGE_CONCRETE_VALUE_ERROR)
@@ -97,8 +97,7 @@ def mlx_funcify_AdvancedIncSubtensor(op, node, **kwargs):
97
97
  return x.at[indices].add(y)
98
98
 
99
99
  def advancedincsubtensor(x, y, *ilist, mlx_fn=mlx_fn):
100
- if op.idx_list == (0,):
101
- op._check_runtime_broadcasting(node, x, y, ilist[0])
100
+ op._check_runtime_broadcast_of_vector_index(node, x, y, ilist[0])
102
101
 
103
102
  return mlx_fn(x, ilist, y)
104
103
 
@@ -63,8 +63,6 @@ def pytorch_funcify_IncSubtensor(op, node, **kwargs):
63
63
  def set_subtensor(x, y, *flattened_indices):
64
64
  indices = indices_from_subtensor(flattened_indices, idx_list)
65
65
  check_negative_steps(indices)
66
- if op.idx_list == (0,):
67
- op._check_runtime_broadcasting(node, x, y, indices[0])
68
66
  if not inplace:
69
67
  x = x.clone()
70
68
  x[indices] = y
@@ -77,8 +75,6 @@ def pytorch_funcify_IncSubtensor(op, node, **kwargs):
77
75
  def inc_subtensor(x, y, *flattened_indices):
78
76
  indices = indices_from_subtensor(flattened_indices, idx_list)
79
77
  check_negative_steps(indices)
80
- if op.idx_list == (0,):
81
- op._check_runtime_broadcasting(node, x, y, indices[0])
82
78
  if not inplace:
83
79
  x = x.clone()
84
80
  x[indices] += y
@@ -98,8 +94,7 @@ def pytorch_funcify_AdvancedIncSubtensor(op, node, **kwargs):
98
94
  def adv_set_subtensor(x, y, *flattened_indices):
99
95
  indices = indices_from_subtensor(flattened_indices, idx_list)
100
96
  check_negative_steps(indices)
101
- if op.idx_list == (0,):
102
- op._check_runtime_broadcasting(node, x, y, indices[0])
97
+ op._check_runtime_broadcast_of_vector_index(node, x, y, indices[0])
103
98
  if not inplace:
104
99
  x = x.clone()
105
100
  x[indices] = y.type_as(x)
@@ -112,8 +107,7 @@ def pytorch_funcify_AdvancedIncSubtensor(op, node, **kwargs):
112
107
  def adv_inc_subtensor_no_duplicates(x, y, *flattened_indices):
113
108
  indices = indices_from_subtensor(flattened_indices, idx_list)
114
109
  check_negative_steps(indices)
115
- if op.idx_list == (0,):
116
- op._check_runtime_broadcasting(node, x, y, indices[0])
110
+ op._check_runtime_broadcast_of_vector_index(node, x, y, indices[0])
117
111
  if not inplace:
118
112
  x = x.clone()
119
113
  x[indices] += y.type_as(x)
@@ -131,8 +125,7 @@ def pytorch_funcify_AdvancedIncSubtensor(op, node, **kwargs):
131
125
  indices = indices_from_subtensor(flattened_indices, idx_list)
132
126
  # Not needed because slices aren't supported in this path
133
127
  # check_negative_steps(indices)
134
- if op.idx_list == (0,):
135
- op._check_runtime_broadcasting(node, x, y, indices[0])
128
+ op._check_runtime_broadcast_of_vector_index(node, x, y, indices[0])
136
129
  if not inplace:
137
130
  x = x.clone()
138
131
  x.index_put_(indices, y.type_as(x), accumulate=True)
@@ -268,6 +268,40 @@ class Erfcinv(UnaryScalarOp):
268
268
  erfcinv = Erfcinv(upgrade_to_float_no_complex, name="erfcinv")
269
269
 
270
270
 
271
+ class NdtriExp(UnaryScalarOp):
272
+ """
273
+ Implements the inverse of the standard normal CDF evaluated at the
274
+ exponent of x, `ndtri(exp(x))`, in a way that remains accurate for very
275
+ negative x, where `exp(x)` underflows.
276
+ """
277
+
278
+ monotonic_increasing = True
279
+ nfunc_spec = ("scipy.special.ndtri_exp", 1, 1)
280
+
281
+ def impl(self, x):
282
+ return special.ndtri_exp(x)
283
+
284
+ def pullback(self, inputs, outputs, grads):
285
+ (x,) = inputs
286
+ (z,) = outputs
287
+ (gz,) = grads
288
+ if x.type in complex_types:
289
+ raise NotImplementedError()
290
+ if z.type in discrete_types:
291
+ if x.type in discrete_types:
292
+ return [x.zeros_like(dtype=config.floatX)]
293
+ else:
294
+ return [x.zeros_like()]
295
+
296
+ # d/dx ndtri(exp(x)) = exp(x) / pdf(z), evaluated as sqrt(2 * pi) * exp(x + z ** 2 / 2)
297
+ # so that the underflowing exp(x) and the overflowing 1 / pdf(z) never appear on their own
298
+ cst = np.asarray(np.sqrt(2 * np.pi), dtype=gz.type.dtype)
299
+ return (gz * cst * exp(x + z**2 / 2),)
300
+
301
+
302
+ ndtri_exp = NdtriExp(upgrade_to_float_no_complex, name="ndtri_exp")
303
+
304
+
271
305
  class Owens_t(BinaryScalarOp):
272
306
  nfunc_spec = ("scipy.special.owens_t", 2, 1)
273
307
 
@@ -2372,6 +2372,11 @@ def erfcinv(a):
2372
2372
  """inverse complementary error function"""
2373
2373
 
2374
2374
 
2375
+ @scalar_elemwise
2376
+ def ndtri_exp(a):
2377
+ """inverse standard normal cdf of the exponent of a"""
2378
+
2379
+
2375
2380
  @scalar_elemwise
2376
2381
  def owens_t(h, a):
2377
2382
  """owens t function"""
@@ -4331,6 +4336,7 @@ __all__ = [
4331
4336
  "mod",
4332
4337
  "mul",
4333
4338
  "nan_to_num",
4339
+ "ndtri_exp",
4334
4340
  "neg",
4335
4341
  "neq",
4336
4342
  "not_equal",
@@ -76,7 +76,6 @@ from pytensor.tensor.subtensor import (
76
76
  _is_provably_non_negative,
77
77
  _is_provably_positive,
78
78
  _non_consecutive_adv_indexing,
79
- advanced_inc_subtensor,
80
79
  as_index_literal,
81
80
  flatten_index_variables,
82
81
  get_canonical_form_slice,
@@ -1104,11 +1103,13 @@ def local_useless_inc_subtensor(fgraph, node):
1104
1103
  @register_specialize
1105
1104
  @node_rewriter([AdvancedIncSubtensor])
1106
1105
  def local_set_to_inc_subtensor(fgraph, node):
1107
- r"""
1108
- AdvancedIncSubtensor(x, x[ilist]+other, ilist, set_instead_of_inc=True) ->
1109
- AdvancedIncSubtensor(x, other, ilist, set_instead_of_inc=False)
1106
+ r"""Set of a read at the same indices: ``x[idx].set(x[idx] + other)``.
1110
1107
 
1111
- Only valid when ``ilist`` is duplicate-free: a dense set is last-wins while an
1108
+ .. code::
1109
+
1110
+ x[idx].set(x[idx] + other) -> x[idx].inc(other)
1111
+
1112
+ Only valid when ``idx`` is duplicate-free: a dense set is last-wins while an
1112
1113
  inc accumulates, so duplicate indices would over-count.
1113
1114
 
1114
1115
  TODO FIXME: Why doesn't this apply to all `*IncSubtensor*` `Op`\s? If it
@@ -1136,14 +1137,30 @@ def local_set_to_inc_subtensor(fgraph, node):
1136
1137
  other = addn.inputs[0]
1137
1138
  else:
1138
1139
  return
1139
- if subn.inputs[1] != node.inputs[2] or subn.inputs[0] != node.inputs[0]:
1140
+ # The read has to gather exactly the positions the write stores to: same base,
1141
+ # same axes, same indices. `idx_list` must be compared too -- it is what pins
1142
+ # the indices to their axes, so without it a read of ``x[:, i]`` would match a
1143
+ # write to ``x[i]``.
1144
+ if (
1145
+ subn.inputs[0] != node.inputs[0]
1146
+ or subn.op.idx_list != node.op.idx_list
1147
+ or subn.inputs[1:] != node.inputs[2:]
1148
+ ):
1140
1149
  return
1141
- # set->inc is only valid when ilist is duplicate-free: ``set(x[ilist] + other)``
1142
- # is last-wins at repeated positions, while ``inc(other)`` would accumulate the
1143
- # contributions of every occurrence and over-count them.
1144
- if not _index_provably_unique(node.inputs[2], fgraph):
1150
+ # set->inc is only valid when the written positions are duplicate-free:
1151
+ # ``set(x[idx] + other)`` is last-wins at repeated positions, while
1152
+ # ``inc(other)`` would accumulate the contributions of every occurrence and
1153
+ # over-count them.
1154
+ indices = indices_from_subtensor(node.inputs[2:], node.op.idx_list)
1155
+ if not _advanced_indices_jointly_unique(indices, fgraph):
1145
1156
  return
1146
- ret = advanced_inc_subtensor(node.inputs[0], other, node.inputs[2])
1157
+ new_op = type(node.op)(
1158
+ idx_list=node.op.idx_list,
1159
+ inplace=node.op.inplace,
1160
+ set_instead_of_inc=False,
1161
+ ignore_duplicates=node.op.ignore_duplicates,
1162
+ )
1163
+ ret = new_op(node.inputs[0], other, *node.inputs[2:])
1147
1164
 
1148
1165
  copy_stack_trace(node.outputs, ret)
1149
1166
 
@@ -1341,52 +1358,6 @@ def local_convert_negative_indices(fgraph, node):
1341
1358
  return [new_subtensor]
1342
1359
 
1343
1360
 
1344
- @register_canonicalize
1345
- @register_specialize
1346
- @node_rewriter([AdvancedSubtensor])
1347
- def local_useless_AdvancedSubtensor1(fgraph, node):
1348
- """Remove a leading-axis vector take that selects the full input.
1349
-
1350
- The full input is taken when the index is equivalent to
1351
- ``arange(0, input.shape[0], 1)`` using either an explicit list/vector or
1352
- the `ARange` `Op`.
1353
-
1354
- """
1355
- if node.op.idx_list != (0,):
1356
- # Only the leading integer-vector take (x[ilist])
1357
- return
1358
-
1359
- # This optimization needs ShapeOpt and fgraph.shape_feature
1360
- if not hasattr(fgraph, "shape_feature"):
1361
- return
1362
-
1363
- shape_feature = fgraph.shape_feature
1364
-
1365
- # get length of the indexed tensor along the first axis
1366
- try:
1367
- length = get_scalar_constant_value(
1368
- shape_feature.get_shape(node.inputs[0], 0), only_process_constants=True
1369
- )
1370
- except NotScalarConstantError:
1371
- return False
1372
-
1373
- # get index (which must be a vector by definition)
1374
- idx = node.inputs[1]
1375
-
1376
- # `idx` must be equivalent to [0,1,...,shape[0] - 1] to qualify for
1377
- # this optimization
1378
- if isinstance(idx, Constant):
1379
- idx = idx.value
1380
- if len(idx) != length:
1381
- return False
1382
- if np.any(idx != np.arange(length)):
1383
- return False
1384
- else:
1385
- return False
1386
-
1387
- return [node.inputs[0]]
1388
-
1389
-
1390
1361
  def _arange_index_to_slice(idx):
1391
1362
  """Return the Python ``slice`` equivalent to ``idx`` if it is a constant or
1392
1363
  symbolic arange with non-negative offset, else ``None``.
@@ -2343,8 +2314,7 @@ def local_write_of_write_same_indices(fgraph, node):
2343
2314
  base, a, *inner_idx_vars = inner_x.owner.inputs
2344
2315
 
2345
2316
  # Same indices: idx_list (slice specs) must match and all index
2346
- # variables must be identical. AdvancedIncSubtensor1 has a fixed
2347
- # class-level idx_list = (0,) so the comparison is trivially true.
2317
+ # variables must be identical.
2348
2318
  if node.op.idx_list != inner_x.owner.op.idx_list:
2349
2319
  return
2350
2320
  if not all(o is i for o, i in zip(outer_idx_vars, inner_idx_vars, strict=True)):
@@ -1062,6 +1062,11 @@ def local_subtensor_make_vector(fgraph, node):
1062
1062
  except NotScalarConstantError:
1063
1063
  pass
1064
1064
  elif idx.ndim == 1 and isinstance(idx, Constant):
1065
+ if idx.type.dtype == "bool":
1066
+ # A boolean mask selects the entries it is True at, which is not
1067
+ # what mapping it to positions below would read it as. Leave it
1068
+ # for `bool_idx_to_nonzero` to turn into integer positions.
1069
+ return False
1065
1070
  values = list(map(int, list(idx.value)))
1066
1071
  if len(values) == 1:
1067
1072
  ret = expand_dims(x.owner.inputs[values[0]], axis=0)
@@ -2445,29 +2445,32 @@ class AdvancedIncSubtensor(BaseSubtensor, COp):
2445
2445
  def c_code_cache_version(self):
2446
2446
  return (2,)
2447
2447
 
2448
- def _check_runtime_broadcasting(self, node, x, y, idx) -> None:
2449
- """Raise if ``y`` would silently broadcast against the leading-axis update.
2448
+ def _check_runtime_broadcast_of_vector_index(self, node, x, y, idx) -> None:
2449
+ """Raise if ``x[idx] (+)= y`` would broadcast ``y`` at runtime.
2450
2450
 
2451
- Applies to the leading integer-vector form; ``y`` must already match the
2452
- indexed shape rather than being broadcast at runtime.
2451
+ Only the single integer vector index form is checked, where the update
2452
+ must have shape ``(idx.shape[0], *x.shape[1:])``. Other index forms
2453
+ (boolean masks, multidimensional or multiple indices) are left to the
2454
+ numpy-like broadcasting of the underlying implementation.
2453
2455
  """
2454
- if y.ndim > 0:
2455
- y_pt_bcast = node.inputs[1].broadcastable
2456
-
2457
- if not y_pt_bcast[0] and y.shape[0] == 1 and y.shape[0] != idx.shape[0]:
2458
- # Attempting to broadcast with index
2459
- raise ValueError(self._runtime_broadcast_error_msg)
2460
- if any(
2461
- not y_bcast and y_dim == 1 and y_dim != x_dim
2462
- for y_bcast, y_dim, x_dim in zip(
2463
- reversed(y_pt_bcast),
2464
- reversed(y.shape),
2465
- reversed(x.shape),
2466
- strict=False,
2467
- )
2468
- ):
2469
- # Attempting to broadcast with buffer
2470
- raise ValueError(self._runtime_broadcast_error_msg)
2456
+ if self.idx_list != (0,):
2457
+ return
2458
+ idx_type = node.inputs[2].type
2459
+ if idx_type.ndim != 1 or idx_type.dtype == "bool":
2460
+ return
2461
+
2462
+ y_static_bcast = node.inputs[1].type.broadcastable
2463
+ expected_shape = (idx.shape[0], *x.shape[1:])
2464
+ if any(
2465
+ not y_bcast and y_dim == 1 and expected_dim != 1
2466
+ for y_bcast, y_dim, expected_dim in zip(
2467
+ reversed(y_static_bcast),
2468
+ reversed(y.shape),
2469
+ reversed(expected_shape),
2470
+ strict=False,
2471
+ )
2472
+ ):
2473
+ raise ValueError(self._runtime_broadcast_error_msg)
2471
2474
 
2472
2475
  def __init__(
2473
2476
  self,
@@ -2510,8 +2513,7 @@ class AdvancedIncSubtensor(BaseSubtensor, COp):
2510
2513
  def perform(self, node, inputs, out_):
2511
2514
  x, y, *index_variables = inputs
2512
2515
 
2513
- if self.idx_list == (0,):
2514
- self._check_runtime_broadcasting(node, x, y, index_variables[0])
2516
+ self._check_runtime_broadcast_of_vector_index(node, x, y, index_variables[0])
2515
2517
 
2516
2518
  full_indices = unflatten_index_variables(index_variables, self.idx_list)
2517
2519
 
@@ -151,6 +151,10 @@ def erfcx(): ...
151
151
  def erfinv(): ...
152
152
 
153
153
 
154
+ @_as_xelemwise(ps.ndtri_exp)
155
+ def ndtri_exp(): ...
156
+
157
+
154
158
  @_as_xelemwise(ps.exp)
155
159
  def exp(): ...
156
160
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytensor
3
- Version: 3.2.0
3
+ Version: 3.2.2
4
4
  Summary: Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
5
5
  Author-email: pymc-devs <pymc.devs@gmail.com>
6
6
  License-Expression: BSD-3-Clause
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes