pytensor 2.31.2__tar.gz → 2.31.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 (456) hide show
  1. {pytensor-2.31.2/pytensor.egg-info → pytensor-2.31.3}/PKG-INFO +1 -1
  2. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/_version.py +3 -3
  3. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/tensor_basic.py +1 -8
  4. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/linker.py +38 -1
  5. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/basic.py +48 -15
  6. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/tensor_basic.py +1 -9
  7. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scan/checkpoints.py +1 -4
  8. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scan/op.py +3 -2
  9. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scan/rewriting.py +24 -15
  10. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/sparse/sandbox/sp2.py +1 -1
  11. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/basic.py +173 -161
  12. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/elemwise.py +2 -2
  13. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/io.py +1 -1
  14. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/random/op.py +2 -0
  15. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/basic.py +26 -37
  16. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/elemwise.py +83 -29
  17. {pytensor-2.31.2 → pytensor-2.31.3/pytensor.egg-info}/PKG-INFO +1 -1
  18. {pytensor-2.31.2 → pytensor-2.31.3}/LICENSE.txt +0 -0
  19. {pytensor-2.31.2 → pytensor-2.31.3}/MANIFEST.in +0 -0
  20. {pytensor-2.31.2 → pytensor-2.31.3}/README.rst +0 -0
  21. {pytensor-2.31.2 → pytensor-2.31.3}/doc/.templates/PLACEHOLDER +0 -0
  22. {pytensor-2.31.2 → pytensor-2.31.3}/doc/.templates/layout.html +0 -0
  23. {pytensor-2.31.2 → pytensor-2.31.3}/doc/.templates/nb-badges.html +0 -0
  24. {pytensor-2.31.2 → pytensor-2.31.3}/doc/.templates/rendered_citation.html +0 -0
  25. {pytensor-2.31.2 → pytensor-2.31.3}/doc/LICENSE.txt +0 -0
  26. {pytensor-2.31.2 → pytensor-2.31.3}/doc/README.md +0 -0
  27. {pytensor-2.31.2 → pytensor-2.31.3}/doc/acknowledgement.rst +0 -0
  28. {pytensor-2.31.2 → pytensor-2.31.3}/doc/bcast.png +0 -0
  29. {pytensor-2.31.2 → pytensor-2.31.3}/doc/bcast.svg +0 -0
  30. {pytensor-2.31.2 → pytensor-2.31.3}/doc/blog.md +0 -0
  31. {pytensor-2.31.2 → pytensor-2.31.3}/doc/conf.py +0 -0
  32. {pytensor-2.31.2 → pytensor-2.31.3}/doc/core_development_guide.rst +0 -0
  33. {pytensor-2.31.2 → pytensor-2.31.3}/doc/css.inc +0 -0
  34. {pytensor-2.31.2 → pytensor-2.31.3}/doc/dev_start_guide.rst +0 -0
  35. {pytensor-2.31.2 → pytensor-2.31.3}/doc/environment.yml +0 -0
  36. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/apply.png +0 -0
  37. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/apply.svg +0 -0
  38. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/apply2.svg +0 -0
  39. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/creating_a_c_op.rst +0 -0
  40. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  41. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/creating_an_op.rst +0 -0
  42. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/ctype.rst +0 -0
  43. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/extending_faq.rst +0 -0
  44. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/extending_pytensor_solution_1.py +0 -0
  45. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/graph_rewriting.rst +0 -0
  46. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/graphstructures.rst +0 -0
  47. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/index.rst +0 -0
  48. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/inplace.rst +0 -0
  49. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/op.rst +0 -0
  50. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/other_ops.rst +0 -0
  51. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  52. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  53. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/pipeline.rst +0 -0
  54. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/scan.rst +0 -0
  55. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/tips.rst +0 -0
  56. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/type.rst +0 -0
  57. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/unittest.rst +0 -0
  58. {pytensor-2.31.2 → pytensor-2.31.3}/doc/extending/using_params.rst +0 -0
  59. {pytensor-2.31.2 → pytensor-2.31.3}/doc/faq.rst +0 -0
  60. {pytensor-2.31.2 → pytensor-2.31.3}/doc/gallery/page_footer.md +0 -0
  61. {pytensor-2.31.2 → pytensor-2.31.3}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
  62. {pytensor-2.31.2 → pytensor-2.31.3}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
  63. {pytensor-2.31.2 → pytensor-2.31.3}/doc/generate_dtype_tensor_table.py +0 -0
  64. {pytensor-2.31.2 → pytensor-2.31.3}/doc/glossary.rst +0 -0
  65. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/Elman_srnn.png +0 -0
  66. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/PyTensor.png +0 -0
  67. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/PyTensor_RGB.svg +0 -0
  68. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/PyTensor_logo.png +0 -0
  69. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/binder.svg +0 -0
  70. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/blocksparse.png +0 -0
  71. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/colab.svg +0 -0
  72. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/github.svg +0 -0
  73. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/lstm.png +0 -0
  74. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/lstm_memorycell.png +0 -0
  75. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/talk2010.gif +0 -0
  76. {pytensor-2.31.2 → pytensor-2.31.3}/doc/images/talk2010.png +0 -0
  77. {pytensor-2.31.2 → pytensor-2.31.3}/doc/index.rst +0 -0
  78. {pytensor-2.31.2 → pytensor-2.31.3}/doc/install.rst +0 -0
  79. {pytensor-2.31.2 → pytensor-2.31.3}/doc/internal/how_to_release.rst +0 -0
  80. {pytensor-2.31.2 → pytensor-2.31.3}/doc/internal/index.rst +0 -0
  81. {pytensor-2.31.2 → pytensor-2.31.3}/doc/internal/metadocumentation.rst +0 -0
  82. {pytensor-2.31.2 → pytensor-2.31.3}/doc/introduction.rst +0 -0
  83. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/compile/debugmode.rst +0 -0
  84. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/compile/function.rst +0 -0
  85. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/compile/index.rst +0 -0
  86. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/compile/io.rst +0 -0
  87. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/compile/mode.rst +0 -0
  88. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/compile/nanguardmode.rst +0 -0
  89. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/compile/opfromgraph.rst +0 -0
  90. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/compile/ops.rst +0 -0
  91. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/compile/profilemode.rst +0 -0
  92. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/compile/shared.rst +0 -0
  93. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/config.rst +0 -0
  94. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  95. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  96. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  97. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  98. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  99. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  100. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  101. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/mlp.html +0 -0
  102. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/mlp.png +0 -0
  103. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/mlp2.html +0 -0
  104. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  105. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/mlp2.png +0 -0
  106. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/ofg.html +0 -0
  107. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/examples/ofg2.html +0 -0
  108. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/index.ipynb +0 -0
  109. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/index.rst +0 -0
  110. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  111. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  112. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  113. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  114. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/graph/features.rst +0 -0
  115. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/graph/fgraph.rst +0 -0
  116. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/graph/graph.rst +0 -0
  117. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/graph/index.rst +0 -0
  118. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/graph/op.rst +0 -0
  119. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/graph/replace.rst +0 -0
  120. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/graph/type.rst +0 -0
  121. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/graph/utils.rst +0 -0
  122. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/index.rst +0 -0
  123. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/misc/pkl_utils.rst +0 -0
  124. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/printing.rst +0 -0
  125. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/scalar/index.rst +0 -0
  126. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/scan.rst +0 -0
  127. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/sparse/index.rst +0 -0
  128. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/sparse/sandbox.rst +0 -0
  129. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/basic.rst +0 -0
  130. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/basic_opt.rst +0 -0
  131. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/bcast.png +0 -0
  132. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/bcast.svg +0 -0
  133. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/conv.rst +0 -0
  134. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/elemwise.rst +0 -0
  135. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/extra_ops.rst +0 -0
  136. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/fft.rst +0 -0
  137. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/functional.rst +0 -0
  138. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/index.rst +0 -0
  139. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/io.rst +0 -0
  140. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/math_opt.rst +0 -0
  141. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/nlinalg.rst +0 -0
  142. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/plot_fft.png +0 -0
  143. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/random/distributions.rst +0 -0
  144. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/random/index.rst +0 -0
  145. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/slinalg.rst +0 -0
  146. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/tensor/utils.rst +0 -0
  147. {pytensor-2.31.2 → pytensor-2.31.3}/doc/library/typed_list.rst +0 -0
  148. {pytensor-2.31.2 → pytensor-2.31.3}/doc/links.rst +0 -0
  149. {pytensor-2.31.2 → pytensor-2.31.3}/doc/optimizations.rst +0 -0
  150. {pytensor-2.31.2 → pytensor-2.31.3}/doc/pylintrc +0 -0
  151. {pytensor-2.31.2 → pytensor-2.31.3}/doc/robots.txt +0 -0
  152. {pytensor-2.31.2 → pytensor-2.31.3}/doc/troubleshooting.rst +0 -0
  153. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/adding.rst +0 -0
  154. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/adding_solution_1.py +0 -0
  155. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/aliasing.rst +0 -0
  156. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/apply.png +0 -0
  157. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/apply.svg +0 -0
  158. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/bcast.png +0 -0
  159. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/broadcasting.rst +0 -0
  160. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/conditions.rst +0 -0
  161. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/debug_faq.rst +0 -0
  162. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/dlogistic.png +0 -0
  163. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/examples.rst +0 -0
  164. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/faq_tutorial.rst +0 -0
  165. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/gradients.rst +0 -0
  166. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/index.rst +0 -0
  167. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/loading_and_saving.rst +0 -0
  168. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/logistic.gp +0 -0
  169. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/logistic.png +0 -0
  170. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/loop.rst +0 -0
  171. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/loop_solution_1.py +0 -0
  172. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/modes.rst +0 -0
  173. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/modes_solution_1.py +0 -0
  174. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/multi_cores.rst +0 -0
  175. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/nan_tutorial.rst +0 -0
  176. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/pics/d3viz.png +0 -0
  177. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  178. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  179. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  180. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/printing_drawing.rst +0 -0
  181. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/prng.rst +0 -0
  182. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/profiling.rst +0 -0
  183. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/profiling_example.py +0 -0
  184. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/profiling_example_out.prof +0 -0
  185. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/shape_info.rst +0 -0
  186. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/sparse.rst +0 -0
  187. {pytensor-2.31.2 → pytensor-2.31.3}/doc/tutorial/symbolic_graphs.rst +0 -0
  188. {pytensor-2.31.2 → pytensor-2.31.3}/doc/user_guide.rst +0 -0
  189. {pytensor-2.31.2 → pytensor-2.31.3}/pyproject.toml +0 -0
  190. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/__init__.py +0 -0
  191. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/bin/__init__.py +0 -0
  192. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/bin/pytensor_cache.py +0 -0
  193. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/breakpoint.py +0 -0
  194. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/__init__.py +0 -0
  195. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/builders.py +0 -0
  196. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/compiledir.py +0 -0
  197. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/compilelock.py +0 -0
  198. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/debugmode.py +0 -0
  199. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/function/__init__.py +0 -0
  200. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/function/pfunc.py +0 -0
  201. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/function/types.py +0 -0
  202. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/io.py +0 -0
  203. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/mode.py +0 -0
  204. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/monitormode.py +0 -0
  205. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/nanguardmode.py +0 -0
  206. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/ops.py +0 -0
  207. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/profiling.py +0 -0
  208. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/compile/sharedvalue.py +0 -0
  209. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/configdefaults.py +0 -0
  210. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/configparser.py +0 -0
  211. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/__init__.py +0 -0
  212. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  213. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/css/d3viz.css +0 -0
  214. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/d3viz.py +0 -0
  215. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/formatting.py +0 -0
  216. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/html/template.html +0 -0
  217. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  218. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  219. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/js/d3viz.js +0 -0
  220. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  221. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  222. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/gradient.py +0 -0
  223. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/__init__.py +0 -0
  224. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/basic.py +0 -0
  225. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/destroyhandler.py +0 -0
  226. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/features.py +0 -0
  227. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/fg.py +0 -0
  228. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/null_type.py +0 -0
  229. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/op.py +0 -0
  230. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/replace.py +0 -0
  231. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/rewriting/__init__.py +0 -0
  232. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/rewriting/basic.py +0 -0
  233. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/rewriting/db.py +0 -0
  234. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/rewriting/kanren.py +0 -0
  235. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/rewriting/unify.py +0 -0
  236. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/rewriting/utils.py +0 -0
  237. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/type.py +0 -0
  238. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/graph/utils.py +0 -0
  239. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/ifelse.py +0 -0
  240. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/__init__.py +0 -0
  241. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/basic.py +0 -0
  242. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/__init__.py +0 -0
  243. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/basic.py +0 -0
  244. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  245. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  246. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/cmodule.py +0 -0
  247. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/cutils.py +0 -0
  248. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/cvm.py +0 -0
  249. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/exceptions.py +0 -0
  250. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/interface.py +0 -0
  251. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/lazylinker_c.py +0 -0
  252. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/op.py +0 -0
  253. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/params_type.py +0 -0
  254. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/c/type.py +0 -0
  255. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/__init__.py +0 -0
  256. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/__init__.py +0 -0
  257. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/basic.py +0 -0
  258. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/blas.py +0 -0
  259. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/blockwise.py +0 -0
  260. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/einsum.py +0 -0
  261. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  262. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  263. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/math.py +0 -0
  264. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
  265. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/pad.py +0 -0
  266. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/random.py +0 -0
  267. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/scalar.py +0 -0
  268. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/scan.py +0 -0
  269. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/shape.py +0 -0
  270. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
  271. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
  272. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/slinalg.py +0 -0
  273. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/sort.py +0 -0
  274. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/sparse.py +0 -0
  275. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/jax/dispatch/subtensor.py +0 -0
  276. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/__init__.py +0 -0
  277. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/__init__.py +0 -0
  278. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/blockwise.py +0 -0
  279. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  280. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/elemwise.py +0 -0
  281. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  282. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
  283. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
  284. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
  285. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
  286. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
  287. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
  288. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/solve/__init__.py +0 -0
  289. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/solve/cholesky.py +0 -0
  290. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/solve/general.py +0 -0
  291. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/solve/lu_solve.py +0 -0
  292. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/solve/norm.py +0 -0
  293. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/solve/posdef.py +0 -0
  294. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/solve/symmetric.py +0 -0
  295. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/solve/triangular.py +0 -0
  296. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/solve/tridiagonal.py +0 -0
  297. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/solve/utils.py +0 -0
  298. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
  299. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
  300. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/random.py +0 -0
  301. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/scalar.py +0 -0
  302. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/scan.py +0 -0
  303. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
  304. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
  305. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/slinalg.py +0 -0
  306. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/sparse.py +0 -0
  307. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/subtensor.py +0 -0
  308. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
  309. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/numba/linker.py +0 -0
  310. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
  311. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  312. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/blas.py +0 -0
  313. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
  314. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  315. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
  316. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/math.py +0 -0
  317. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
  318. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  319. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/shape.py +0 -0
  320. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/sort.py +0 -0
  321. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
  322. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/pytorch/linker.py +0 -0
  323. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/utils.py +0 -0
  324. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/link/vm.py +0 -0
  325. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/misc/__init__.py +0 -0
  326. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/misc/check_blas.py +0 -0
  327. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/misc/check_blas_many.sh +0 -0
  328. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/misc/check_duplicate_key.py +0 -0
  329. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  330. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/misc/elemwise_time_test.py +0 -0
  331. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/misc/frozendict.py +0 -0
  332. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/misc/may_share_memory.py +0 -0
  333. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/misc/ordered_set.py +0 -0
  334. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/misc/pkl_utils.py +0 -0
  335. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/npy_2_compat.py +0 -0
  336. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/printing.py +0 -0
  337. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/py.typed +0 -0
  338. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/raise_op.py +0 -0
  339. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scalar/__init__.py +0 -0
  340. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scalar/basic.py +0 -0
  341. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  342. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  343. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scalar/c_code/gamma.c +0 -0
  344. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scalar/c_code/incbet.c +0 -0
  345. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scalar/loop.py +0 -0
  346. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scalar/math.py +0 -0
  347. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scalar/sharedvar.py +0 -0
  348. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scan/__init__.py +0 -0
  349. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scan/basic.py +0 -0
  350. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scan/scan_perform.pyx +0 -0
  351. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scan/scan_perform_ext.py +0 -0
  352. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scan/utils.py +0 -0
  353. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/scan/views.py +0 -0
  354. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/sparse/__init__.py +0 -0
  355. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/sparse/basic.py +0 -0
  356. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/sparse/rewriting.py +0 -0
  357. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/sparse/sandbox/__init__.py +0 -0
  358. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/sparse/sandbox/sp.py +0 -0
  359. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/sparse/sharedvar.py +0 -0
  360. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/sparse/type.py +0 -0
  361. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/sparse/utils.py +0 -0
  362. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/__init__.py +0 -0
  363. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/_linalg/__init__.py +0 -0
  364. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/_linalg/solve/__init__.py +0 -0
  365. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/_linalg/solve/rewriting.py +0 -0
  366. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/blas.py +0 -0
  367. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/blas_c.py +0 -0
  368. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/blas_headers.py +0 -0
  369. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/blas_scipy.py +0 -0
  370. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/blockwise.py +0 -0
  371. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
  372. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
  373. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/c_code/dimshuffle.c +0 -0
  374. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/conv/__init__.py +0 -0
  375. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/conv/abstract_conv.py +0 -0
  376. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/einsum.py +0 -0
  377. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/elemwise_cgen.py +0 -0
  378. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/exceptions.py +0 -0
  379. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/extra_ops.py +0 -0
  380. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/fft.py +0 -0
  381. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/fourier.py +0 -0
  382. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/functional.py +0 -0
  383. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/inplace.py +0 -0
  384. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/interpolate.py +0 -0
  385. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/linalg.py +0 -0
  386. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/math.py +0 -0
  387. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/nlinalg.py +0 -0
  388. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/pad.py +0 -0
  389. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/random/__init__.py +0 -0
  390. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/random/basic.py +0 -0
  391. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  392. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/random/rewriting/basic.py +0 -0
  393. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/random/rewriting/jax.py +0 -0
  394. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/random/rewriting/numba.py +0 -0
  395. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/random/type.py +0 -0
  396. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/random/utils.py +0 -0
  397. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/random/var.py +0 -0
  398. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/__init__.py +0 -0
  399. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/blas.py +0 -0
  400. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/blas_c.py +0 -0
  401. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
  402. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/blockwise.py +0 -0
  403. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/conv.py +0 -0
  404. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/einsum.py +0 -0
  405. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/extra_ops.py +0 -0
  406. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/jax.py +0 -0
  407. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/linalg.py +0 -0
  408. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/math.py +0 -0
  409. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/numba.py +0 -0
  410. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/ofg.py +0 -0
  411. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/shape.py +0 -0
  412. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/special.py +0 -0
  413. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/subtensor.py +0 -0
  414. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/subtensor_lift.py +0 -0
  415. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  416. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/shape.py +0 -0
  417. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/sharedvar.py +0 -0
  418. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/signal/__init__.py +0 -0
  419. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/signal/conv.py +0 -0
  420. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/slinalg.py +0 -0
  421. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/sort.py +0 -0
  422. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/special.py +0 -0
  423. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/subtensor.py +0 -0
  424. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/type.py +0 -0
  425. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/type_other.py +0 -0
  426. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/utils.py +0 -0
  427. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/var.py +0 -0
  428. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/variable.py +0 -0
  429. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/tensor/xlogx.py +0 -0
  430. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/typed_list/__init__.py +0 -0
  431. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/typed_list/basic.py +0 -0
  432. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/typed_list/rewriting.py +0 -0
  433. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/typed_list/type.py +0 -0
  434. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/updates.py +0 -0
  435. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor/utils.py +0 -0
  436. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor.egg-info/SOURCES.txt +0 -0
  437. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor.egg-info/dependency_links.txt +0 -0
  438. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor.egg-info/entry_points.txt +0 -0
  439. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor.egg-info/requires.txt +0 -0
  440. {pytensor-2.31.2 → pytensor-2.31.3}/pytensor.egg-info/top_level.txt +0 -0
  441. {pytensor-2.31.2 → pytensor-2.31.3}/scripts/mypy-failing.txt +0 -0
  442. {pytensor-2.31.2 → pytensor-2.31.3}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
  443. {pytensor-2.31.2 → pytensor-2.31.3}/setup.cfg +0 -0
  444. {pytensor-2.31.2 → pytensor-2.31.3}/setup.py +0 -0
  445. {pytensor-2.31.2 → pytensor-2.31.3}/tests/link/c/c_code/test_cenum.h +0 -0
  446. {pytensor-2.31.2 → pytensor-2.31.3}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  447. {pytensor-2.31.2 → pytensor-2.31.3}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
  448. {pytensor-2.31.2 → pytensor-2.31.3}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
  449. {pytensor-2.31.2 → pytensor-2.31.3}/tests/test_breakpoint.py +0 -0
  450. {pytensor-2.31.2 → pytensor-2.31.3}/tests/test_config.py +0 -0
  451. {pytensor-2.31.2 → pytensor-2.31.3}/tests/test_gradient.py +0 -0
  452. {pytensor-2.31.2 → pytensor-2.31.3}/tests/test_ifelse.py +0 -0
  453. {pytensor-2.31.2 → pytensor-2.31.3}/tests/test_printing.py +0 -0
  454. {pytensor-2.31.2 → pytensor-2.31.3}/tests/test_raise_op.py +0 -0
  455. {pytensor-2.31.2 → pytensor-2.31.3}/tests/test_rop.py +0 -0
  456. {pytensor-2.31.2 → pytensor-2.31.3}/tests/test_updates.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytensor
