pytensor 2.30.2__tar.gz → 2.30.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 (447) hide show
  1. {pytensor-2.30.2/pytensor.egg-info → pytensor-2.30.3}/PKG-INFO +1 -1
  2. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/_version.py +3 -3
  3. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/basic.py +63 -0
  4. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/tensor_basic.py +1 -4
  5. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/vectorize_codegen.py +1 -1
  6. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/basic.py +26 -36
  7. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/loop.py +36 -40
  8. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/basic.py +103 -109
  9. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/blockwise.py +4 -3
  10. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/blockwise.py +31 -3
  11. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/elemwise.py +2 -14
  12. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/type.py +12 -0
  13. {pytensor-2.30.2 → pytensor-2.30.3/pytensor.egg-info}/PKG-INFO +1 -1
  14. {pytensor-2.30.2 → pytensor-2.30.3}/LICENSE.txt +0 -0
  15. {pytensor-2.30.2 → pytensor-2.30.3}/MANIFEST.in +0 -0
  16. {pytensor-2.30.2 → pytensor-2.30.3}/README.rst +0 -0
  17. {pytensor-2.30.2 → pytensor-2.30.3}/doc/.templates/PLACEHOLDER +0 -0
  18. {pytensor-2.30.2 → pytensor-2.30.3}/doc/.templates/layout.html +0 -0
  19. {pytensor-2.30.2 → pytensor-2.30.3}/doc/.templates/nb-badges.html +0 -0
  20. {pytensor-2.30.2 → pytensor-2.30.3}/doc/.templates/rendered_citation.html +0 -0
  21. {pytensor-2.30.2 → pytensor-2.30.3}/doc/LICENSE.txt +0 -0
  22. {pytensor-2.30.2 → pytensor-2.30.3}/doc/README.md +0 -0
  23. {pytensor-2.30.2 → pytensor-2.30.3}/doc/acknowledgement.rst +0 -0
  24. {pytensor-2.30.2 → pytensor-2.30.3}/doc/bcast.png +0 -0
  25. {pytensor-2.30.2 → pytensor-2.30.3}/doc/bcast.svg +0 -0
  26. {pytensor-2.30.2 → pytensor-2.30.3}/doc/blog.md +0 -0
  27. {pytensor-2.30.2 → pytensor-2.30.3}/doc/conf.py +0 -0
  28. {pytensor-2.30.2 → pytensor-2.30.3}/doc/core_development_guide.rst +0 -0
  29. {pytensor-2.30.2 → pytensor-2.30.3}/doc/css.inc +0 -0
  30. {pytensor-2.30.2 → pytensor-2.30.3}/doc/dev_start_guide.rst +0 -0
  31. {pytensor-2.30.2 → pytensor-2.30.3}/doc/environment.yml +0 -0
  32. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/apply.png +0 -0
  33. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/apply.svg +0 -0
  34. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/apply2.svg +0 -0
  35. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/creating_a_c_op.rst +0 -0
  36. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  37. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/creating_an_op.rst +0 -0
  38. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/ctype.rst +0 -0
  39. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/extending_faq.rst +0 -0
  40. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/extending_pytensor_solution_1.py +0 -0
  41. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/graph_rewriting.rst +0 -0
  42. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/graphstructures.rst +0 -0
  43. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/index.rst +0 -0
  44. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/inplace.rst +0 -0
  45. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/op.rst +0 -0
  46. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/other_ops.rst +0 -0
  47. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  48. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  49. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/pipeline.rst +0 -0
  50. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/scan.rst +0 -0
  51. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/tips.rst +0 -0
  52. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/type.rst +0 -0
  53. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/unittest.rst +0 -0
  54. {pytensor-2.30.2 → pytensor-2.30.3}/doc/extending/using_params.rst +0 -0
  55. {pytensor-2.30.2 → pytensor-2.30.3}/doc/faq.rst +0 -0
  56. {pytensor-2.30.2 → pytensor-2.30.3}/doc/gallery/page_footer.md +0 -0
  57. {pytensor-2.30.2 → pytensor-2.30.3}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
  58. {pytensor-2.30.2 → pytensor-2.30.3}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
  59. {pytensor-2.30.2 → pytensor-2.30.3}/doc/generate_dtype_tensor_table.py +0 -0
  60. {pytensor-2.30.2 → pytensor-2.30.3}/doc/glossary.rst +0 -0
  61. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/Elman_srnn.png +0 -0
  62. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/PyTensor.png +0 -0
  63. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/PyTensor_RGB.svg +0 -0
  64. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/PyTensor_logo.png +0 -0
  65. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/binder.svg +0 -0
  66. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/blocksparse.png +0 -0
  67. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/colab.svg +0 -0
  68. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/github.svg +0 -0
  69. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/lstm.png +0 -0
  70. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/lstm_memorycell.png +0 -0
  71. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/talk2010.gif +0 -0
  72. {pytensor-2.30.2 → pytensor-2.30.3}/doc/images/talk2010.png +0 -0
  73. {pytensor-2.30.2 → pytensor-2.30.3}/doc/index.rst +0 -0
  74. {pytensor-2.30.2 → pytensor-2.30.3}/doc/install.rst +0 -0
  75. {pytensor-2.30.2 → pytensor-2.30.3}/doc/internal/how_to_release.rst +0 -0
  76. {pytensor-2.30.2 → pytensor-2.30.3}/doc/internal/index.rst +0 -0
  77. {pytensor-2.30.2 → pytensor-2.30.3}/doc/internal/metadocumentation.rst +0 -0
  78. {pytensor-2.30.2 → pytensor-2.30.3}/doc/introduction.rst +0 -0
  79. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/debugmode.rst +0 -0
  80. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/function.rst +0 -0
  81. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/index.rst +0 -0
  82. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/io.rst +0 -0
  83. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/mode.rst +0 -0
  84. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/nanguardmode.rst +0 -0
  85. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/opfromgraph.rst +0 -0
  86. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/ops.rst +0 -0
  87. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/profilemode.rst +0 -0
  88. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/compile/shared.rst +0 -0
  89. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/config.rst +0 -0
  90. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  91. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  92. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  93. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  94. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  95. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  96. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  97. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/mlp.html +0 -0
  98. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/mlp.png +0 -0
  99. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/mlp2.html +0 -0
  100. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  101. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/mlp2.png +0 -0
  102. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/ofg.html +0 -0
  103. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/examples/ofg2.html +0 -0
  104. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index.ipynb +0 -0
  105. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index.rst +0 -0
  106. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  107. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  108. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  109. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  110. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/features.rst +0 -0
  111. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/fgraph.rst +0 -0
  112. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/graph.rst +0 -0
  113. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/index.rst +0 -0
  114. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/op.rst +0 -0
  115. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/replace.rst +0 -0
  116. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/type.rst +0 -0
  117. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/graph/utils.rst +0 -0
  118. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/index.rst +0 -0
  119. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/misc/pkl_utils.rst +0 -0
  120. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/printing.rst +0 -0
  121. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/scalar/index.rst +0 -0
  122. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/scan.rst +0 -0
  123. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/sparse/index.rst +0 -0
  124. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/sparse/sandbox.rst +0 -0
  125. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/basic.rst +0 -0
  126. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/basic_opt.rst +0 -0
  127. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/bcast.png +0 -0
  128. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/bcast.svg +0 -0
  129. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/conv.rst +0 -0
  130. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/elemwise.rst +0 -0
  131. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/extra_ops.rst +0 -0
  132. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/fft.rst +0 -0
  133. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/functional.rst +0 -0
  134. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/index.rst +0 -0
  135. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/io.rst +0 -0
  136. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/math_opt.rst +0 -0
  137. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/nlinalg.rst +0 -0
  138. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/plot_fft.png +0 -0
  139. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/random/distributions.rst +0 -0
  140. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/random/index.rst +0 -0
  141. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/slinalg.rst +0 -0
  142. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/tensor/utils.rst +0 -0
  143. {pytensor-2.30.2 → pytensor-2.30.3}/doc/library/typed_list.rst +0 -0
  144. {pytensor-2.30.2 → pytensor-2.30.3}/doc/links.rst +0 -0
  145. {pytensor-2.30.2 → pytensor-2.30.3}/doc/optimizations.rst +0 -0
  146. {pytensor-2.30.2 → pytensor-2.30.3}/doc/pylintrc +0 -0
  147. {pytensor-2.30.2 → pytensor-2.30.3}/doc/robots.txt +0 -0
  148. {pytensor-2.30.2 → pytensor-2.30.3}/doc/troubleshooting.rst +0 -0
  149. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/adding.rst +0 -0
  150. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/adding_solution_1.py +0 -0
  151. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/aliasing.rst +0 -0
  152. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/apply.png +0 -0
  153. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/apply.svg +0 -0
  154. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/bcast.png +0 -0
  155. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/broadcasting.rst +0 -0
  156. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/conditions.rst +0 -0
  157. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/debug_faq.rst +0 -0
  158. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/dlogistic.png +0 -0
  159. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/examples.rst +0 -0
  160. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/faq_tutorial.rst +0 -0
  161. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/gradients.rst +0 -0
  162. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/index.rst +0 -0
  163. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/loading_and_saving.rst +0 -0
  164. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/logistic.gp +0 -0
  165. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/logistic.png +0 -0
  166. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/loop.rst +0 -0
  167. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/loop_solution_1.py +0 -0
  168. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/modes.rst +0 -0
  169. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/modes_solution_1.py +0 -0
  170. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/multi_cores.rst +0 -0
  171. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/nan_tutorial.rst +0 -0
  172. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/pics/d3viz.png +0 -0
  173. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  174. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  175. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  176. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/printing_drawing.rst +0 -0
  177. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/prng.rst +0 -0
  178. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/profiling.rst +0 -0
  179. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/profiling_example.py +0 -0
  180. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/profiling_example_out.prof +0 -0
  181. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/shape_info.rst +0 -0
  182. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/sparse.rst +0 -0
  183. {pytensor-2.30.2 → pytensor-2.30.3}/doc/tutorial/symbolic_graphs.rst +0 -0
  184. {pytensor-2.30.2 → pytensor-2.30.3}/doc/user_guide.rst +0 -0
  185. {pytensor-2.30.2 → pytensor-2.30.3}/pyproject.toml +0 -0
  186. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/__init__.py +0 -0
  187. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/bin/__init__.py +0 -0
  188. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/bin/pytensor_cache.py +0 -0
  189. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/breakpoint.py +0 -0
  190. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/__init__.py +0 -0
  191. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/builders.py +0 -0
  192. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/compiledir.py +0 -0
  193. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/compilelock.py +0 -0
  194. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/debugmode.py +0 -0
  195. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/function/__init__.py +0 -0
  196. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/function/pfunc.py +0 -0
  197. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/function/types.py +0 -0
  198. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/io.py +0 -0
  199. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/mode.py +0 -0
  200. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/monitormode.py +0 -0
  201. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/nanguardmode.py +0 -0
  202. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/ops.py +0 -0
  203. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/profiling.py +0 -0
  204. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/compile/sharedvalue.py +0 -0
  205. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/configdefaults.py +0 -0
  206. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/configparser.py +0 -0
  207. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/__init__.py +0 -0
  208. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  209. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/css/d3viz.css +0 -0
  210. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/d3viz.py +0 -0
  211. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/formatting.py +0 -0
  212. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  213. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  214. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/js/d3viz.js +0 -0
  215. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  216. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  217. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/gradient.py +0 -0
  218. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/__init__.py +0 -0
  219. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/basic.py +0 -0
  220. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/destroyhandler.py +0 -0
  221. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/features.py +0 -0
  222. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/fg.py +0 -0
  223. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/null_type.py +0 -0
  224. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/op.py +0 -0
  225. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/replace.py +0 -0
  226. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/__init__.py +0 -0
  227. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/basic.py +0 -0
  228. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/db.py +0 -0
  229. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/kanren.py +0 -0
  230. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/unify.py +0 -0
  231. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/rewriting/utils.py +0 -0
  232. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/type.py +0 -0
  233. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/graph/utils.py +0 -0
  234. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/ifelse.py +0 -0
  235. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/__init__.py +0 -0
  236. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/basic.py +0 -0
  237. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/__init__.py +0 -0
  238. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/basic.py +0 -0
  239. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  240. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  241. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/cmodule.py +0 -0
  242. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/cutils.py +0 -0
  243. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/cvm.py +0 -0
  244. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/exceptions.py +0 -0
  245. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/interface.py +0 -0
  246. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/lazylinker_c.py +0 -0
  247. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/op.py +0 -0
  248. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/params_type.py +0 -0
  249. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/c/type.py +0 -0
  250. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/__init__.py +0 -0
  251. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/__init__.py +0 -0
  252. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/basic.py +0 -0
  253. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/blas.py +0 -0
  254. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/blockwise.py +0 -0
  255. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/einsum.py +0 -0
  256. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  257. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  258. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/math.py +0 -0
  259. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
  260. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/pad.py +0 -0
  261. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/random.py +0 -0
  262. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/scalar.py +0 -0
  263. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/scan.py +0 -0
  264. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/shape.py +0 -0
  265. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
  266. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
  267. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/slinalg.py +0 -0
  268. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/sort.py +0 -0
  269. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/sparse.py +0 -0
  270. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/subtensor.py +0 -0
  271. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
  272. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/jax/linker.py +0 -0
  273. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/__init__.py +0 -0
  274. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/__init__.py +0 -0
  275. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/blockwise.py +0 -0
  276. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  277. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/elemwise.py +0 -0
  278. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  279. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
  280. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
  281. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
  282. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
  283. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/__init__.py +0 -0
  284. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/cholesky.py +0 -0
  285. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/general.py +0 -0
  286. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/norm.py +0 -0
  287. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/posdef.py +0 -0
  288. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/symmetric.py +0 -0
  289. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/triangular.py +0 -0
  290. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/tridiagonal.py +0 -0
  291. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/solve/utils.py +0 -0
  292. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
  293. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
  294. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/random.py +0 -0
  295. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/scalar.py +0 -0
  296. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/scan.py +0 -0
  297. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
  298. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
  299. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/slinalg.py +0 -0
  300. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/sparse.py +0 -0
  301. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/dispatch/subtensor.py +0 -0
  302. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/numba/linker.py +0 -0
  303. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
  304. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  305. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/blas.py +0 -0
  306. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
  307. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  308. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
  309. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/math.py +0 -0
  310. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
  311. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  312. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/shape.py +0 -0
  313. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/sort.py +0 -0
  314. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
  315. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/pytorch/linker.py +0 -0
  316. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/utils.py +0 -0
  317. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/link/vm.py +0 -0
  318. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/__init__.py +0 -0
  319. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/check_blas.py +0 -0
  320. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/check_blas_many.sh +0 -0
  321. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/check_duplicate_key.py +0 -0
  322. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  323. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/elemwise_time_test.py +0 -0
  324. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/frozendict.py +0 -0
  325. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/may_share_memory.py +0 -0
  326. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/ordered_set.py +0 -0
  327. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/misc/pkl_utils.py +0 -0
  328. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/npy_2_compat.py +0 -0
  329. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/printing.py +0 -0
  330. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/py.typed +0 -0
  331. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/raise_op.py +0 -0
  332. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/__init__.py +0 -0
  333. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  334. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  335. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/c_code/gamma.c +0 -0
  336. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/c_code/incbet.c +0 -0
  337. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/math.py +0 -0
  338. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scalar/sharedvar.py +0 -0
  339. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/__init__.py +0 -0
  340. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/basic.py +0 -0
  341. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/checkpoints.py +0 -0
  342. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/op.py +0 -0
  343. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/rewriting.py +0 -0
  344. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/scan_perform.pyx +0 -0
  345. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/scan_perform_ext.py +0 -0
  346. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/utils.py +0 -0
  347. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/scan/views.py +0 -0
  348. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/__init__.py +0 -0
  349. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/basic.py +0 -0
  350. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/rewriting.py +0 -0
  351. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/sandbox/__init__.py +0 -0
  352. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/sandbox/sp.py +0 -0
  353. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/sandbox/sp2.py +0 -0
  354. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/sharedvar.py +0 -0
  355. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/type.py +0 -0
  356. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/sparse/utils.py +0 -0
  357. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/__init__.py +0 -0
  358. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/blas.py +0 -0
  359. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/blas_c.py +0 -0
  360. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/blas_headers.py +0 -0
  361. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/blas_scipy.py +0 -0
  362. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
  363. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
  364. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/c_code/dimshuffle.c +0 -0
  365. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/conv/__init__.py +0 -0
  366. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/conv/abstract_conv.py +0 -0
  367. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/einsum.py +0 -0
  368. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/elemwise.py +0 -0
  369. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/elemwise_cgen.py +0 -0
  370. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/exceptions.py +0 -0
  371. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/extra_ops.py +0 -0
  372. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/fft.py +0 -0
  373. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/fourier.py +0 -0
  374. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/functional.py +0 -0
  375. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/inplace.py +0 -0
  376. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/interpolate.py +0 -0
  377. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/io.py +0 -0
  378. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/linalg.py +0 -0
  379. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/math.py +0 -0
  380. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/nlinalg.py +0 -0
  381. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/pad.py +0 -0
  382. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/__init__.py +0 -0
  383. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/basic.py +0 -0
  384. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/op.py +0 -0
  385. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  386. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/rewriting/basic.py +0 -0
  387. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/rewriting/jax.py +0 -0
  388. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/rewriting/numba.py +0 -0
  389. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/type.py +0 -0
  390. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/utils.py +0 -0
  391. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/random/var.py +0 -0
  392. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/__init__.py +0 -0
  393. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/basic.py +0 -0
  394. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/blas.py +0 -0
  395. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/blas_c.py +0 -0
  396. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
  397. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/einsum.py +0 -0
  398. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/extra_ops.py +0 -0
  399. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/jax.py +0 -0
  400. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/linalg.py +0 -0
  401. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/math.py +0 -0
  402. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/numba.py +0 -0
  403. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/ofg.py +0 -0
  404. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/shape.py +0 -0
  405. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/special.py +0 -0
  406. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/subtensor.py +0 -0
  407. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  408. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/shape.py +0 -0
  409. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/sharedvar.py +0 -0
  410. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/signal/__init__.py +0 -0
  411. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/signal/conv.py +0 -0
  412. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/slinalg.py +0 -0
  413. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/sort.py +0 -0
  414. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/special.py +0 -0
  415. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/subtensor.py +0 -0
  416. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/type_other.py +0 -0
  417. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/utils.py +0 -0
  418. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/var.py +0 -0
  419. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/variable.py +0 -0
  420. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/tensor/xlogx.py +0 -0
  421. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/typed_list/__init__.py +0 -0
  422. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/typed_list/basic.py +0 -0
  423. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/typed_list/rewriting.py +0 -0
  424. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/typed_list/type.py +0 -0
  425. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/updates.py +0 -0
  426. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor/utils.py +0 -0
  427. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor.egg-info/SOURCES.txt +0 -0
  428. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor.egg-info/dependency_links.txt +0 -0
  429. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor.egg-info/entry_points.txt +0 -0
  430. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor.egg-info/requires.txt +0 -0
  431. {pytensor-2.30.2 → pytensor-2.30.3}/pytensor.egg-info/top_level.txt +0 -0
  432. {pytensor-2.30.2 → pytensor-2.30.3}/scripts/mypy-failing.txt +0 -0
  433. {pytensor-2.30.2 → pytensor-2.30.3}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
  434. {pytensor-2.30.2 → pytensor-2.30.3}/setup.cfg +0 -0
  435. {pytensor-2.30.2 → pytensor-2.30.3}/setup.py +0 -0
  436. {pytensor-2.30.2 → pytensor-2.30.3}/tests/link/c/c_code/test_cenum.h +0 -0
  437. {pytensor-2.30.2 → pytensor-2.30.3}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  438. {pytensor-2.30.2 → pytensor-2.30.3}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
  439. {pytensor-2.30.2 → pytensor-2.30.3}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
  440. {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_breakpoint.py +0 -0
  441. {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_config.py +0 -0
  442. {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_gradient.py +0 -0
  443. {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_ifelse.py +0 -0
  444. {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_printing.py +0 -0
  445. {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_raise_op.py +0 -0
  446. {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_rop.py +0 -0
  447. {pytensor-2.30.2 → pytensor-2.30.3}/tests/test_updates.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytensor
3
- Version: 2.30.2
3
+ Version: 2.30.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: .. _license:
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-04-01T22:32:44+0200",
11
+ "date": "2025-04-09T15:18:32+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "0f5da80c16d5d053f39204d1a728e70e194bef6c",
15
- "version": "2.30.2"
14
+ "full-revisionid": "0c398e345af91d28c8dee7075d6d10cafe404025",
15
+ "version": "2.30.3"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -38,6 +38,7 @@ from pytensor.tensor.blas import BatchedDot
38
38
  from pytensor.tensor.math import Dot
39
39
  from pytensor.tensor.shape import Reshape, Shape, Shape_i, SpecifyShape
40
40
  from pytensor.tensor.slinalg import Solve
41
+ from pytensor.tensor.sort import ArgSortOp, SortOp
41
42
  from pytensor.tensor.type import TensorType
42
43
  from pytensor.tensor.type_other import MakeSlice, NoneConst
43
44
 
@@ -433,6 +434,68 @@ def numba_funcify_Shape_i(op, **kwargs):
433
434
  return shape_i
434
435
 
435
436
 
437
+ @numba_funcify.register(SortOp)
438
+ def numba_funcify_SortOp(op, node, **kwargs):
439
+ @numba_njit
440
+ def sort_f(a, axis):
441
+ axis = axis.item()
442
+
443
+ a_swapped = np.swapaxes(a, axis, -1)
444
+ a_sorted = np.sort(a_swapped)
445
+ a_sorted_swapped = np.swapaxes(a_sorted, -1, axis)
446
+
447
+ return a_sorted_swapped
448
+
449
+ if op.kind != "quicksort":
450
+ warnings.warn(
451
+ (
452
+ f'Numba function sort doesn\'t support kind="{op.kind}"'
453
+ " switching to `quicksort`."
454
+ ),
455
+ UserWarning,
456
+ )
457
+
458
+ return sort_f
459
+
460
+
461
+ @numba_funcify.register(ArgSortOp)
462
+ def numba_funcify_ArgSortOp(op, node, **kwargs):
463
+ def argsort_f_kind(kind):
464
+ @numba_njit
465
+ def argort_vec(X, axis):
466
+ axis = axis.item()
467
+
468
+ Y = np.swapaxes(X, axis, 0)
469
+ result = np.empty_like(Y)
470
+
471
+ indices = list(np.ndindex(Y.shape[1:]))
472
+
473
+ for idx in indices:
474
+ result[(slice(None), *idx)] = np.argsort(
475
+ Y[(slice(None), *idx)], kind=kind
476
+ )
477
+
478
+ result = np.swapaxes(result, 0, axis)
479
+
480
+ return result
481
+
482
+ return argort_vec
483
+
484
+ kind = op.kind
485
+
486
+ if kind not in ["quicksort", "mergesort"]:
487
+ kind = "quicksort"
488
+ warnings.warn(
489
+ (
490
+ f'Numba function argsort doesn\'t support kind="{op.kind}"'
491
+ " switching to `quicksort`."
492
+ ),
493
+ UserWarning,
494
+ )
495
+
496
+ return argsort_f_kind(kind)
497
+
498
+
436
499
  @numba.extending.intrinsic
437
500
  def direct_cast(typingctx, val, typ):
438
501
  if isinstance(typ, numba.types.TypeRef):
@@ -136,10 +136,7 @@ def numba_funcify_Join(op, **kwargs):
136
136
  def numba_funcify_Split(op, **kwargs):
137
137
  @numba_basic.numba_njit
138
138
  def split(tensor, axis, indices):
139
- # Work around for https://github.com/numba/numba/issues/8257
140
- axis = axis % tensor.ndim
141
- axis = numba_basic.to_scalar(axis)
142
- return np.split(tensor, np.cumsum(indices)[:-1], axis=axis)
139
+ return np.split(tensor, np.cumsum(indices)[:-1], axis=axis.item())
143
140
 
144
141
  return split
145
142
 
@@ -265,7 +265,7 @@ def _vectorized(
265
265
  ctx.nrt.incref(
266
266
  builder,
267
267
  sig.return_type.types[inplace_idx],
268
- outputs[inplace_idx]._get_value(),
268
+ outputs[inplace_idx]._getvalue(),
269
269
  )
270
270
  return ctx.make_tuple(
271
271
  builder, sig.return_type, [out._getvalue() for out in outputs]
@@ -1302,19 +1302,7 @@ class ScalarOp(COp):
1302
1302
  def __str__(self):
1303
1303
  if hasattr(self, "name") and self.name:
1304
1304
  return self.name
1305
- else:
1306
- param = [
1307
- (k, v)
1308
- for k, v in self.__dict__.items()
1309
- if k
1310
- not in ("name", "_op_use_c_code", "bool", "output_types_preference")
1311
- ]
1312
- if param:
1313
- classname = self.__class__.__name__
1314
- args = ", ".join(f"{k}={v}" for k, v in param)
1315
- return f"{classname}{{{args}}}"
1316
- else:
1317
- return self.__class__.__name__
1305
+ return self.__class__.__name__
1318
1306
 
1319
1307
  def c_code_cache_version(self):
1320
1308
  return (4,)
@@ -4102,6 +4090,7 @@ class ScalarInnerGraphOp(ScalarOp, HasInnerGraph):
4102
4090
 
4103
4091
  def __init__(self, *args, **kwargs):
4104
4092
  self.prepare_node_called = set()
4093
+ super().__init__(*args, **kwargs)
4105
4094
 
4106
4095
  def _cleanup_graph(self, inputs, outputs):
4107
4096
  # TODO: We could convert to TensorVariable, optimize graph,
@@ -4344,9 +4333,9 @@ class Composite(ScalarInnerGraphOp):
4344
4333
 
4345
4334
  # Rename internal variables
4346
4335
  for i, r in enumerate(self.fgraph.inputs):
4347
- r.name = f"i{int(i)}"
4336
+ r.name = f"i{i}"
4348
4337
  for i, r in enumerate(self.fgraph.outputs):
4349
- r.name = f"o{int(i)}"
4338
+ r.name = f"o{i}"
4350
4339
  io = set(self.fgraph.inputs + self.fgraph.outputs)
4351
4340
  for i, r in enumerate(self.fgraph.variables):
4352
4341
  if (
@@ -4354,7 +4343,7 @@ class Composite(ScalarInnerGraphOp):
4354
4343
  and r not in io
4355
4344
  and len(self.fgraph.clients[r]) > 1
4356
4345
  ):
4357
- r.name = f"t{int(i)}"
4346
+ r.name = f"t{i}"
4358
4347
 
4359
4348
  if len(self.fgraph.outputs) > 1 or len(self.fgraph.apply_nodes) > 10:
4360
4349
  self._name = "Composite{...}"
@@ -4441,16 +4430,12 @@ class Composite(ScalarInnerGraphOp):
4441
4430
  if hasattr(self, "_c_code"):
4442
4431
  return self._c_code
4443
4432
 
4444
- subd = dict(
4445
- chain(
4446
- ((e, f"%(i{int(i)})s") for i, e in enumerate(self.fgraph.inputs)),
4447
- ((e, f"%(o{int(i)})s") for i, e in enumerate(self.fgraph.outputs)),
4448
- )
4449
- )
4433
+ fg = self.fgraph
4434
+ subd = {e: f"%(i{i})s" for i, e in enumerate(fg.inputs)}
4450
4435
 
4451
- for var in self.fgraph.variables:
4436
+ for var in fg.variables:
4452
4437
  if var.owner is None:
4453
- if var not in self.fgraph.inputs:
4438
+ if var not in fg.inputs:
4454
4439
  # This is an orphan
4455
4440
  if isinstance(var, Constant) and isinstance(var.type, CLinkerType):
4456
4441
  subd[var] = f"({var.type.c_literal(var.data)})"
@@ -4465,30 +4450,35 @@ class Composite(ScalarInnerGraphOp):
4465
4450
  # flag for elemwise ops to check.
4466
4451
  self.inner_float16 = True
4467
4452
 
4468
- _c_code = "{\n"
4469
- self.nodenames = [
4470
- f"%(nodename)s_subnode{int(j)}"
4471
- for j, n in enumerate(self.fgraph.toposort())
4472
- ]
4453
+ self.nodenames = nodenames = [] # Used by self.c_support_code_apply
4473
4454
 
4455
+ _c_code = "{\n"
4474
4456
  i = 0
4475
- for j, node in enumerate(self.fgraph.toposort()):
4457
+ for j, node in enumerate(fg.toposort()):
4476
4458
  for output in node.outputs:
4477
4459
  if output not in subd:
4478
4460
  i += 1
4479
- name = f"V%(id)s_tmp{int(i)}"
4461
+ name = f"V%(id)s_tmp{i}"
4480
4462
  subd[output] = name
4481
4463
  _c_code += f"{output.type.dtype_specs()[1]} {name};\n"
4464
+
4465
+ nodename = f"%(nodename)s_subnode{j}"
4466
+ nodenames.append(nodename)
4467
+
4482
4468
  s = node.op.c_code(
4483
4469
  node,
4484
- self.nodenames[j],
4470
+ nodename,
4485
4471
  [subd[input] for input in node.inputs],
4486
4472
  [subd[output] for output in node.outputs],
4487
- dict(fail="%(fail)s", id=f"%(id)s_{int(j)}"),
4473
+ dict(fail="%(fail)s", id=f"%(id)s_{j}"),
4488
4474
  )
4489
4475
  _c_code += s
4490
4476
  _c_code += "\n"
4491
4477
 
4478
+ # Copy the temporary outputs to the real outputs
4479
+ for i, output in enumerate(fg.outputs):
4480
+ _c_code += f"%(o{i})s = {subd[output]};\n"
4481
+
4492
4482
  _c_code += "}\n"
4493
4483
 
4494
4484
  self._c_code = _c_code
@@ -4498,8 +4488,8 @@ class Composite(ScalarInnerGraphOp):
4498
4488
  def c_code(self, node, nodename, inames, onames, sub):
4499
4489
  d = dict(
4500
4490
  chain(
4501
- zip((f"i{int(i)}" for i in range(len(inames))), inames, strict=True),
4502
- zip((f"o{int(i)}" for i in range(len(onames))), onames, strict=True),
4491
+ zip((f"i{i}" for i in range(len(inames))), inames, strict=True),
4492
+ zip((f"o{i}" for i in range(len(onames))), onames, strict=True),
4503
4493
  ),
4504
4494
  **sub,
4505
4495
  )
@@ -4512,7 +4502,7 @@ class Composite(ScalarInnerGraphOp):
4512
4502
  return self.c_code_template % d
4513
4503
 
4514
4504
  def c_code_cache_version_outer(self) -> tuple[int, ...]:
4515
- return (5,)
4505
+ return (6,)
4516
4506
 
4517
4507
 
4518
4508
  class Compositef32:
@@ -55,6 +55,7 @@ class ScalarLoop(ScalarInnerGraphOp):
55
55
  constant: Sequence[Variable] | None = None,
56
56
  until: Variable | None = None,
57
57
  name="ScalarLoop",
58
+ **kwargs,
58
59
  ):
59
60
  if constant is None:
60
61
  constant = []
@@ -75,7 +76,7 @@ class ScalarLoop(ScalarInnerGraphOp):
75
76
  self.nout = len(self.outputs)
76
77
  self.name = name
77
78
 
78
- super().__init__()
79
+ super().__init__(**kwargs)
79
80
 
80
81
  def output_types(self, input_types):
81
82
  return self.outputs_type
@@ -115,7 +116,7 @@ class ScalarLoop(ScalarInnerGraphOp):
115
116
  self._fgraph = fgraph
116
117
  return self._fgraph
117
118
 
118
- def clone(self):
119
+ def clone(self, name=None, **kwargs):
119
120
  if self.is_while:
120
121
  *update, until = self.outputs
121
122
  else:
@@ -127,7 +128,8 @@ class ScalarLoop(ScalarInnerGraphOp):
127
128
  update=update,
128
129
  constant=constant,
129
130
  until=until,
130
- name=self.name,
131
+ name=self.name if name is None else name,
132
+ **kwargs,
131
133
  )
132
134
 
133
135
  @property
@@ -135,20 +137,7 @@ class ScalarLoop(ScalarInnerGraphOp):
135
137
  raise NotImplementedError
136
138
 
137
139
  def make_new_inplace(self, output_types_preference=None, name=None):
138
- """
139
- This op.__init__ fct don't have the same parameter as other scalar op.
140
- This break the insert_inplace_optimizer optimization.
141
- This fct allow fix patch this.
142
-
143
- """
144
- d = {k: getattr(self, k) for k in self.init_param}
145
- out = self.__class__(**d)
146
- if name:
147
- out.name = name
148
- else:
149
- name = out.name
150
- super(ScalarLoop, out).__init__(output_types_preference, name)
151
- return out
140
+ return self.clone(output_types_preference=output_types_preference, name=name)
152
141
 
153
142
  def make_node(self, n_steps, *inputs):
154
143
  assert len(inputs) == self.nin - 1
@@ -223,17 +212,15 @@ class ScalarLoop(ScalarInnerGraphOp):
223
212
  # The first input is `n_steps` so we skip it in the mapping dictionary
224
213
  n_update = len(self.outputs) - (1 if self.is_while else 0)
225
214
  carry_subd = {
226
- c: f"%(i{int(i)})s" for i, c in enumerate(fgraph.inputs[:n_update], start=1)
215
+ c: f"%(i{i})s" for i, c in enumerate(fgraph.inputs[:n_update], start=1)
227
216
  }
228
217
  constant_subd = {
229
- c: f"%(i{int(i)})s"
218
+ c: f"%(i{i})s"
230
219
  for i, c in enumerate(fgraph.inputs[n_update:], start=n_update + 1)
231
220
  }
232
- update_subd = {
233
- u: f"%(o{int(i)})s" for i, u in enumerate(fgraph.outputs[:n_update])
234
- }
221
+ out_subd = {u: f"%(o{i})s" for i, u in enumerate(fgraph.outputs[:n_update])}
235
222
  until_subd = {u: "until" for u in fgraph.outputs[n_update:]}
236
- subd = {**carry_subd, **constant_subd, **update_subd, **until_subd}
223
+ subd = {**carry_subd, **constant_subd, **until_subd}
237
224
 
238
225
  for var in fgraph.variables:
239
226
  if var.owner is None:
@@ -257,11 +244,11 @@ class ScalarLoop(ScalarInnerGraphOp):
257
244
  _c_code += "bool until = 1;\n\n"
258
245
 
259
246
  # Copy carried inputs
260
- for i, (var, name) in enumerate(carry_subd.items()):
261
- copy_var_name = f"{name}_copy{i}"
262
- _c_code += f"{var.type.dtype_specs()[1]} {copy_var_name} = {name};\n"
263
- carry_subd[var] = copy_var_name
264
- subd[var] = copy_var_name
247
+ for i, (var, name) in enumerate(carry_subd.items(), start=1):
248
+ carry_var_name = f"{name}_carry{i}"
249
+ _c_code += f"{var.type.dtype_specs()[1]} {carry_var_name} = {name};\n"
250
+ carry_subd[var] = carry_var_name
251
+ subd[var] = carry_var_name
265
252
 
266
253
  # _c_code += 'printf("inputs=[");'
267
254
  # for i in range(1, len(fgraph.inputs)):
@@ -270,34 +257,39 @@ class ScalarLoop(ScalarInnerGraphOp):
270
257
 
271
258
  _c_code += "\nfor(%(n_steps_dtype)s i = 0; i < %(n_steps)s; i++){\n"
272
259
 
273
- self.nodenames = [
274
- f"%(nodename)s_subnode{int(j)}" for j, n in enumerate(fgraph.toposort())
275
- ]
260
+ # Used by self.c_support_code_apply
261
+ self.nodenames = nodenames = []
276
262
 
277
263
  i = 0
278
264
  for j, node in enumerate(fgraph.toposort()):
279
265
  for output in node.outputs:
280
266
  if output not in subd:
281
267
  i += 1
282
- name = f"V%(id)s_tmp{int(i)}"
268
+ name = f"V%(id)s_tmp{i}"
283
269
  subd[output] = name
284
270
  _c_code += f"{output.type.dtype_specs()[1]} {name};\n"
271
+
272
+ nodename = f"%(nodename)s_subnode{j}"
273
+ nodenames.append(nodename)
274
+
285
275
  s = node.op.c_code(
286
276
  node,
287
- self.nodenames[j],
277
+ nodename,
288
278
  # Any node that depended on `init` will depend on `update` instead
289
279
  # The initial value of `update` was set to `init` before the loop
290
280
  [subd[input] for input in node.inputs],
291
281
  [subd[output] for output in node.outputs],
292
- dict(fail="%(fail)s", id=f"%(id)s_{int(j)}"),
282
+ dict(fail="%(fail)s", id=f"%(id)s_{j}"),
293
283
  )
294
284
  _c_code += s
295
285
  _c_code += "\n"
296
286
 
297
- # Set the carry variables to the output variables
287
+ # Update the carry variables to the output variables
298
288
  _c_code += "\n"
299
- for init, update in zip(carry_subd.values(), update_subd.values(), strict=True):
300
- _c_code += f"{init} = {update};\n"
289
+ for carry, out in zip(
290
+ carry_subd.values(), fgraph.outputs[:n_update], strict=True
291
+ ):
292
+ _c_code += f"{carry} = {subd[out]};\n"
301
293
 
302
294
  # _c_code += 'printf("%%ld\\n", i);\n'
303
295
  # for carry in range(1, 10):
@@ -309,6 +301,10 @@ class ScalarLoop(ScalarInnerGraphOp):
309
301
  # End of the loop
310
302
  _c_code += "}\n"
311
303
 
304
+ # Assign the carry variables to the outputs
305
+ for out, carry in zip(out_subd.values(), carry_subd.values(), strict=True):
306
+ _c_code += f"{out} = {carry};\n"
307
+
312
308
  # Output until flag
313
309
  if self.is_while:
314
310
  _c_code += f"%(o{len(fgraph.outputs)-1})s = until;\n"
@@ -322,8 +318,8 @@ class ScalarLoop(ScalarInnerGraphOp):
322
318
  def c_code(self, node, nodename, inames, onames, sub):
323
319
  d = dict(
324
320
  chain(
325
- zip((f"i{int(i)}" for i in range(len(inames))), inames, strict=True),
326
- zip((f"o{int(i)}" for i in range(len(onames))), onames, strict=True),
321
+ zip((f"i{i}" for i in range(len(inames))), inames, strict=True),
322
+ zip((f"o{i}" for i in range(len(onames))), onames, strict=True),
327
323
  ),
328
324
  **sub,
329
325
  )
@@ -343,4 +339,4 @@ class ScalarLoop(ScalarInnerGraphOp):
343
339
  return res
344
340
 
345
341
  def c_code_cache_version_outer(self):
346
- return (3,)
342
+ return (4,)