pytensor 3.1.1__tar.gz → 3.1.3__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.1.1/pytensor.egg-info → pytensor-3.1.3}/PKG-INFO +1 -1
  2. {pytensor-3.1.1 → pytensor-3.1.3}/doc/internal/how_to_release.rst +0 -4
  3. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/config.rst +0 -33
  4. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/_version.py +3 -3
  5. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/builders.py +3 -48
  6. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/profiling.py +1 -59
  7. pytensor-3.1.3/pytensor/compile/inner_function.py +84 -0
  8. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/maker.py +1 -8
  9. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/mode.py +56 -4
  10. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/configdefaults.py +0 -61
  11. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/configparser.py +0 -3
  12. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/gradient.py +1 -1
  13. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/features.py +1 -26
  14. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/basic.py +1 -1
  15. pytensor-3.1.3/pytensor/graph/rewriting/utils.py +116 -0
  16. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/type.py +0 -28
  17. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/basic.py +1 -7
  18. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/cmodule.py +1 -40
  19. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/op.py +0 -1
  20. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/elemwise.py +13 -5
  21. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/printing.py +0 -81
  22. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/basic.py +30 -79
  23. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/op.py +31 -69
  24. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/utils.py +0 -32
  25. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/basic.py +12 -2
  26. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/basic.py +1 -1
  27. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/gemm.py +3 -1
  28. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/elemwise.py +7 -6
  29. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/extra_ops.py +0 -65
  30. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/fourier.py +11 -6
  31. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/inverse.py +3 -1
  32. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/optimize.py +56 -110
  33. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/numba.py +9 -4
  34. pytensor-3.1.3/pytensor/tensor/rewriting/extra_ops.py +64 -0
  35. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/indexed_elemwise.py +119 -47
  36. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/math.py +0 -15
  37. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/optimize.py +2 -2
  38. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/subtensor.py +200 -28
  39. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/subtensor_lift.py +83 -40
  40. {pytensor-3.1.1 → pytensor-3.1.3/pytensor.egg-info}/PKG-INFO +1 -1
  41. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor.egg-info/SOURCES.txt +1 -0
  42. {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_gradient.py +7 -0
  43. pytensor-3.1.1/pytensor/graph/rewriting/utils.py +0 -272
  44. pytensor-3.1.1/pytensor/tensor/rewriting/extra_ops.py +0 -118
  45. {pytensor-3.1.1 → pytensor-3.1.3}/LICENSE.txt +0 -0
  46. {pytensor-3.1.1 → pytensor-3.1.3}/MANIFEST.in +0 -0
  47. {pytensor-3.1.1 → pytensor-3.1.3}/README.rst +0 -0
  48. {pytensor-3.1.1 → pytensor-3.1.3}/doc/.templates/PLACEHOLDER +0 -0
  49. {pytensor-3.1.1 → pytensor-3.1.3}/doc/.templates/layout.html +0 -0
  50. {pytensor-3.1.1 → pytensor-3.1.3}/doc/.templates/nb-badges.html +0 -0
  51. {pytensor-3.1.1 → pytensor-3.1.3}/doc/.templates/rendered_citation.html +0 -0
  52. {pytensor-3.1.1 → pytensor-3.1.3}/doc/LICENSE.txt +0 -0
  53. {pytensor-3.1.1 → pytensor-3.1.3}/doc/README.md +0 -0
  54. {pytensor-3.1.1 → pytensor-3.1.3}/doc/_drafts/benchmark_mlx_v_jax_corrected.ipynb +0 -0
  55. {pytensor-3.1.1 → pytensor-3.1.3}/doc/_thumbnails/autodiff/vector_jacobian_product.png +0 -0
  56. {pytensor-3.1.1 → pytensor-3.1.3}/doc/acknowledgement.rst +0 -0
  57. {pytensor-3.1.1 → pytensor-3.1.3}/doc/bcast.png +0 -0
  58. {pytensor-3.1.1 → pytensor-3.1.3}/doc/bcast.svg +0 -0
  59. {pytensor-3.1.1 → pytensor-3.1.3}/doc/blog.md +0 -0
  60. {pytensor-3.1.1 → pytensor-3.1.3}/doc/conf.py +0 -0
  61. {pytensor-3.1.1 → pytensor-3.1.3}/doc/core_development_guide.rst +0 -0
  62. {pytensor-3.1.1 → pytensor-3.1.3}/doc/css.inc +0 -0
  63. {pytensor-3.1.1 → pytensor-3.1.3}/doc/dev_start_guide.rst +0 -0
  64. {pytensor-3.1.1 → pytensor-3.1.3}/doc/environment.yml +0 -0
  65. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/apply.png +0 -0
  66. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/apply.svg +0 -0
  67. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/apply2.svg +0 -0
  68. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/creating_a_c_op.rst +0 -0
  69. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  70. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/creating_an_op.rst +0 -0
  71. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/ctype.rst +0 -0
  72. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/extending_faq.rst +0 -0
  73. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/extending_pytensor_solution_1.py +0 -0
  74. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/graph_rewriting.rst +0 -0
  75. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/graphstructures.rst +0 -0
  76. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/index.rst +0 -0
  77. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/inplace.rst +0 -0
  78. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/op.rst +0 -0
  79. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/other_ops.rst +0 -0
  80. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  81. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  82. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/pipeline.rst +0 -0
  83. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/scan.rst +0 -0
  84. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/tips.rst +0 -0
  85. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/type.rst +0 -0
  86. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/unittest.rst +0 -0
  87. {pytensor-3.1.1 → pytensor-3.1.3}/doc/extending/using_params.rst +0 -0
  88. {pytensor-3.1.1 → pytensor-3.1.3}/doc/faq.rst +0 -0
  89. {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/applications/normalizing_flows_in_pytensor.ipynb +0 -0
  90. {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/applications/tiny_transformer_llm.ipynb +0 -0
  91. {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/autodiff/vector_jacobian_product.ipynb +0 -0
  92. {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/introduction/pytensor_intro.ipynb +0 -0
  93. {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/optimize/root.ipynb +0 -0
  94. {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/page_footer.md +0 -0
  95. {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
  96. {pytensor-3.1.1 → pytensor-3.1.3}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
  97. {pytensor-3.1.1 → pytensor-3.1.3}/doc/generate_dtype_tensor_table.py +0 -0
  98. {pytensor-3.1.1 → pytensor-3.1.3}/doc/glossary.rst +0 -0
  99. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/Elman_srnn.png +0 -0
  100. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/PyTensor.png +0 -0
  101. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/PyTensor_RGB.svg +0 -0
  102. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/PyTensor_logo.png +0 -0
  103. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/binder.svg +0 -0
  104. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/blocksparse.png +0 -0
  105. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/colab.svg +0 -0
  106. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/github.svg +0 -0
  107. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/lstm.png +0 -0
  108. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/lstm_memorycell.png +0 -0
  109. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/talk2010.gif +0 -0
  110. {pytensor-3.1.1 → pytensor-3.1.3}/doc/images/talk2010.png +0 -0
  111. {pytensor-3.1.1 → pytensor-3.1.3}/doc/index.rst +0 -0
  112. {pytensor-3.1.1 → pytensor-3.1.3}/doc/install.rst +0 -0
  113. {pytensor-3.1.1 → pytensor-3.1.3}/doc/internal/index.rst +0 -0
  114. {pytensor-3.1.1 → pytensor-3.1.3}/doc/internal/metadocumentation.rst +0 -0
  115. {pytensor-3.1.1 → pytensor-3.1.3}/doc/introduction.rst +0 -0
  116. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/debugmode.rst +0 -0
  117. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/function.rst +0 -0
  118. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/index.rst +0 -0
  119. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/io.rst +0 -0
  120. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/mode.rst +0 -0
  121. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/nanguardmode.rst +0 -0
  122. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/opfromgraph.rst +0 -0
  123. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/ops.rst +0 -0
  124. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/profilemode.rst +0 -0
  125. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/compile/shared.rst +0 -0
  126. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  127. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  128. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  129. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  130. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  131. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  132. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  133. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp.html +0 -0
  134. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp.png +0 -0
  135. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp2.html +0 -0
  136. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  137. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp2.png +0 -0
  138. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/ofg.html +0 -0
  139. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/examples/ofg2.html +0 -0
  140. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index.ipynb +0 -0
  141. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index.rst +0 -0
  142. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  143. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  144. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  145. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  146. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/features.rst +0 -0
  147. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/fgraph.rst +0 -0
  148. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/graph.rst +0 -0
  149. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/index.rst +0 -0
  150. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/op.rst +0 -0
  151. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/replace.rst +0 -0
  152. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/type.rst +0 -0
  153. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/graph/utils.rst +0 -0
  154. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/index.rst +0 -0
  155. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/misc/pkl_utils.rst +0 -0
  156. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/printing.rst +0 -0
  157. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/scalar/index.rst +0 -0
  158. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/scan.rst +0 -0
  159. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/sparse/index.rst +0 -0
  160. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/sparse/sandbox.rst +0 -0
  161. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/basic.rst +0 -0
  162. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/basic_opt.rst +0 -0
  163. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/bcast.png +0 -0
  164. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/bcast.svg +0 -0
  165. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/elemwise.rst +0 -0
  166. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/extra_ops.rst +0 -0
  167. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/fft.rst +0 -0
  168. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/functional.rst +0 -0
  169. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/index.rst +0 -0
  170. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/io.rst +0 -0
  171. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/linalg.rst +0 -0
  172. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/math_opt.rst +0 -0
  173. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/nlinalg.rst +0 -0
  174. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/optimize.rst +0 -0
  175. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/plot_fft.png +0 -0
  176. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/random.rst +0 -0
  177. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/slinalg.rst +0 -0
  178. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/tensor/utils.rst +0 -0
  179. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/typed_list.rst +0 -0
  180. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/index.md +0 -0
  181. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/linalg.md +0 -0
  182. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/math.md +0 -0
  183. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/module_functions.md +0 -0
  184. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/random.md +0 -0
  185. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/signal.md +0 -0
  186. {pytensor-3.1.1 → pytensor-3.1.3}/doc/library/xtensor/type.md +0 -0
  187. {pytensor-3.1.1 → pytensor-3.1.3}/doc/links.rst +0 -0
  188. {pytensor-3.1.1 → pytensor-3.1.3}/doc/optimizations.rst +0 -0
  189. {pytensor-3.1.1 → pytensor-3.1.3}/doc/pylintrc +0 -0
  190. {pytensor-3.1.1 → pytensor-3.1.3}/doc/robots.txt +0 -0
  191. {pytensor-3.1.1 → pytensor-3.1.3}/doc/troubleshooting.rst +0 -0
  192. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/adding.rst +0 -0
  193. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/adding_solution_1.py +0 -0
  194. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/aliasing.rst +0 -0
  195. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/apply.png +0 -0
  196. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/apply.svg +0 -0
  197. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/bcast.png +0 -0
  198. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/broadcasting.rst +0 -0
  199. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/conditions.rst +0 -0
  200. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/debug_faq.rst +0 -0
  201. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/dlogistic.png +0 -0
  202. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/examples.rst +0 -0
  203. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/faq_tutorial.rst +0 -0
  204. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/gradients.rst +0 -0
  205. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/index.rst +0 -0
  206. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/loading_and_saving.rst +0 -0
  207. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/logistic.gp +0 -0
  208. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/logistic.png +0 -0
  209. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/loop.rst +0 -0
  210. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/loop_solution_1.py +0 -0
  211. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/modes.rst +0 -0
  212. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/modes_solution_1.py +0 -0
  213. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/multi_cores.rst +0 -0
  214. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/nan_tutorial.rst +0 -0
  215. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/pics/d3viz.png +0 -0
  216. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  217. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  218. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  219. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/printing_drawing.rst +0 -0
  220. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/prng.rst +0 -0
  221. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/profiling.rst +0 -0
  222. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/profiling_example.py +0 -0
  223. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/profiling_example_out.prof +0 -0
  224. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/shape_info.rst +0 -0
  225. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/sparse.rst +0 -0
  226. {pytensor-3.1.1 → pytensor-3.1.3}/doc/tutorial/symbolic_graphs.rst +0 -0
  227. {pytensor-3.1.1 → pytensor-3.1.3}/doc/user_guide.rst +0 -0
  228. {pytensor-3.1.1 → pytensor-3.1.3}/pyproject.toml +0 -0
  229. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/__init__.py +0 -0
  230. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/_sparse_lazy.py +0 -0
  231. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/__init__.py +0 -0
  232. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/alloc.py +0 -0
  233. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/blockwise.py +0 -0
  234. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/core.py +0 -0
  235. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/diagonal.py +0 -0
  236. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/dimshuffle.py +0 -0
  237. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/dot.py +0 -0
  238. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/elemwise.py +0 -0
  239. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/orthogonal.py +0 -0
  240. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/permutation.py +0 -0
  241. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/positive_definite.py +0 -0
  242. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/reshape.py +0 -0
  243. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/selection.py +0 -0
  244. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/shape.py +0 -0
  245. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/specify.py +0 -0
  246. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/subtensor.py +0 -0
  247. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/symmetric.py +0 -0
  248. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/assumptions/triangular.py +0 -0
  249. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/basic.py +0 -0
  250. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/bin/__init__.py +0 -0
  251. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/bin/pytensor_cache.py +0 -0
  252. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/breakpoint.py +0 -0
  253. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/__init__.py +0 -0
  254. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/aliasing.py +0 -0
  255. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/compiledir.py +0 -0
  256. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/compilelock.py +0 -0
  257. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/__init__.py +0 -0
  258. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/debugmode.py +0 -0
  259. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/dump.py +0 -0
  260. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/monitormode.py +0 -0
  261. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/debug/nanguardmode.py +0 -0
  262. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/executor.py +0 -0
  263. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/io.py +0 -0
  264. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/ops.py +0 -0
  265. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/rebuild.py +0 -0
  266. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/rewriting.py +0 -0
  267. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/compile/sharedvalue.py +0 -0
  268. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/__init__.py +0 -0
  269. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  270. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/css/d3viz.css +0 -0
  271. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/d3viz.py +0 -0
  272. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/formatting.py +0 -0
  273. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/html/template.html +0 -0
  274. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  275. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  276. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/js/d3viz.js +0 -0
  277. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  278. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  279. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/__init__.py +0 -0
  280. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/basic.py +0 -0
  281. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/destroyhandler.py +0 -0
  282. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/fg.py +0 -0
  283. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/null_type.py +0 -0
  284. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/op.py +0 -0
  285. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/replace.py +0 -0
  286. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/__init__.py +0 -0
  287. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/db.py +0 -0
  288. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/kanren.py +0 -0
  289. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/reachability.py +0 -0
  290. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/rewriting/unify.py +0 -0
  291. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/traversal.py +0 -0
  292. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/graph/utils.py +0 -0
  293. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/ifelse.py +0 -0
  294. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/ipython.py +0 -0
  295. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/__init__.py +0 -0
  296. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/__init__.py +0 -0
  297. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/basic.py +0 -0
  298. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  299. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  300. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/cutils.py +0 -0
  301. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/cvm.py +0 -0
  302. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/exceptions.py +0 -0
  303. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/interface.py +0 -0
  304. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/lazylinker_c.py +0 -0
  305. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/params_type.py +0 -0
  306. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/c/type.py +0 -0
  307. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/__init__.py +0 -0
  308. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/__init__.py +0 -0
  309. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/basic.py +0 -0
  310. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/blas.py +0 -0
  311. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/blockwise.py +0 -0
  312. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/einsum.py +0 -0
  313. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  314. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  315. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/__init__.py +0 -0
  316. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/constructors.py +0 -0
  317. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/decomposition.py +0 -0
  318. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/inverse.py +0 -0
  319. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/products.py +0 -0
  320. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/solvers.py +0 -0
  321. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/summary.py +0 -0
  322. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/math.py +0 -0
  323. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/pad.py +0 -0
  324. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/random.py +0 -0
  325. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/scalar.py +0 -0
  326. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/scan.py +0 -0
  327. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/shape.py +0 -0
  328. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
  329. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
  330. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/sort.py +0 -0
  331. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/sparse.py +0 -0
  332. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/subtensor.py +0 -0
  333. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
  334. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/linker.py +0 -0
  335. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/jax/ops.py +0 -0
  336. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/__init__.py +0 -0
  337. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/__init__.py +0 -0
  338. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/basic.py +0 -0
  339. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/blas.py +0 -0
  340. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/blockwise.py +0 -0
  341. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/einsum.py +0 -0
  342. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/elemwise.py +0 -0
  343. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/extra_ops.py +0 -0
  344. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/__init__.py +0 -0
  345. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/decomposition.py +0 -0
  346. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/inverse.py +0 -0
  347. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/products.py +0 -0
  348. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/solvers.py +0 -0
  349. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/summary.py +0 -0
  350. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/math.py +0 -0
  351. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/pad.py +0 -0
  352. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/scalar.py +0 -0
  353. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/shape.py +0 -0
  354. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/signal/__init__.py +0 -0
  355. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/signal/conv.py +0 -0
  356. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/sort.py +0 -0
  357. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/subtensor.py +0 -0
  358. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/tensor_basic.py +0 -0
  359. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/mlx/linker.py +0 -0
  360. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/__init__.py +0 -0
  361. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/cache.py +0 -0
  362. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/__init__.py +0 -0
  363. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/basic.py +0 -0
  364. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/blockwise.py +0 -0
  365. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/compile_ops.py +0 -0
  366. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  367. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  368. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
  369. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
  370. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/constructors.py +0 -0
  371. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
  372. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
  373. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/dispatch.py +0 -0
  374. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/eigen.py +0 -0
  375. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
  376. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
  377. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/qr.py +0 -0
  378. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/qz.py +0 -0
  379. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/schur.py +0 -0
  380. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/svd.py +0 -0
  381. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/inverse.py +0 -0
  382. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/products.py +0 -0
  383. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/__init__.py +0 -0
  384. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/cholesky.py +0 -0
  385. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/dispatch.py +0 -0
  386. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/general.py +0 -0
  387. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/hermitian.py +0 -0
  388. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/linear_control.py +0 -0
  389. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/lu_solve.py +0 -0
  390. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/posdef.py +0 -0
  391. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/symmetric.py +0 -0
  392. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/triangular.py +0 -0
  393. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/tridiagonal.py +0 -0
  394. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/utils.py +0 -0
  395. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/summary.py +0 -0
  396. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
  397. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/random.py +0 -0
  398. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/scalar.py +0 -0
  399. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/scan.py +0 -0
  400. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/shape.py +0 -0
  401. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
  402. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
  403. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sort.py +0 -0
  404. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/__init__.py +0 -0
  405. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/basic.py +0 -0
  406. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/math.py +0 -0
  407. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/variable.py +0 -0
  408. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/string_codegen.py +0 -0
  409. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/subtensor.py +0 -0
  410. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
  411. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/typed_list.py +0 -0
  412. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
  413. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/numba/linker.py +0 -0
  414. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
  415. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  416. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/blas.py +0 -0
  417. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
  418. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  419. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
  420. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/__init__.py +0 -0
  421. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/decomposition.py +0 -0
  422. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/inverse.py +0 -0
  423. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/products.py +0 -0
  424. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/summary.py +0 -0
  425. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/math.py +0 -0
  426. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  427. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/shape.py +0 -0
  428. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/sort.py +0 -0
  429. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
  430. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/pytorch/linker.py +0 -0
  431. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/utils.py +0 -0
  432. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/link/vm.py +0 -0
  433. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/__init__.py +0 -0
  434. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/check_blas.py +0 -0
  435. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/check_blas_many.sh +0 -0
  436. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/check_duplicate_key.py +0 -0
  437. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  438. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/elemwise_time_test.py +0 -0
  439. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/frozendict.py +0 -0
  440. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/may_share_memory.py +0 -0
  441. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/ordered_set.py +0 -0
  442. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/misc/pkl_utils.py +0 -0
  443. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/npy_2_compat.py +0 -0
  444. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/py.typed +0 -0
  445. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/raise_op.py +0 -0
  446. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/__init__.py +0 -0
  447. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  448. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  449. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/c_code/gamma.c +0 -0
  450. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/c_code/incbet.c +0 -0
  451. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/loop.py +0 -0
  452. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/math.py +0 -0
  453. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scalar/sharedvar.py +0 -0
  454. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/__init__.py +0 -0
  455. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/basic.py +0 -0
  456. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/checkpoints.py +0 -0
  457. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/__init__.py +0 -0
  458. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/db.py +0 -0
  459. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/inner_graph.py +0 -0
  460. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/inplace.py +0 -0
  461. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/io.py +0 -0
  462. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/merge.py +0 -0
  463. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/push_out.py +0 -0
  464. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/trace.py +0 -0
  465. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/rewriting/utils.py +0 -0
  466. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/scan_perform.pyx +0 -0
  467. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/scan_perform_ext.py +0 -0
  468. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/scan/views.py +0 -0
  469. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/__init__.py +0 -0
  470. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/linalg.py +0 -0
  471. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/math.py +0 -0
  472. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/rewriting.py +0 -0
  473. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/sharedvar.py +0 -0
  474. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/type.py +0 -0
  475. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/utils.py +0 -0
  476. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/sparse/variable.py +0 -0
  477. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/__init__.py +0 -0
  478. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/__init__.py +0 -0
  479. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/_core.py +0 -0
  480. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/batched.py +0 -0
  481. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/blas_c.py +0 -0
  482. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/__init__.py +0 -0
  483. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/alt_blas_common.h +0 -0
  484. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/alt_blas_template.c +0 -0
  485. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/blas_headers.py +0 -0
  486. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/codegen.py +0 -0
  487. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/gemv.py +0 -0
  488. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blas/ger.py +0 -0
  489. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/blockwise.py +0 -0
  490. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/c_code/dimshuffle.c +0 -0
  491. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/einsum.py +0 -0
  492. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/elemwise_cgen.py +0 -0
  493. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/exceptions.py +0 -0
  494. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/fft.py +0 -0
  495. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/functional.py +0 -0
  496. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/interpolate.py +0 -0
  497. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/__init__.py +0 -0
  498. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/_lazy.py +0 -0
  499. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/constructors.py +0 -0
  500. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/__init__.py +0 -0
  501. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/cholesky.py +0 -0
  502. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/eigen.py +0 -0
  503. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/lu.py +0 -0
  504. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/qr.py +0 -0
  505. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/schur.py +0 -0
  506. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/svd.py +0 -0
  507. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/dtype_utils.py +0 -0
  508. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/products.py +0 -0
  509. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/__init__.py +0 -0
  510. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/core.py +0 -0
  511. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/general.py +0 -0
  512. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/linear_control.py +0 -0
  513. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/lstsq.py +0 -0
  514. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/psd.py +0 -0
  515. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/triangular.py +0 -0
  516. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/tridiagonal.py +0 -0
  517. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/linalg/summary.py +0 -0
  518. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/math.py +0 -0
  519. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/nlinalg.py +0 -0
  520. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/pad.py +0 -0
  521. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/__init__.py +0 -0
  522. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/basic.py +0 -0
  523. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/op.py +0 -0
  524. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  525. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/basic.py +0 -0
  526. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/jax.py +0 -0
  527. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/type.py +0 -0
  528. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/utils.py +0 -0
  529. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/random/variable.py +0 -0
  530. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/reshape.py +0 -0
  531. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/__init__.py +0 -0
  532. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/assumptions.py +0 -0
  533. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/basic.py +0 -0
  534. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/blas.py +0 -0
  535. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/blas_c.py +0 -0
  536. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/blockwise.py +0 -0
  537. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/einsum.py +0 -0
  538. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/elemwise.py +0 -0
  539. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/jax.py +0 -0
  540. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/__init__.py +0 -0
  541. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/decomposition.py +0 -0
  542. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/inverse.py +0 -0
  543. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/products.py +0 -0
  544. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/solvers.py +0 -0
  545. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/summary.py +0 -0
  546. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/utils.py +0 -0
  547. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/numba.py +0 -0
  548. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/ofg.py +0 -0
  549. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/reshape.py +0 -0
  550. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/shape.py +0 -0
  551. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/special.py +0 -0
  552. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  553. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/shape.py +0 -0
  554. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/sharedvar.py +0 -0
  555. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/signal/__init__.py +0 -0
  556. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/signal/conv.py +0 -0
  557. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/slinalg.py +0 -0
  558. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/sort.py +0 -0
  559. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/special.py +0 -0
  560. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/subtensor.py +0 -0
  561. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/symbolic.py +0 -0
  562. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/type.py +0 -0
  563. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/type_other.py +0 -0
  564. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/utils.py +0 -0
  565. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/var.py +0 -0
  566. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/variable.py +0 -0
  567. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/tensor/xlogx.py +0 -0
  568. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/typed_list/__init__.py +0 -0
  569. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/typed_list/basic.py +0 -0
  570. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/typed_list/rewriting.py +0 -0
  571. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/typed_list/type.py +0 -0
  572. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/utils.py +0 -0
  573. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/__init__.py +0 -0
  574. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/basic.py +0 -0
  575. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/indexing.py +0 -0
  576. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/linalg.py +0 -0
  577. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/math.py +0 -0
  578. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/random/__init__.py +0 -0
  579. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/random/basic.py +0 -0
  580. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/random/type.py +0 -0
  581. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/random/variable.py +0 -0
  582. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/reduction.py +0 -0
  583. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/__init__.py +0 -0
  584. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/basic.py +0 -0
  585. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/indexing.py +0 -0
  586. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/math.py +0 -0
  587. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/reduction.py +0 -0
  588. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/shape.py +0 -0
  589. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/utils.py +0 -0
  590. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/rewriting/vectorization.py +0 -0
  591. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/shape.py +0 -0
  592. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/signal.py +0 -0
  593. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/type.py +0 -0
  594. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor/xtensor/vectorization.py +0 -0
  595. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor.egg-info/dependency_links.txt +0 -0
  596. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor.egg-info/entry_points.txt +0 -0
  597. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor.egg-info/requires.txt +0 -0
  598. {pytensor-3.1.1 → pytensor-3.1.3}/pytensor.egg-info/top_level.txt +0 -0
  599. {pytensor-3.1.1 → pytensor-3.1.3}/scripts/mypy-failing.txt +0 -0
  600. {pytensor-3.1.1 → pytensor-3.1.3}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
  601. {pytensor-3.1.1 → pytensor-3.1.3}/setup.cfg +0 -0
  602. {pytensor-3.1.1 → pytensor-3.1.3}/setup.py +0 -0
  603. {pytensor-3.1.1 → pytensor-3.1.3}/tests/link/c/c_code/test_cenum.h +0 -0
  604. {pytensor-3.1.1 → pytensor-3.1.3}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  605. {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_basic.py +0 -0
  606. {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_breakpoint.py +0 -0
  607. {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_config.py +0 -0
  608. {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_ifelse.py +0 -0
  609. {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_printing.py +0 -0
  610. {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_raise_op.py +0 -0
  611. {pytensor-3.1.1 → pytensor-3.1.3}/tests/test_rop.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytensor
3
- Version: 3.1.1
3
+ Version: 3.1.3
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
@@ -13,10 +13,6 @@ Update the version number
13
13
 
14
14
  Update the year in the ``PyTensor/LICENSE.txt`` file too, if necessary.
15
15
 
16
- Update the code and the documentation for the pytensor flags
17
- ``warn__ignore_bug_before`` to accept the new version. You must modify the
18
- file ``pytensor/configdefaults.py`` and ``doc/library/config.txt``.
19
-
20
16
  Tag the release
21
17
  ===============
22
18
 
@@ -405,31 +405,6 @@ import ``pytensor`` and print the config variable, as in:
405
405
  raise the exception (i.e. ``'raise'``).
406
406
 
407
407
 
408
- .. attribute:: config.warn__ignore_bug_before
409
-
410
- String value: ``'None'``, ``'all'``, ``'0.3'``, ``'0.4'``, ``'0.4.1'``,
411
- ``'0.5'``, ``'0.6'``, ``'0.7'``, ``'0.8'``, ``'0.8.1'``, ``'0.8.2'``,
412
- ``'0.9'``, ``'0.10'``, ``'1.0'``, ``'1.0.1'``, ``'1.0.2'``, ``'1.0.3'``,
413
- ``'1.0.4'``,``'1.0.5'``
414
-
415
- Default: ``'0.9'``
416
-
417
- When we an PyTensor bug that generated a bad result is fixed, we also make
418
- PyTensor raise a warning when it encounters the same circumstances again. This
419
- helps users determine whether or not said bug has affected past runs, since
420
- one only needs to perform the same runs again with the new version, and one
421
- does not have to understand the PyTensor internals that triggered the bug.
422
-
423
- This flag lets users ignore warnings about old bugs that were
424
- fixed before their first checkout of PyTensor.
425
- You can set its value to the first version of PyTensor
426
- that you used (probably 0.3 or higher)
427
-
428
- ``'None'`` means that all warnings will be displayed.
429
- ``'all'`` means all warnings will be ignored.
430
-
431
- This flag's value cannot be modified during program execution.
432
-
433
408
  .. attribute:: base_compiledir
434
409
 
435
410
  Default: On Windows: ``$LOCALAPPDATA\\PyTensor`` if ``$LOCALAPPDATA`` is defined,
@@ -734,11 +709,3 @@ import ``pytensor`` and print the config variable, as in:
734
709
  The number of traceback stack levels to keep for variables during PyTensor
735
710
  compilation. When this value is greater than zero, it will make PyTensor keep
736
711
  internal stack traces.
737
-
738
- .. attribute:: config.metaopt__verbose
739
-
740
- Int value, default: 0
741
-
742
- The verbosity level of the meta-rewriter: ``0`` for silent, ``1`` to only
743
- warn when PyTensor cannot meta-rewrite an :class:`Op`, ``2`` for full output (e.g.
744
- timings and the rewrites selected).
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-07-03T07:15:26+0200",
11
+ "date": "2026-07-10T22:43:47+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "6b70d2cf2126abb036bbbe0f355e21957936eedf",
15
- "version": "3.1.1"
14
+ "full-revisionid": "4c7f21181b616d2e05310a518c87cc661ba1b97e",
15
+ "version": "3.1.3"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -8,8 +8,7 @@ from collections.abc import Callable, Sequence
8
8
  from copy import copy
9
9
  from functools import partial
10
10
 
11
- from pytensor.compile.io import In, Out
12
- from pytensor.compile.mode import get_mode
11
+ from pytensor.compile.inner_function import HasInnerFunction
13
12
  from pytensor.compile.sharedvalue import SharedVariable
14
13
  from pytensor.gradient import DisconnectedType, disconnected_type, grad, pushforward
15
14
  from pytensor.graph.basic import (
@@ -20,7 +19,7 @@ from pytensor.graph.basic import (
20
19
  )
21
20
  from pytensor.graph.fg import FrozenFunctionGraph, FunctionGraph
22
21
  from pytensor.graph.null_type import NullType
23
- from pytensor.graph.op import HasInnerGraph, Op, io_connection_pattern
22
+ from pytensor.graph.op import Op, io_connection_pattern
24
23
  from pytensor.graph.replace import clone_replace
25
24
  from pytensor.graph.traversal import graph_inputs
26
25
  from pytensor.graph.utils import MissingInputError
@@ -114,7 +113,7 @@ def construct_nominal_fgraph(
114
113
  return fgraph
115
114
 
116
115
 
117
- class OpFromGraph(Op, HasInnerGraph):
116
+ class OpFromGraph(HasInnerFunction, Op):
118
117
  r"""Create an Op from inputs and outputs lists of variables.
119
118
 
120
119
  The signature is similar to :func:`pytensor.function` and the resulting Op's perform will do
@@ -840,50 +839,6 @@ class OpFromGraph(Op, HasInnerGraph):
840
839
 
841
840
  return ret
842
841
 
843
- @property
844
- def fn(self):
845
- """Lazily compile the inner function graph."""
846
- if getattr(self, "_fn", None) is not None:
847
- return self._fn
848
-
849
- # ``op.fgraph`` is already backend-optimized (inplace included): the
850
- # ``ofg_inner_graph`` rewrite ran the backend optimizer on it during the
851
- # outer compile. So we only need to link it. The linker forces
852
- # ``minimum_compile`` back in via its ``required_rewrites``, and (for an
853
- # inner graph) ``minimum_compile`` *is* that inner-graph rewrite -- so we
854
- # exclude ``compile_inner_graph`` to stop it re-baking an already-baked
855
- # graph. ``prepare_fgraph`` still inserts the boundary deepcopies; passing
856
- # ``fgraph=`` avoids a re-clone. Unused inputs (e.g. rng, size) and
857
- # internal-only inplace ops are expected and tolerated.
858
- mode = (
859
- get_mode(None)
860
- .clone(optimizer="minimum_compile")
861
- .excluding("compile_inner_graph")
862
- )
863
- unfrozen_fgraph = self.fgraph.unfreeze()
864
- self._fn = mode.function_maker(
865
- [In(inp, borrow=True) for inp in unfrozen_fgraph.inputs],
866
- [Out(out, borrow=True) for out in unfrozen_fgraph.outputs],
867
- mode,
868
- fgraph=unfrozen_fgraph,
869
- accept_inplace=True,
870
- on_unused_input="ignore",
871
- ).create()
872
- self._fn.trust_input = True
873
-
874
- return self._fn
875
-
876
- @property
877
- def inner_inputs(self):
878
- # A list (not the frozen tuple) so callers that concatenate inner
879
- # inputs/outputs keep list semantics. Read-only views of the immutable
880
- # graph; manipulating them requires a fresh/unfrozen graph.
881
- return list(self.fgraph.inputs)
882
-
883
- @property
884
- def inner_outputs(self):
885
- return list(self.fgraph.outputs)
886
-
887
842
  def clone(self):
888
843
  # The inner graph is immutable (a frozen ``FunctionGraph``), so there is
889
844
  # nothing to deep-clone -- mirror ``Composite.clone``.
@@ -9,7 +9,6 @@ ProfileStats object for runtime and memory profiling.
9
9
  #
10
10
 
11
11
  import atexit
12
- import copy
13
12
  import logging
14
13
  import operator
15
14
  import sys
@@ -54,8 +53,6 @@ _atexit_registered: bool = False
54
53
  def _atexit_print_fn():
55
54
  """Print `ProfileStat` objects in `_atexit_print_list` to `_atexit_print_file`."""
56
55
  if config.profile:
57
- to_sum = []
58
-
59
56
  if config.profiling__destination == "stderr":
60
57
  destination_file = "<stderr>"
61
58
  elif config.profiling__destination == "stdout":
@@ -78,64 +75,9 @@ def _atexit_print_fn():
78
75
  n_ops_to_print=config.profiling__n_ops,
79
76
  n_apply_to_print=config.profiling__n_apply,
80
77
  )
81
-
82
- if ps.show_sum:
83
- to_sum.append(ps)
84
78
  else:
85
79
  # TODO print the name if there is one!
86
80
  print("Skipping empty Profile") # noqa: T201
87
- if len(to_sum) > 1:
88
- # Make a global profile
89
- cum = copy.copy(to_sum[0])
90
- msg = f"Sum of all({len(to_sum)}) printed profiles at exit."
91
- cum.message = msg
92
- for ps in to_sum[1:]:
93
- for attr in [
94
- "compile_time",
95
- "fct_call_time",
96
- "fct_callcount",
97
- "vm_call_time",
98
- "rewriter_time",
99
- "linker_time",
100
- "validate_time",
101
- "import_time",
102
- "linker_node_make_thunks",
103
- ]:
104
- setattr(cum, attr, getattr(cum, attr) + getattr(ps, attr))
105
-
106
- # merge dictionary
107
- for attr in [
108
- "apply_time",
109
- "apply_callcount",
110
- "apply_cimpl",
111
- "variable_shape",
112
- "variable_strides",
113
- "variable_offset",
114
- "linker_make_thunk_time",
115
- ]:
116
- cum_attr = getattr(cum, attr)
117
- for key, val in getattr(ps, attr.items()):
118
- assert key not in cum_attr, (key, cum_attr)
119
- cum_attr[key] = val
120
-
121
- if cum.rewriter_profile and ps.rewriter_profile:
122
- try:
123
- merge = cum.rewriter_profile[0].merge_profile(
124
- cum.rewriter_profile[1], ps.rewriter_profile[1]
125
- )
126
- assert len(merge) == len(cum.rewriter_profile[1])
127
- cum.rewriter_profile = (cum.rewriter_profile[0], merge)
128
- except Exception as e:
129
- print(e) # noqa: T201
130
- cum.rewriter_profile = None
131
- else:
132
- cum.rewriter_profile = None
133
-
134
- cum.summary(
135
- file=f,
136
- n_ops_to_print=config.profiling__n_ops,
137
- n_apply_to_print=config.profiling__n_apply,
138
- )
139
81
 
140
82
  if config.print_global_stats:
141
83
  print_global_stats()
@@ -159,7 +101,7 @@ def print_global_stats():
159
101
  destination_file = config.profiling__destination
160
102
 
161
103
  with extended_open(destination_file, mode="w") as f:
162
- print("=" * 50, file=destination_file)
104
+ print("=" * 50, file=f)
163
105
  print(
164
106
  (
165
107
  "Global stats: ",
@@ -0,0 +1,84 @@
1
+ """Shared machinery for `Op`\\s that execute a lazily linked inner function."""
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from pytensor.compile.io import In, Out
6
+ from pytensor.compile.mode import Mode
7
+ from pytensor.graph.fg import FrozenFunctionGraph, FunctionGraph
8
+ from pytensor.graph.op import HasInnerGraph
9
+ from pytensor.graph.rewriting.basic import SequentialGraphRewriter
10
+ from pytensor.link.basic import Linker
11
+
12
+
13
+ if TYPE_CHECKING:
14
+ from pytensor.compile.function.types import Function
15
+
16
+
17
+ def link_only_mode(linker: str | Linker) -> Mode:
18
+ """A `Mode` that links a graph without rewriting it at all.
19
+
20
+ The bare rewriter also bypasses the ``minimum_compile`` pass the linker
21
+ would otherwise force onto a database query.
22
+ """
23
+ return Mode(linker, SequentialGraphRewriter())
24
+
25
+
26
+ class HasInnerFunction(HasInnerGraph):
27
+ """`HasInnerGraph` op whose ``perform`` runs a lazily linked inner function.
28
+
29
+ The frozen inner graph was already baked for the backend by the
30
+ ``compile_inner_graph`` rewrites during the outer compile, so linking it
31
+ needs no further rewrites (see `link_only_mode`).
32
+
33
+ The linker never comes from the config default mode: ``perform`` only runs
34
+ under the py/c backend family -- JIT backends (numba/jax/...) funcify
35
+ ``op.fgraph`` directly and never call ``perform`` -- so a JIT default must
36
+ not win, and the JIT inner-graph rewrites were never applied to this graph.
37
+ """
38
+
39
+ _fn = None
40
+ fgraph: FrozenFunctionGraph
41
+
42
+ def link_mode(self, impl: str | None) -> Mode:
43
+ """The `Mode` to link the inner function with, given a thunk ``impl``."""
44
+ return link_only_mode("cvm" if impl == "c" else "vm")
45
+
46
+ def link_fgraph(self, fgraph: FunctionGraph, mode: Mode) -> "Function":
47
+ """Link an already-baked inner ``fgraph`` under ``mode``, no rewrites."""
48
+ fn = mode.function_maker(
49
+ [In(inp) for inp in fgraph.inputs],
50
+ [Out(out) for out in fgraph.outputs],
51
+ mode,
52
+ fgraph=fgraph,
53
+ accept_inplace=True,
54
+ on_unused_input="ignore",
55
+ ).create()
56
+ fn.trust_input = True
57
+ return fn
58
+
59
+ def compile_fn(self, mode: Mode) -> "Function":
60
+ """Build the inner function under ``mode`` (override to massage the graph)."""
61
+ return self.link_fgraph(self.fgraph.unfreeze(), mode)
62
+
63
+ @property
64
+ def fn(self) -> "Function":
65
+ if self._fn is None:
66
+ self._fn = self.compile_fn(self.link_mode(None))
67
+ return self._fn
68
+
69
+ def make_thunk(self, node, storage_map, compute_map, no_recycling, impl=None):
70
+ if self._fn is None:
71
+ self._fn = self.compile_fn(self.link_mode(impl))
72
+ return super().make_thunk(
73
+ node, storage_map, compute_map, no_recycling, impl=impl
74
+ )
75
+
76
+ @property
77
+ def inner_inputs(self):
78
+ # Read-only views of the immutable inner graph, as lists so callers
79
+ # that concatenate inputs/outputs keep list semantics.
80
+ return list(self.fgraph.inputs)
81
+
82
+ @property
83
+ def inner_outputs(self):
84
+ return list(self.fgraph.outputs)
@@ -469,14 +469,7 @@ class FunctionMaker:
469
469
  mode=mode,
470
470
  traceback__limit=config.traceback__compile_limit,
471
471
  ):
472
- # Expose the compile mode so inner-graph rewrites can recover
473
- # the active linker's required/incompatible rewrites reliably
474
- # (``config.mode`` is unreliable across nested compilations).
475
- fgraph._compile_mode = mode
476
- try:
477
- rewriter_profile = rewriter(fgraph)
478
- finally:
479
- del fgraph._compile_mode
472
+ rewriter_profile = rewriter(fgraph)
480
473
 
481
474
  end_rewriter = time.perf_counter()
482
475
  rewrite_time = end_rewriter - start_rewriter
@@ -4,6 +4,7 @@ WRITEME
4
4
  """
5
5
 
6
6
  import logging
7
+ import sys
7
8
  import warnings
8
9
  from typing import Any
9
10
 
@@ -279,6 +280,53 @@ optdb.register("CheckStackTrace", CheckStackTraceRewriter(), *_tags, position=-1
279
280
  del _tags
280
281
 
281
282
 
283
+ class _ActiveModeGraphRewriter(GraphRewriter):
284
+ """Wrap a mode's optimizer so applying it records the active compile mode.
285
+
286
+ Exposes the compile mode as ``fgraph._compile_mode`` (see ``get_active_mode``)
287
+ so rewrites can make decisions based on the compile target (fusion split rules,
288
+ inner graph specialization, ...). Stamps the mode when the fgraph does not already carry one, and
289
+ restores the previous state after.
290
+ """
291
+
292
+ def __init__(self, rewriter: GraphRewriter, mode: "Mode"):
293
+ self._rewriter = rewriter
294
+ self._mode = mode
295
+
296
+ def add_requirements(self, fgraph):
297
+ return self._rewriter.add_requirements(fgraph)
298
+
299
+ def apply(self, fgraph, *args, **kwargs):
300
+ # Only stamp when unset, so a mode already established by an outer
301
+ # optimizer run (the outermost compilation, or a nested inner-graph
302
+ # rewrite) wins.
303
+ stamped = getattr(fgraph, "_compile_mode", None) is None
304
+ if stamped:
305
+ fgraph._compile_mode = self._mode
306
+ try:
307
+ return self._rewriter.apply(fgraph, *args, **kwargs)
308
+ finally:
309
+ if stamped:
310
+ del fgraph._compile_mode
311
+
312
+ def print_summary(self, stream=sys.stdout, level=0, depth=-1):
313
+ return self._rewriter.print_summary(stream=stream, level=level, depth=depth)
314
+
315
+ def print_profile(self, stream, prof, level=0):
316
+ # ``GraphRewriter.print_profile`` is a classmethod that raises unless
317
+ # overridden, so delegate to the wrapped rewriter's implementation.
318
+ return self._rewriter.print_profile(stream, prof, level=level)
319
+
320
+ def __getattr__(self, name):
321
+ # Delegate everything else (profiling helpers, query metadata, ...) to the
322
+ # wrapped rewriter. ``__getattr__`` only fires for names not found normally,
323
+ # so the overrides above take precedence. Guard ``_rewriter`` itself to avoid
324
+ # infinite recursion before ``__init__`` has run.
325
+ if name == "_rewriter":
326
+ raise AttributeError(name)
327
+ return getattr(self._rewriter, name)
328
+
329
+
282
330
  class Mode:
283
331
  """A class that specifies the rewrites/optimizations used during function compilation.
284
332
 
@@ -305,7 +353,7 @@ class Mode:
305
353
  def __init__(
306
354
  self,
307
355
  linker: str | Linker | None = None,
308
- optimizer: str | RewriteDatabaseQuery = "default",
356
+ optimizer: str | RewriteDatabaseQuery | GraphRewriter = "default",
309
357
  db: RewriteDatabase = None,
310
358
  ):
311
359
  if linker is None:
@@ -377,9 +425,13 @@ class Mode:
377
425
  @property
378
426
  def optimizer(self):
379
427
  if isinstance(self._optimizer, RewriteDatabaseQuery):
380
- return self.optdb.query(self._optimizer)
428
+ rewriter = self.optdb.query(self._optimizer)
381
429
  else:
382
- return self._optimizer
430
+ rewriter = self._optimizer
431
+ # Stamp this mode as the fgraph's active compile mode while rewriting, so
432
+ # inner-graph rewrites can recover the right linker even when the optimizer
433
+ # is run directly (outside ``FunctionMaker``, e.g. ``mode.optimizer.rewrite(fgraph)``).
434
+ return _ActiveModeGraphRewriter(rewriter, self)
383
435
 
384
436
  def get_linker_optimizer(self, linker, optimizer):
385
437
  if isinstance(linker, str) or linker is None:
@@ -455,7 +507,7 @@ class Mode:
455
507
 
456
508
  C = Mode("c", "fast_run")
457
509
  CVM = Mode("cvm", "fast_run")
458
- VM = (Mode("vm", "fast_run"),)
510
+ VM = Mode("vm", "fast_run")
459
511
 
460
512
  NUMBA = Mode(
461
513
  NumbaLinker(),
@@ -65,26 +65,6 @@ def _filter_mode(val):
65
65
  )
66
66
 
67
67
 
68
- def _split_version(version):
69
- """
70
- Take version as a dot-separated string, return a tuple of int
71
- """
72
- return tuple(int(i) for i in version.split("."))
73
-
74
-
75
- def _warn_default(version):
76
- """
77
- Return True iff we should warn about bugs fixed after a given version.
78
- """
79
- if config.warn__ignore_bug_before == "None":
80
- return True
81
- if config.warn__ignore_bug_before == "all":
82
- return False
83
- if _split_version(config.warn__ignore_bug_before) >= _split_version(version):
84
- return False
85
- return True
86
-
87
-
88
68
  def _is_valid_check_preallocated_output_param(param):
89
69
  if not isinstance(param, str):
90
70
  return False
@@ -591,47 +571,6 @@ def add_traceback_configvars():
591
571
 
592
572
 
593
573
  def add_error_and_warning_configvars():
594
- ###
595
- # To disable some warning about old bug that are fixed now.
596
- ###
597
- config.add(
598
- "warn__ignore_bug_before",
599
- (
600
- "If 'None', we warn about all PyTensor bugs found by default. "
601
- "If 'all', we don't warn about PyTensor bugs found by default. "
602
- "If a version, we print only the warnings relative to PyTensor "
603
- "bugs found after that version. "
604
- "Warning for specific bugs can be configured with specific "
605
- "[warn] flags."
606
- ),
607
- EnumStr(
608
- "0.9",
609
- [
610
- "None",
611
- "all",
612
- "0.3",
613
- "0.4",
614
- "0.4.1",
615
- "0.5",
616
- "0.6",
617
- "0.7",
618
- "0.8",
619
- "0.8.1",
620
- "0.8.2",
621
- "0.9",
622
- "0.10",
623
- "1.0",
624
- "1.0.1",
625
- "1.0.2",
626
- "1.0.3",
627
- "1.0.4",
628
- "1.0.5",
629
- ],
630
- mutable=False,
631
- ),
632
- in_c_key=False,
633
- )
634
-
635
574
  # Note to developers:
636
575
  # Generally your exceptions should use an apply node's __str__
637
576
  # method when exception_verbosity == 'low'. When exception_verbosity
@@ -101,7 +101,6 @@ class PyTensorConfigParser:
101
101
  traceback__limit: int
102
102
  traceback__compile_limit: int
103
103
  # add_error_and_warning_configvars
104
- warn__ignore_bug_before: int
105
104
  exception_verbosity: str
106
105
  # add_testvalue_and_checking_configvars
107
106
  check_input: bool
@@ -138,8 +137,6 @@ class PyTensorConfigParser:
138
137
  optdb__max_use_ratio: float
139
138
  cycle_detection: str
140
139
  check_stack_trace: str
141
- # add_metaopt_configvars
142
- metaopt__verbose: int
143
140
  # add_vm_configvars
144
141
  profile: bool
145
142
  profile_optimizer: bool
@@ -139,7 +139,7 @@ class DisconnectedType(Type):
139
139
  " a symbolic placeholder."
140
140
  )
141
141
 
142
- def fiter_variable(self, other):
142
+ def filter_variable(self, other):
143
143
  raise AssertionError(
144
144
  "If you're assigning to a DisconnectedType you're"
145
145
  " doing something wrong. It should only be used as"
@@ -1,4 +1,3 @@
1
- import inspect
2
1
  import sys
3
2
  import time
4
3
  import warnings
@@ -693,32 +692,8 @@ class Validator(Feature):
693
692
  )
694
693
 
695
694
  def validate(self, fgraph):
696
- """
697
- If the caller is replace_all_validate, just raise the
698
- exception. replace_all_validate will print out the
699
- verbose output. Or it has to be done here before raise.
700
- """
701
695
  t0 = time.perf_counter()
702
- try:
703
- ret = fgraph.execute_callbacks("on_validate")
704
- except Exception as e:
705
- cf = inspect.currentframe()
706
- uf = cf.f_back
707
- uf_info = inspect.getframeinfo(uf)
708
-
709
- # If the caller is replace_all_validate, just raise the
710
- # exception. replace_all_validate will print out the
711
- # verbose output.
712
- # Or it has to be done here before raise.
713
- if uf_info.function == "replace_all_validate":
714
- raise
715
- else:
716
- verbose = uf.f_locals.get("verbose", False)
717
- if verbose:
718
- r = uf.f_locals.get("r", "")
719
- reason = uf_info.function
720
- print(f"validate failed on node {r}.\n Reason: {reason}, {e}") # noqa: T201
721
- raise
696
+ ret = fgraph.execute_callbacks("on_validate")
722
697
  t1 = time.perf_counter()
723
698
  if fgraph.profile:
724
699
  fgraph.profile.validate_time += t1 - t0
@@ -1119,7 +1119,7 @@ class OpToRewriterTracker:
1119
1119
  else:
1120
1120
  # An OpPattern without parameters behaves like a regular tracked_type
1121
1121
  self.tracked_types[c.op_type].append(rw)
1122
- if isinstance(c, type):
1122
+ elif isinstance(c, type):
1123
1123
  self.tracked_types[c].append(rw)
1124
1124
  else:
1125
1125
  self.tracked_instances[c].append(rw)