3
- Version: 2.31.2
3
+ Version: 2.31.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
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-05-24T11:34:23+0800",
11
+ "date": "2025-06-02T15:09:01+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "2d414d4129882861b867aaf0d9abcf3135e3d5eb",
15
- "version": "2.31.2"
14
+ "full-revisionid": "ff98ab8f8d2e6b78539a9225bde5e18a49ae6b81",
15
+ "version": "2.31.3"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -87,14 +87,7 @@ def jax_funcify_Join(op, **kwargs):
87
87
  def join(axis, *tensors):
88
88
  # tensors could also be tuples, and in this case they don't have a ndim
89
89
  tensors = [jnp.asarray(tensor) for tensor in tensors]
90
- view = op.view
91
- if (view != -1) and all(
92
- tensor.shape[axis] == 0 for tensor in tensors[0:view] + tensors[view + 1 :]
93
- ):
94
- return tensors[view]
95
-
96
- else:
97
- return jnp.concatenate(tensors, axis=axis)
90
+ return jnp.concatenate(tensors, axis=axis)
98
91
 
99
92
  return join
100
93
 
@@ -9,8 +9,13 @@ from pytensor.link.basic import JITLinker
9
9
  class JAXLinker(JITLinker):
10
10
  """A `Linker` that JIT-compiles NumPy-based operations using JAX."""
11
11
 
12
+ def __init__(self, *args, **kwargs):
13
+ self.scalar_shape_inputs: tuple[int] = () # type: ignore[annotation-unchecked]
14
+ super().__init__(*args, **kwargs)
15
+
12
16
  def fgraph_convert(self, fgraph, input_storage, storage_map, **kwargs):
13
17
  from pytensor.link.jax.dispatch import jax_funcify
18
+ from pytensor.link.jax.dispatch.shape import JAXShapeTuple
14
19
  from pytensor.tensor.random.type import RandomType
15
20
 
16
21
  shared_rng_inputs = [
@@ -64,6 +69,23 @@ class JAXLinker(JITLinker):
64
69
  fgraph.inputs.remove(new_inp)
65
70
  fgraph.inputs.insert(old_inp_fgrap_index, new_inp)
66
71
 
72
+ fgraph_inputs = fgraph.inputs
73
+ clients = fgraph.clients
74
+ # Detect scalar shape inputs that are used only in JAXShapeTuple nodes
75
+ scalar_shape_inputs = [
76
+ inp
77
+ for node in fgraph.apply_nodes
78
+ if isinstance(node.op, JAXShapeTuple)
79
+ for inp in node.inputs
80
+ if inp in fgraph_inputs
81
+ and all(
82
+ isinstance(cl_node.op, JAXShapeTuple) for cl_node, _ in clients[inp]
83
+ )
84
+ ]
85
+ self.scalar_shape_inputs = tuple(
86
+ fgraph_inputs.index(inp) for inp in scalar_shape_inputs
87
+ )
88
+
67
89
  return jax_funcify(
68
90
  fgraph, input_storage=input_storage, storage_map=storage_map, **kwargs
69
91
  )
@@ -71,7 +93,22 @@ class JAXLinker(JITLinker):
71
93
  def jit_compile(self, fn):
72
94
  import jax
73
95
 
74
- return jax.jit(fn)
96
+ jit_fn = jax.jit(fn, static_argnums=self.scalar_shape_inputs)
97
+
98
+ if not self.scalar_shape_inputs:
99
+ return jit_fn
100
+
101
+ def convert_scalar_shape_inputs(
102
+ *args, scalar_shape_inputs=set(self.scalar_shape_inputs)
103
+ ):
104
+ return jit_fn(
105
+ *(
106
+ int(arg) if i in scalar_shape_inputs else arg
107
+ for i, arg in enumerate(args)
108
+ )
109
+ )
110
+
111
+ return convert_scalar_shape_inputs
75
112
 
76
113
  def create_thunk_inputs(self, storage_map):
77
114
  from pytensor.link.jax.dispatch import jax_typify
@@ -565,18 +565,19 @@ def numba_funcify_SpecifyShape(op, node, **kwargs):
565
565
  def int_to_float_fn(inputs, out_dtype):
566
566
  """Create a Numba function that converts integer and boolean ``ndarray``s to floats."""
567
567
 
568
- if all(
569
- input.type.numpy_dtype == np.dtype(out_dtype) for input in inputs
570
- ) and isinstance(np.dtype(out_dtype), np.floating):
568
+ if (
569
+ all(inp.type.dtype == out_dtype for inp in inputs)
570
+ and np.dtype(out_dtype).kind == "f"
571
+ ):
571
572
 
572
- @numba_njit
573
+ @numba_njit(inline="always")
573
574
  def inputs_cast(x):
574
575
  return x
575
576
 
576
- elif any(i.type.numpy_dtype.kind in "ib" for i in inputs):
577
+ elif any(i.type.numpy_dtype.kind in "uib" for i in inputs):
577
578
  args_dtype = np.dtype(f"f{out_dtype.itemsize}")
578
579
 
579
- @numba_njit
580
+ @numba_njit(inline="always")
580
581
  def inputs_cast(x):
581
582
  return x.astype(args_dtype)
582
583
 
@@ -584,7 +585,7 @@ def int_to_float_fn(inputs, out_dtype):
584
585
  args_dtype_sz = max(_arg.type.numpy_dtype.itemsize for _arg in inputs)
585
586
  args_dtype = np.dtype(f"f{args_dtype_sz}")
586
587
 
587
- @numba_njit
588
+ @numba_njit(inline="always")
588
589
  def inputs_cast(x):
589
590
  return x.astype(args_dtype)
590
591
 
@@ -593,17 +594,49 @@ def int_to_float_fn(inputs, out_dtype):
593
594
 
594
595
  @numba_funcify.register(Dot)
595
596
  def numba_funcify_Dot(op, node, **kwargs):
596
- # Numba's `np.dot` does not support integer dtypes, so we need to cast to
597
- # float.
597
+ # Numba's `np.dot` does not support integer dtypes, so we need to cast to float.
598
+ x, y = node.inputs
599
+ [out] = node.outputs
598
600
 
599
- out_dtype = node.outputs[0].type.numpy_dtype
600
- inputs_cast = int_to_float_fn(node.inputs, out_dtype)
601
+ x_dtype = x.type.dtype
602
+ y_dtype = y.type.dtype
603
+ dot_dtype = f"float{max((32, out.type.numpy_dtype.itemsize * 8))}"
604
+ out_dtype = out.type.dtype
601
605
 
602
- @numba_njit
603
- def dot(x, y):
604
- return np.asarray(np.dot(inputs_cast(x), inputs_cast(y))).astype(out_dtype)
606
+ if x_dtype == dot_dtype and y_dtype == dot_dtype:
607
+
608
+ @numba_njit
609
+ def dot(x, y):
610
+ return np.asarray(np.dot(x, y))
611
+
612
+ elif x_dtype == dot_dtype and y_dtype != dot_dtype:
613
+
614
+ @numba_njit
615
+ def dot(x, y):
616
+ return np.asarray(np.dot(x, y.astype(dot_dtype)))
617
+
618
+ elif x_dtype != dot_dtype and y_dtype == dot_dtype:
619
+
620
+ @numba_njit
621
+ def dot(x, y):
622
+ return np.asarray(np.dot(x.astype(dot_dtype), y))
623
+
624
+ else:
625
+
626
+ @numba_njit()
627
+ def dot(x, y):
628
+ return np.asarray(np.dot(x.astype(dot_dtype), y.astype(dot_dtype)))
629
+
630
+ if out_dtype == dot_dtype:
631
+ return dot
632
+
633
+ else:
634
+
635
+ @numba_njit
636
+ def dot_with_cast(x, y):
637
+ return dot(x, y).astype(out_dtype)
605
638
 
606
- return dot
639
+ return dot_with_cast
607
640
 
608
641
 
609
642
  @numba_funcify.register(Solve)
@@ -117,17 +117,9 @@ def numba_funcify_ARange(op, **kwargs):
117
117
 
118
118
  @numba_funcify.register(Join)
119
119
  def numba_funcify_Join(op, **kwargs):
120
- view = op.view
121
-
122
- if view != -1:
123
- # TODO: Where (and why) is this `Join.view` even being used? From a
124
- # quick search, the answer appears to be "nowhere", so we should
125
- # probably just remove it.
126
- raise NotImplementedError("The `view` parameter to `Join` is not supported")
127
-
128
120
  @numba_basic.numba_njit
129
121
  def join(axis, *tensors):
130
- return np.concatenate(tensors, numba_basic.to_scalar(axis))
122
+ return np.concatenate(tensors, axis.item())
131
123
 
132
124
  return join
133
125
 
@@ -1,6 +1,5 @@
1
1
  import pytensor.tensor.basic as ptb
2
2
  from pytensor.scan.basic import scan
3
- from pytensor.tensor.basic import Join
4
3
  from pytensor.tensor.math import ceil, eq, neq
5
4
  from pytensor.tensor.subtensor import set_subtensor
6
5
 
@@ -127,14 +126,12 @@ def scan_checkpoints(
127
126
 
128
127
  # Pad the sequences if needed
129
128
  if padding:
130
- # Since padding could be an empty tensor, Join returns a view of s.
131
- join = Join(view=0)
132
129
  for i, s in enumerate(sequences):
133
130
  overshoots_by = s.shape[0] % save_every_N
134
131
  overshoots = neq(overshoots_by, 0)
135
132
  n = (save_every_N - overshoots_by) * overshoots
136
133
  z = ptb.zeros((n, *s.shape[1:]), dtype=s.dtype)
137
- sequences[i] = join(0, s, z)
134
+ sequences[i] = ptb.join(0, s, z)
138
135
 
139
136
  # Establish the input variables of the outer scan
140
137
  o_sequences = [
@@ -1647,8 +1647,9 @@ class Scan(Op, ScanMethodsMixin, HasInnerGraph):
1647
1647
  p=p, i=node_input_storage, o=node_output_storage, n=node, allow_gc=allow_gc
1648
1648
  ):
1649
1649
  r = p(n, [x[0] for x in i], o)
1650
- for o in node.outputs:
1651
- compute_map[o][0] = True
1650
+ if compute_map is not None:
1651
+ for o in node.outputs:
1652
+ compute_map[o][0] = True
1652
1653
  if allow_gc:
1653
1654
  self.fn.free()
1654
1655
  return r
@@ -53,6 +53,7 @@ from pytensor.scan.utils import (
53
53
  from pytensor.tensor.basic import (
54
54
  Alloc,
55
55
  AllocEmpty,
56
+ atleast_Nd,
56
57
  get_scalar_constant_value,
57
58
  )
58
59
  from pytensor.tensor.elemwise import DimShuffle, Elemwise
@@ -1186,8 +1187,8 @@ def while_scan_merge_subtensor_last_element(fgraph, scan_node):
1186
1187
  return subtensor_merge_replacements
1187
1188
 
1188
1189
 
1189
- def _is_default_scan_buffer(x: TensorVariable) -> bool:
1190
- node = x.owner
1190
+ def _is_default_scan_buffer(final_buffer: TensorVariable, taps: int) -> bool:
1191
+ node = final_buffer.owner
1191
1192
 
1192
1193
  if node is None:
1193
1194
  return False
@@ -1200,8 +1201,10 @@ def _is_default_scan_buffer(x: TensorVariable) -> bool:
1200
1201
  ):
1201
1202
  return False
1202
1203
 
1203
- x, y, *_ = node.inputs
1204
- if not (x.owner is not None and isinstance(x.owner.op, AllocEmpty)):
1204
+ init_buffer, init_value, *_ = node.inputs
1205
+ if not (
1206
+ init_buffer.owner is not None and isinstance(init_buffer.owner.op, AllocEmpty)
1207
+ ):
1205
1208
  return False
1206
1209
 
1207
1210
  # The value may have been broadcast to fill in the initial taps.
@@ -1218,10 +1221,16 @@ def _is_default_scan_buffer(x: TensorVariable) -> bool:
1218
1221
  # 1. alloc_empty(2 + nsteps)[:2].broadcastable == x.broadcastable
1219
1222
  # But due to laziness we use the slightly more conservative check:
1220
1223
  # 2. alloc_empty(2 + nsteps).broadcastable == x.broadcastable
1221
- if broadcasted_by(y, x):
1222
- return False
1223
-
1224
- return True
1224
+ if taps > 1:
1225
+ return not broadcasted_by(init_value, init_buffer)
1226
+ else:
1227
+ # In this case we know we have alloc_empty(1 + nsteps, ...)[:1].set(init_value)
1228
+ # The first dimension cannot possibly broadcast in the subtensor assignment,
1229
+ # so we exclude it from `broadcasted_by`. To exclude it we squeeze it out,
1230
+ # after adding any other implicit expand_dims. We select into the first entry of
1231
+ # the buffer, to check for potential broadcasting in other dimensions.
1232
+ init_value_ = atleast_Nd(init_value, n=init_buffer.ndim)
1233
+ return not broadcasted_by(init_value_.squeeze(0), init_buffer[0])
1225
1234
 
1226
1235
 
1227
1236
  def scan_save_mem_rewrite(fgraph, node, backend_supports_output_pre_allocation: bool):
@@ -1574,15 +1583,16 @@ def scan_save_mem_rewrite(fgraph, node, backend_supports_output_pre_allocation:
1574
1583
  # If the memory for this output has been pre-allocated
1575
1584
  # before going into the scan op (by an alloc node)
1576
1585
  if idx < op_info.n_mit_sot + op_info.n_sit_sot:
1586
+ taps = init_l[i]
1577
1587
  nw_input = nw_inputs[offset + idx]
1578
1588
 
1579
1589
  # Recreate default buffers with new size
1580
- if _is_default_scan_buffer(nw_input):
1581
- extra_size = 1 if required_orphan else val - init_l[i]
1590
+ if _is_default_scan_buffer(nw_input, taps):
1591
+ extra_size = 1 if required_orphan else val - taps
1582
1592
  nw_input = expand_empty(nw_input.owner.inputs[1], extra_size)
1583
1593
  # Otherwise, just trim with a slice
1584
1594
  else:
1585
- stop = init_l[i] if required_orphan else val
1595
+ stop = taps if required_orphan else val
1586
1596
  nw_input = nw_input[:stop]
1587
1597
 
1588
1598
  nw_inputs[offset + idx] = nw_input
@@ -1626,14 +1636,13 @@ def scan_save_mem_rewrite(fgraph, node, backend_supports_output_pre_allocation:
1626
1636
  # val == 0 means that we want to keep all intermediate
1627
1637
  # results for that state, including the initial values.
1628
1638
  if idx < op_info.n_mit_sot + op_info.n_sit_sot:
1639
+ taps = init_l[op_info.n_mit_mot + idx]
1629
1640
  in_idx = offset + idx
1630
1641
  nw_input = nw_inputs[in_idx]
1631
- if _is_default_scan_buffer(nw_input):
1642
+ if _is_default_scan_buffer(nw_input, taps):
1632
1643
  nw_input = expand_empty(nw_input.owner.inputs[1], nw_steps)
1633
1644
  else:
1634
- # Number of steps in the initial state
1635
- init_l_pt = pt.as_tensor(init_l[op_info.n_mit_mot + idx])
1636
- nw_input = nw_input[: (init_l_pt + nw_steps)]
1645
+ nw_input = nw_input[: (taps + nw_steps)]
1637
1646
  nw_inputs[in_idx] = nw_input
1638
1647
 
1639
1648
  elif (
@@ -96,7 +96,7 @@ class Binomial(Op):
96
96
 
97
97
  def __init__(self, format, dtype):
98
98
  self.format = format
99
- self.dtype = dtype
99
+ self.dtype = np.dtype(dtype).name
100
100
 
101
101
  def make_node(self, n, p, shape):
102
102
  n = pt.as_tensor_variable(n)