pytensor 3.2.4__tar.gz → 3.3.1__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 (626) hide show
  1. {pytensor-3.2.4/pytensor.egg-info → pytensor-3.3.1}/PKG-INFO +4 -3
  2. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/graph/index.rst +1 -0
  3. pytensor-3.3.1/doc/library/graph/traversal.rst +8 -0
  4. {pytensor-3.2.4 → pytensor-3.3.1}/pyproject.toml +18 -6
  5. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/_version.py +3 -3
  6. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/mode.py +3 -1
  7. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/gradient.py +2 -2
  8. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/basic.py +1 -2
  9. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/replace.py +0 -2
  10. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/rewriting/basic.py +20 -10
  11. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/traversal.py +3 -2
  12. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/subtensor.py +7 -1
  13. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/basic.py +23 -7
  14. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/linalg/solvers.py +20 -0
  15. pytensor-3.3.1/pytensor/link/mlx/dispatch/scalar/__init__.py +10 -0
  16. pytensor-3.2.4/pytensor/link/mlx/dispatch/scalar.py → pytensor-3.3.1/pytensor/link/mlx/dispatch/scalar/basic.py +9 -51
  17. pytensor-3.3.1/pytensor/link/mlx/dispatch/scalar/bessel.py +525 -0
  18. pytensor-3.3.1/pytensor/link/mlx/dispatch/scalar/beta.py +1124 -0
  19. pytensor-3.3.1/pytensor/link/mlx/dispatch/scalar/erf.py +326 -0
  20. pytensor-3.3.1/pytensor/link/mlx/dispatch/scalar/erfcinv.py +150 -0
  21. pytensor-3.3.1/pytensor/link/mlx/dispatch/scalar/gamma.py +56 -0
  22. pytensor-3.3.1/pytensor/link/mlx/dispatch/scalar/gammainc.py +549 -0
  23. pytensor-3.3.1/pytensor/link/mlx/dispatch/scalar/helpers.py +136 -0
  24. pytensor-3.3.1/pytensor/link/mlx/dispatch/scalar/math.py +174 -0
  25. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/__init__.py +3 -0
  26. pytensor-3.3.1/pytensor/link/numba/dispatch/_patch_list_to_tuple.py +330 -0
  27. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/_patch_pointer_add.py +8 -5
  28. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/elemwise.py +87 -7
  29. pytensor-3.3.1/pytensor/link/numba/dispatch/linalg/_BLAS.py +74 -0
  30. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -44
  31. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/dispatch.py +1 -1
  32. pytensor-3.3.1/pytensor/link/numba/dispatch/linalg/solvers/triangular.py +134 -0
  33. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/subtensor.py +100 -38
  34. pytensor-3.3.1/pytensor/link/numba/dispatch/tensor_basic.py +445 -0
  35. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/vectorize_codegen.py +6 -11
  36. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scalar/basic.py +17 -6
  37. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scalar/math.py +3 -0
  38. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/sparse/math.py +8 -1
  39. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/basic.py +6 -6
  40. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blockwise.py +20 -5
  41. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/extra_ops.py +4 -0
  42. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/pad.py +214 -226
  43. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/linalg/summary.py +4 -7
  44. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/math.py +68 -25
  45. pytensor-3.3.1/pytensor/tensor/rewriting/ofg.py +83 -0
  46. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/subtensor.py +48 -22
  47. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/subtensor.py +14 -15
  48. {pytensor-3.2.4 → pytensor-3.3.1/pytensor.egg-info}/PKG-INFO +4 -3
  49. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor.egg-info/SOURCES.txt +13 -1
  50. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor.egg-info/requires.txt +2 -2
  51. pytensor-3.2.4/pytensor/link/numba/dispatch/linalg/solvers/triangular.py +0 -113
  52. pytensor-3.2.4/pytensor/link/numba/dispatch/tensor_basic.py +0 -257
  53. pytensor-3.2.4/pytensor/tensor/rewriting/ofg.py +0 -34
  54. {pytensor-3.2.4 → pytensor-3.3.1}/LICENSE.txt +0 -0
  55. {pytensor-3.2.4 → pytensor-3.3.1}/MANIFEST.in +0 -0
  56. {pytensor-3.2.4 → pytensor-3.3.1}/README.rst +0 -0
  57. {pytensor-3.2.4 → pytensor-3.3.1}/doc/.templates/PLACEHOLDER +0 -0
  58. {pytensor-3.2.4 → pytensor-3.3.1}/doc/.templates/layout.html +0 -0
  59. {pytensor-3.2.4 → pytensor-3.3.1}/doc/.templates/nb-badges.html +0 -0
  60. {pytensor-3.2.4 → pytensor-3.3.1}/doc/.templates/rendered_citation.html +0 -0
  61. {pytensor-3.2.4 → pytensor-3.3.1}/doc/LICENSE.txt +0 -0
  62. {pytensor-3.2.4 → pytensor-3.3.1}/doc/README.md +0 -0
  63. {pytensor-3.2.4 → pytensor-3.3.1}/doc/_drafts/benchmark_mlx_v_jax_corrected.ipynb +0 -0
  64. {pytensor-3.2.4 → pytensor-3.3.1}/doc/_thumbnails/autodiff/vector_jacobian_product.png +0 -0
  65. {pytensor-3.2.4 → pytensor-3.3.1}/doc/acknowledgement.rst +0 -0
  66. {pytensor-3.2.4 → pytensor-3.3.1}/doc/bcast.png +0 -0
  67. {pytensor-3.2.4 → pytensor-3.3.1}/doc/bcast.svg +0 -0
  68. {pytensor-3.2.4 → pytensor-3.3.1}/doc/blog.md +0 -0
  69. {pytensor-3.2.4 → pytensor-3.3.1}/doc/conf.py +0 -0
  70. {pytensor-3.2.4 → pytensor-3.3.1}/doc/core_development_guide.rst +0 -0
  71. {pytensor-3.2.4 → pytensor-3.3.1}/doc/css.inc +0 -0
  72. {pytensor-3.2.4 → pytensor-3.3.1}/doc/dev_start_guide.rst +0 -0
  73. {pytensor-3.2.4 → pytensor-3.3.1}/doc/environment.yml +0 -0
  74. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/apply.png +0 -0
  75. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/apply.svg +0 -0
  76. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/apply2.svg +0 -0
  77. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/creating_a_c_op.rst +0 -0
  78. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  79. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/creating_an_op.rst +0 -0
  80. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/ctype.rst +0 -0
  81. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/extending_faq.rst +0 -0
  82. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/extending_pytensor_solution_1.py +0 -0
  83. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/graph_rewriting.rst +0 -0
  84. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/graphstructures.rst +0 -0
  85. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/index.rst +0 -0
  86. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/inplace.rst +0 -0
  87. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/op.rst +0 -0
  88. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/other_ops.rst +0 -0
  89. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  90. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  91. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/pipeline.rst +0 -0
  92. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/scan.rst +0 -0
  93. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/tips.rst +0 -0
  94. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/type.rst +0 -0
  95. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/unification_kanren.rst +0 -0
  96. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/unittest.rst +0 -0
  97. {pytensor-3.2.4 → pytensor-3.3.1}/doc/extending/using_params.rst +0 -0
  98. {pytensor-3.2.4 → pytensor-3.3.1}/doc/faq.rst +0 -0
  99. {pytensor-3.2.4 → pytensor-3.3.1}/doc/gallery/applications/normalizing_flows_in_pytensor.ipynb +0 -0
  100. {pytensor-3.2.4 → pytensor-3.3.1}/doc/gallery/applications/tiny_transformer_llm.ipynb +0 -0
  101. {pytensor-3.2.4 → pytensor-3.3.1}/doc/gallery/autodiff/vector_jacobian_product.ipynb +0 -0
  102. {pytensor-3.2.4 → pytensor-3.3.1}/doc/gallery/introduction/pytensor_intro.ipynb +0 -0
  103. {pytensor-3.2.4 → pytensor-3.3.1}/doc/gallery/optimize/root.ipynb +0 -0
  104. {pytensor-3.2.4 → pytensor-3.3.1}/doc/gallery/page_footer.md +0 -0
  105. {pytensor-3.2.4 → pytensor-3.3.1}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
  106. {pytensor-3.2.4 → pytensor-3.3.1}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
  107. {pytensor-3.2.4 → pytensor-3.3.1}/doc/generate_dtype_tensor_table.py +0 -0
  108. {pytensor-3.2.4 → pytensor-3.3.1}/doc/glossary.rst +0 -0
  109. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/Elman_srnn.png +0 -0
  110. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/PyTensor.png +0 -0
  111. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/PyTensor_RGB.svg +0 -0
  112. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/PyTensor_logo.png +0 -0
  113. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/binder.svg +0 -0
  114. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/blocksparse.png +0 -0
  115. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/colab.svg +0 -0
  116. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/github.svg +0 -0
  117. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/lstm.png +0 -0
  118. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/lstm_memorycell.png +0 -0
  119. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/talk2010.gif +0 -0
  120. {pytensor-3.2.4 → pytensor-3.3.1}/doc/images/talk2010.png +0 -0
  121. {pytensor-3.2.4 → pytensor-3.3.1}/doc/index.rst +0 -0
  122. {pytensor-3.2.4 → pytensor-3.3.1}/doc/install.rst +0 -0
  123. {pytensor-3.2.4 → pytensor-3.3.1}/doc/internal/how_to_release.rst +0 -0
  124. {pytensor-3.2.4 → pytensor-3.3.1}/doc/internal/index.rst +0 -0
  125. {pytensor-3.2.4 → pytensor-3.3.1}/doc/internal/metadocumentation.rst +0 -0
  126. {pytensor-3.2.4 → pytensor-3.3.1}/doc/introduction.rst +0 -0
  127. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/compile/debugmode.rst +0 -0
  128. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/compile/function.rst +0 -0
  129. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/compile/index.rst +0 -0
  130. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/compile/io.rst +0 -0
  131. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/compile/mode.rst +0 -0
  132. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/compile/nanguardmode.rst +0 -0
  133. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/compile/opfromgraph.rst +0 -0
  134. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/compile/ops.rst +0 -0
  135. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/compile/profilemode.rst +0 -0
  136. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/compile/shared.rst +0 -0
  137. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/config.rst +0 -0
  138. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  139. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  140. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  141. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  142. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  143. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  144. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  145. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/mlp.html +0 -0
  146. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/mlp.png +0 -0
  147. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/mlp2.html +0 -0
  148. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  149. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/mlp2.png +0 -0
  150. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/ofg.html +0 -0
  151. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/examples/ofg2.html +0 -0
  152. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/index.ipynb +0 -0
  153. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/index.rst +0 -0
  154. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  155. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  156. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  157. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  158. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/graph/features.rst +0 -0
  159. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/graph/fgraph.rst +0 -0
  160. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/graph/graph.rst +0 -0
  161. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/graph/op.rst +0 -0
  162. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/graph/replace.rst +0 -0
  163. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/graph/type.rst +0 -0
  164. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/graph/utils.rst +0 -0
  165. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/index.rst +0 -0
  166. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/misc/pkl_utils.rst +0 -0
  167. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/printing.rst +0 -0
  168. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/scalar/index.rst +0 -0
  169. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/scan.rst +0 -0
  170. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/sparse/index.rst +0 -0
  171. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/sparse/sandbox.rst +0 -0
  172. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/basic.rst +0 -0
  173. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/basic_opt.rst +0 -0
  174. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/bcast.png +0 -0
  175. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/bcast.svg +0 -0
  176. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/elemwise.rst +0 -0
  177. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/extra_ops.rst +0 -0
  178. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/fft.rst +0 -0
  179. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/functional.rst +0 -0
  180. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/index.rst +0 -0
  181. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/io.rst +0 -0
  182. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/linalg.rst +0 -0
  183. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/math_opt.rst +0 -0
  184. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/nlinalg.rst +0 -0
  185. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/optimize.rst +0 -0
  186. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/plot_fft.png +0 -0
  187. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/random.rst +0 -0
  188. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/slinalg.rst +0 -0
  189. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/tensor/utils.rst +0 -0
  190. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/typed_list.rst +0 -0
  191. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/xtensor/index.md +0 -0
  192. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/xtensor/linalg.md +0 -0
  193. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/xtensor/math.md +0 -0
  194. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/xtensor/module_functions.md +0 -0
  195. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/xtensor/random.md +0 -0
  196. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/xtensor/signal.md +0 -0
  197. {pytensor-3.2.4 → pytensor-3.3.1}/doc/library/xtensor/type.md +0 -0
  198. {pytensor-3.2.4 → pytensor-3.3.1}/doc/links.rst +0 -0
  199. {pytensor-3.2.4 → pytensor-3.3.1}/doc/optimizations.rst +0 -0
  200. {pytensor-3.2.4 → pytensor-3.3.1}/doc/pylintrc +0 -0
  201. {pytensor-3.2.4 → pytensor-3.3.1}/doc/robots.txt +0 -0
  202. {pytensor-3.2.4 → pytensor-3.3.1}/doc/troubleshooting.rst +0 -0
  203. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/adding.rst +0 -0
  204. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/adding_solution_1.py +0 -0
  205. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/aliasing.rst +0 -0
  206. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/apply.png +0 -0
  207. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/apply.svg +0 -0
  208. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/bcast.png +0 -0
  209. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/broadcasting.rst +0 -0
  210. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/conditions.rst +0 -0
  211. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/debug_faq.rst +0 -0
  212. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/dlogistic.png +0 -0
  213. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/examples.rst +0 -0
  214. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/faq_tutorial.rst +0 -0
  215. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/gradients.rst +0 -0
  216. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/index.rst +0 -0
  217. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/loading_and_saving.rst +0 -0
  218. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/logistic.gp +0 -0
  219. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/logistic.png +0 -0
  220. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/loop.rst +0 -0
  221. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/loop_solution_1.py +0 -0
  222. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/modes.rst +0 -0
  223. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/modes_solution_1.py +0 -0
  224. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/multi_cores.rst +0 -0
  225. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/nan_tutorial.rst +0 -0
  226. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/pics/d3viz.png +0 -0
  227. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  228. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  229. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  230. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/printing_drawing.rst +0 -0
  231. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/prng.rst +0 -0
  232. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/profiling.rst +0 -0
  233. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/profiling_example.py +0 -0
  234. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/profiling_example_out.prof +0 -0
  235. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/shape_info.rst +0 -0
  236. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/sparse.rst +0 -0
  237. {pytensor-3.2.4 → pytensor-3.3.1}/doc/tutorial/symbolic_graphs.rst +0 -0
  238. {pytensor-3.2.4 → pytensor-3.3.1}/doc/user_guide.rst +0 -0
  239. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/__init__.py +0 -0
  240. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/_sparse_lazy.py +0 -0
  241. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/__init__.py +0 -0
  242. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/alloc.py +0 -0
  243. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/blockwise.py +0 -0
  244. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/core.py +0 -0
  245. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/diagonal.py +0 -0
  246. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/dimshuffle.py +0 -0
  247. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/dot.py +0 -0
  248. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/elemwise.py +0 -0
  249. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/orthogonal.py +0 -0
  250. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/permutation.py +0 -0
  251. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/positive_definite.py +0 -0
  252. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/reshape.py +0 -0
  253. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/selection.py +0 -0
  254. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/shape.py +0 -0
  255. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/specify.py +0 -0
  256. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/subtensor.py +0 -0
  257. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/symmetric.py +0 -0
  258. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/assumptions/triangular.py +0 -0
  259. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/basic.py +0 -0
  260. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/bin/__init__.py +0 -0
  261. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/bin/pytensor_cache.py +0 -0
  262. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/breakpoint.py +0 -0
  263. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/__init__.py +0 -0
  264. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/aliasing.py +0 -0
  265. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/builders.py +0 -0
  266. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/compiledir.py +0 -0
  267. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/compilelock.py +0 -0
  268. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/debug/__init__.py +0 -0
  269. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/debug/debugmode.py +0 -0
  270. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/debug/dump.py +0 -0
  271. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/debug/monitormode.py +0 -0
  272. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/debug/nanguardmode.py +0 -0
  273. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/debug/profiling.py +0 -0
  274. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/executor.py +0 -0
  275. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/inner_function.py +0 -0
  276. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/io.py +0 -0
  277. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/maker.py +0 -0
  278. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/ops.py +0 -0
  279. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/rebuild.py +0 -0
  280. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/rewriting.py +0 -0
  281. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/compile/sharedvalue.py +0 -0
  282. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/configdefaults.py +0 -0
  283. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/configparser.py +0 -0
  284. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/__init__.py +0 -0
  285. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  286. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/css/d3viz.css +0 -0
  287. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/d3viz.py +0 -0
  288. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/formatting.py +0 -0
  289. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/html/template.html +0 -0
  290. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  291. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  292. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/js/d3viz.js +0 -0
  293. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  294. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  295. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/__init__.py +0 -0
  296. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/destroyhandler.py +0 -0
  297. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/features.py +0 -0
  298. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/fg.py +0 -0
  299. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/null_type.py +0 -0
  300. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/op.py +0 -0
  301. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/rewriting/__init__.py +0 -0
  302. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/rewriting/db.py +0 -0
  303. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/rewriting/kanren.py +0 -0
  304. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/rewriting/reachability.py +0 -0
  305. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/rewriting/unify.py +0 -0
  306. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/rewriting/utils.py +0 -0
  307. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/type.py +0 -0
  308. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/graph/utils.py +0 -0
  309. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/ifelse.py +0 -0
  310. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/ipython.py +0 -0
  311. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/__init__.py +0 -0
  312. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/basic.py +0 -0
  313. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/__init__.py +0 -0
  314. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/basic.py +0 -0
  315. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  316. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  317. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/cmodule.py +0 -0
  318. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/cutils.py +0 -0
  319. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/cvm.py +0 -0
  320. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/exceptions.py +0 -0
  321. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/interface.py +0 -0
  322. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/lazylinker_c.py +0 -0
  323. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/op.py +0 -0
  324. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/params_type.py +0 -0
  325. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/c/type.py +0 -0
  326. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/__init__.py +0 -0
  327. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/__init__.py +0 -0
  328. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/basic.py +0 -0
  329. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/blas.py +0 -0
  330. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/blockwise.py +0 -0
  331. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/einsum.py +0 -0
  332. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  333. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  334. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/linalg/__init__.py +0 -0
  335. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/linalg/constructors.py +0 -0
  336. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/linalg/decomposition.py +0 -0
  337. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/linalg/inverse.py +0 -0
  338. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/linalg/products.py +0 -0
  339. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/linalg/solvers.py +0 -0
  340. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/linalg/summary.py +0 -0
  341. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/math.py +0 -0
  342. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/pad.py +0 -0
  343. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/random.py +0 -0
  344. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/scalar.py +0 -0
  345. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/scan.py +0 -0
  346. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/shape.py +0 -0
  347. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
  348. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
  349. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/sort.py +0 -0
  350. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/sparse.py +0 -0
  351. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
  352. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/linker.py +0 -0
  353. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/jax/ops.py +0 -0
  354. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/__init__.py +0 -0
  355. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/__init__.py +0 -0
  356. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/blas.py +0 -0
  357. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/blockwise.py +0 -0
  358. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/einsum.py +0 -0
  359. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/elemwise.py +0 -0
  360. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/extra_ops.py +0 -0
  361. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/linalg/__init__.py +0 -0
  362. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/linalg/decomposition.py +0 -0
  363. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/linalg/inverse.py +0 -0
  364. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/linalg/products.py +0 -0
  365. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/linalg/summary.py +0 -0
  366. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/math.py +0 -0
  367. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/pad.py +0 -0
  368. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/shape.py +0 -0
  369. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/signal/__init__.py +0 -0
  370. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/signal/conv.py +0 -0
  371. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/sort.py +0 -0
  372. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/subtensor.py +0 -0
  373. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/dispatch/tensor_basic.py +0 -0
  374. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/mlx/linker.py +0 -0
  375. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/__init__.py +0 -0
  376. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/cache.py +0 -0
  377. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/_llvmlite_self_ref.py +0 -0
  378. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/basic.py +0 -0
  379. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/blockwise.py +0 -0
  380. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/compile_ops.py +0 -0
  381. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  382. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  383. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
  384. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/constructors.py +0 -0
  385. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
  386. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
  387. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/decomposition/dispatch.py +0 -0
  388. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/decomposition/eigen.py +0 -0
  389. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
  390. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
  391. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/decomposition/qr.py +0 -0
  392. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/decomposition/qz.py +0 -0
  393. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/decomposition/schur.py +0 -0
  394. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/decomposition/svd.py +0 -0
  395. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/inverse.py +0 -0
  396. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/products.py +0 -0
  397. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/__init__.py +0 -0
  398. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/cholesky.py +0 -0
  399. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/general.py +0 -0
  400. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/hermitian.py +0 -0
  401. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/linear_control.py +0 -0
  402. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/lu_solve.py +0 -0
  403. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/posdef.py +0 -0
  404. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/symmetric.py +0 -0
  405. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/tridiagonal.py +0 -0
  406. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/solvers/utils.py +0 -0
  407. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/summary.py +0 -0
  408. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
  409. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/random.py +0 -0
  410. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/scalar.py +0 -0
  411. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/scan.py +0 -0
  412. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/shape.py +0 -0
  413. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
  414. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
  415. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/sort.py +0 -0
  416. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/sparse/__init__.py +0 -0
  417. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/sparse/basic.py +0 -0
  418. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/sparse/math.py +0 -0
  419. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/sparse/variable.py +0 -0
  420. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/string_codegen.py +0 -0
  421. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/dispatch/typed_list.py +0 -0
  422. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/numba/linker.py +0 -0
  423. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
  424. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  425. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/blas.py +0 -0
  426. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
  427. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  428. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
  429. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/linalg/__init__.py +0 -0
  430. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/linalg/decomposition.py +0 -0
  431. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/linalg/inverse.py +0 -0
  432. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/linalg/products.py +0 -0
  433. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/linalg/summary.py +0 -0
  434. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/math.py +0 -0
  435. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  436. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/shape.py +0 -0
  437. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/sort.py +0 -0
  438. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
  439. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/pytorch/linker.py +0 -0
  440. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/utils.py +0 -0
  441. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/link/vm.py +0 -0
  442. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/misc/__init__.py +0 -0
  443. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/misc/check_blas.py +0 -0
  444. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/misc/check_blas_many.sh +0 -0
  445. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/misc/check_duplicate_key.py +0 -0
  446. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  447. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/misc/elemwise_time_test.py +0 -0
  448. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/misc/frozendict.py +0 -0
  449. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/misc/may_share_memory.py +0 -0
  450. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/misc/ordered_set.py +0 -0
  451. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/misc/pkl_utils.py +0 -0
  452. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/npy_2_compat.py +0 -0
  453. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/printing.py +0 -0
  454. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/py.typed +0 -0
  455. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/raise_op.py +0 -0
  456. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scalar/__init__.py +0 -0
  457. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  458. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  459. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scalar/c_code/gamma.c +0 -0
  460. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scalar/c_code/incbet.c +0 -0
  461. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scalar/loop.py +0 -0
  462. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scalar/sharedvar.py +0 -0
  463. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/__init__.py +0 -0
  464. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/basic.py +0 -0
  465. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/checkpoints.py +0 -0
  466. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/op.py +0 -0
  467. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/rewriting/__init__.py +0 -0
  468. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/rewriting/db.py +0 -0
  469. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/rewriting/inner_graph.py +0 -0
  470. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/rewriting/inplace.py +0 -0
  471. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/rewriting/io.py +0 -0
  472. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/rewriting/merge.py +0 -0
  473. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/rewriting/push_out.py +0 -0
  474. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/rewriting/trace.py +0 -0
  475. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/rewriting/utils.py +0 -0
  476. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/scan_perform.pyx +0 -0
  477. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/scan_perform_ext.py +0 -0
  478. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/utils.py +0 -0
  479. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/scan/views.py +0 -0
  480. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/sparse/__init__.py +0 -0
  481. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/sparse/basic.py +0 -0
  482. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/sparse/linalg.py +0 -0
  483. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/sparse/rewriting.py +0 -0
  484. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/sparse/sharedvar.py +0 -0
  485. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/sparse/type.py +0 -0
  486. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/sparse/utils.py +0 -0
  487. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/sparse/variable.py +0 -0
  488. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/__init__.py +0 -0
  489. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/__init__.py +0 -0
  490. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/_core.py +0 -0
  491. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/batched.py +0 -0
  492. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/blas_c.py +0 -0
  493. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/c_code/__init__.py +0 -0
  494. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/c_code/alt_blas_common.h +0 -0
  495. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/c_code/alt_blas_template.c +0 -0
  496. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/c_code/blas_headers.py +0 -0
  497. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/c_code/codegen.py +0 -0
  498. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/gemm.py +0 -0
  499. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/gemv.py +0 -0
  500. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/blas/ger.py +0 -0
  501. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/einsum.py +0 -0
  502. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/elemwise.py +0 -0
  503. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/elemwise_cgen.py +0 -0
  504. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/exceptions.py +0 -0
  505. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/fft.py +0 -0
  506. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/fourier.py +0 -0
  507. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/functional.py +0 -0
  508. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/interpolate.py +0 -0
  509. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/__init__.py +0 -0
  510. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/_lazy.py +0 -0
  511. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/constructors.py +0 -0
  512. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/decomposition/__init__.py +0 -0
  513. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/decomposition/cholesky.py +0 -0
  514. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/decomposition/eigen.py +0 -0
  515. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/decomposition/lu.py +0 -0
  516. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/decomposition/qr.py +0 -0
  517. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/decomposition/schur.py +0 -0
  518. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/decomposition/svd.py +0 -0
  519. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/dtype_utils.py +0 -0
  520. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/inverse.py +0 -0
  521. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/products.py +0 -0
  522. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/solvers/__init__.py +0 -0
  523. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/solvers/core.py +0 -0
  524. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/solvers/general.py +0 -0
  525. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/solvers/linear_control.py +0 -0
  526. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/solvers/lstsq.py +0 -0
  527. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/solvers/psd.py +0 -0
  528. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/solvers/triangular.py +0 -0
  529. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/solvers/tridiagonal.py +0 -0
  530. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/linalg/summary.py +0 -0
  531. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/math.py +0 -0
  532. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/nlinalg.py +0 -0
  533. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/optimize.py +0 -0
  534. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/random/__init__.py +0 -0
  535. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/random/basic.py +0 -0
  536. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/random/op.py +0 -0
  537. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  538. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/random/rewriting/basic.py +0 -0
  539. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/random/rewriting/jax.py +0 -0
  540. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/random/rewriting/numba.py +0 -0
  541. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/random/type.py +0 -0
  542. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/random/utils.py +0 -0
  543. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/random/variable.py +0 -0
  544. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/reshape.py +0 -0
  545. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/__init__.py +0 -0
  546. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/assumptions.py +0 -0
  547. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/basic.py +0 -0
  548. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/blas.py +0 -0
  549. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/blas_c.py +0 -0
  550. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/blockwise.py +0 -0
  551. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/einsum.py +0 -0
  552. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/elemwise.py +0 -0
  553. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/extra_ops.py +0 -0
  554. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/fused_elemwise.py +0 -0
  555. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/jax.py +0 -0
  556. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/linalg/__init__.py +0 -0
  557. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/linalg/decomposition.py +0 -0
  558. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/linalg/inverse.py +0 -0
  559. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/linalg/products.py +0 -0
  560. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/linalg/solvers.py +0 -0
  561. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/linalg/utils.py +0 -0
  562. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/numba.py +0 -0
  563. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/optimize.py +0 -0
  564. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/reshape.py +0 -0
  565. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/shape.py +0 -0
  566. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/special.py +0 -0
  567. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/subtensor_lift.py +0 -0
  568. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  569. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/shape.py +0 -0
  570. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/sharedvar.py +0 -0
  571. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/signal/__init__.py +0 -0
  572. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/signal/conv.py +0 -0
  573. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/slinalg.py +0 -0
  574. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/sort.py +0 -0
  575. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/special.py +0 -0
  576. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/symbolic.py +0 -0
  577. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/type.py +0 -0
  578. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/type_other.py +0 -0
  579. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/utils.py +0 -0
  580. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/var.py +0 -0
  581. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/variable.py +0 -0
  582. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/tensor/xlogx.py +0 -0
  583. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/typed_list/__init__.py +0 -0
  584. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/typed_list/basic.py +0 -0
  585. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/typed_list/rewriting.py +0 -0
  586. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/typed_list/type.py +0 -0
  587. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/utils.py +0 -0
  588. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/__init__.py +0 -0
  589. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/basic.py +0 -0
  590. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/indexing.py +0 -0
  591. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/linalg.py +0 -0
  592. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/math.py +0 -0
  593. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/random/__init__.py +0 -0
  594. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/random/basic.py +0 -0
  595. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/random/type.py +0 -0
  596. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/random/variable.py +0 -0
  597. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/reduction.py +0 -0
  598. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/rewriting/__init__.py +0 -0
  599. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/rewriting/basic.py +0 -0
  600. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/rewriting/indexing.py +0 -0
  601. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/rewriting/math.py +0 -0
  602. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/rewriting/reduction.py +0 -0
  603. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/rewriting/shape.py +0 -0
  604. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/rewriting/utils.py +0 -0
  605. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/rewriting/vectorization.py +0 -0
  606. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/shape.py +0 -0
  607. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/signal.py +0 -0
  608. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/type.py +0 -0
  609. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor/xtensor/vectorization.py +0 -0
  610. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor.egg-info/dependency_links.txt +0 -0
  611. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor.egg-info/entry_points.txt +0 -0
  612. {pytensor-3.2.4 → pytensor-3.3.1}/pytensor.egg-info/top_level.txt +0 -0
  613. {pytensor-3.2.4 → pytensor-3.3.1}/scripts/mypy-failing.txt +0 -0
  614. {pytensor-3.2.4 → pytensor-3.3.1}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
  615. {pytensor-3.2.4 → pytensor-3.3.1}/setup.cfg +0 -0
  616. {pytensor-3.2.4 → pytensor-3.3.1}/setup.py +0 -0
  617. {pytensor-3.2.4 → pytensor-3.3.1}/tests/link/c/c_code/test_cenum.h +0 -0
  618. {pytensor-3.2.4 → pytensor-3.3.1}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  619. {pytensor-3.2.4 → pytensor-3.3.1}/tests/test_basic.py +0 -0
  620. {pytensor-3.2.4 → pytensor-3.3.1}/tests/test_breakpoint.py +0 -0
  621. {pytensor-3.2.4 → pytensor-3.3.1}/tests/test_config.py +0 -0
  622. {pytensor-3.2.4 → pytensor-3.3.1}/tests/test_gradient.py +0 -0
  623. {pytensor-3.2.4 → pytensor-3.3.1}/tests/test_ifelse.py +0 -0
  624. {pytensor-3.2.4 → pytensor-3.3.1}/tests/test_printing.py +0 -0
  625. {pytensor-3.2.4 → pytensor-3.3.1}/tests/test_raise_op.py +0 -0
  626. {pytensor-3.2.4 → pytensor-3.3.1}/tests/test_rop.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytensor
3
- Version: 3.2.4
3
+ Version: 3.3.1
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
@@ -24,13 +24,14 @@ Classifier: Programming Language :: Python :: 3
24
24
  Classifier: Programming Language :: Python :: 3.12
25
25
  Classifier: Programming Language :: Python :: 3.13
26
26
  Classifier: Programming Language :: Python :: 3.14
27
+ Classifier: Programming Language :: Python :: Free Threading :: 1 - Unstable
27
28
  Requires-Python: <3.15,>=3.12
28
29
  Description-Content-Type: text/x-rst
29
30
  License-File: LICENSE.txt
30
31
  Requires-Dist: setuptools>=59.0.0
31
32
  Requires-Dist: scipy<2,>=1
32
33
  Requires-Dist: numpy>=2.0
33
- Requires-Dist: numba<=0.66.0,>=0.58
34
+ Requires-Dist: numba<=0.67.0,>=0.58
34
35
  Requires-Dist: filelock>=3.15
35
36
  Provides-Extra: complete
36
37
  Requires-Dist: pytensor[jax]; extra == "complete"
@@ -56,7 +57,7 @@ Provides-Extra: jax
56
57
  Requires-Dist: jax; extra == "jax"
57
58
  Requires-Dist: jaxlib; extra == "jax"
58
59
  Provides-Extra: numba
59
- Requires-Dist: numba<=0.66.0,>=0.58; extra == "numba"
60
+ Requires-Dist: numba<=0.67.0,>=0.58; extra == "numba"
60
61
  Requires-Dist: llvmlite; extra == "numba"
61
62
  Provides-Extra: kanren
62
63
  Requires-Dist: etuples; extra == "kanren"
@@ -17,5 +17,6 @@
17
17
  replace
18
18
  features
19
19
  op
20
+ traversal
20
21
  type
21
22
  utils
@@ -0,0 +1,8 @@
1
+ .. _libdoc_graph_traversal:
2
+
3
+ ================================================
4
+ :mod:`traversal` -- Graph Traversal Utilities
5
+ ================================================
6
+
7
+ .. automodule:: pytensor.graph.traversal
8
+ :members:
@@ -33,6 +33,7 @@ classifiers = [
33
33
  "Programming Language :: Python :: 3.12",
34
34
  "Programming Language :: Python :: 3.13",
35
35
  "Programming Language :: Python :: 3.14",
36
+ "Programming Language :: Python :: Free Threading :: 1 - Unstable",
36
37
  ]
37
38
 
38
39
  keywords = [
@@ -49,7 +50,7 @@ dependencies = [
49
50
  "setuptools>=59.0.0",
50
51
  "scipy>=1,<2",
51
52
  "numpy>=2.0",
52
- "numba>=0.58,<=0.66.0",
53
+ "numba>=0.58,<=0.67.0",
53
54
  "filelock>=3.15",
54
55
  ]
55
56
 
@@ -77,7 +78,7 @@ tests = [
77
78
  ]
78
79
  rtd = ["sphinx>=5.1.0,<6", "pygments", "pydot"]
79
80
  jax = ["jax", "jaxlib"]
80
- numba = ["numba>=0.58,<=0.66.0", "llvmlite"]
81
+ numba = ["numba>=0.58,<=0.67.0", "llvmlite"]
81
82
  kanren = [
82
83
  "etuples",
83
84
  "logical-unification",
@@ -130,7 +131,11 @@ filterwarnings =[
130
131
 
131
132
  [tool.ruff]
132
133
  line-length = 88
133
- exclude = ["pytensor/_version.py"]
134
+ # _patch_list_to_tuple.py is copied verbatim from numba; keep it diffable upstream
135
+ exclude = [
136
+ "pytensor/_version.py",
137
+ "pytensor/link/numba/dispatch/_patch_list_to_tuple.py",
138
+ ]
134
139
 
135
140
  [tool.ruff.format]
136
141
  docstring-code-format = true
@@ -185,11 +190,18 @@ files = ["pytensor", "tests"]
185
190
  build = "*"
186
191
  # Uncomment to skip builds that compile but fail when trying to test (maybe due to incompatibility with runner)
187
192
  # archs = ["auto64"]
188
- # Disable any-platform (pp*), 32-bit builds, and free-threaded builds (cp*t-*)
193
+ # Disable any-platform (pp*) and 32-bit builds
189
194
  # Additional options to consider: "*musllinux*"
190
- skip = ["pp*", "*-win32", "*-manylinux_i686", "cp*t-*"]
195
+ skip = ["pp*", "*-win32", "*-manylinux_i686"]
196
+ # Free-threaded (cp*t-*) wheels are built by default. The compiled extensions
197
+ # are not marked free-threading-safe, so importing them re-enables the GIL
198
+ # (with a warning). That's fine: they're no longer loaded by default.
191
199
  build-frontend = "build"
192
- test-command = 'python -c "import pytensor; print(pytensor.__version__); from pytensor.scan import scan_perform; print(scan_perform.get_version())"'
200
+ # Import the compiled extensions and evaluate a function to check the wheel loads and
201
+ # runs everywhere, including free-threaded builds. cxx="" disables the C backend (the
202
+ # minimal wheel-test env has no libpython to link a runtime-compiled thunk against) and
203
+ # FAST_COMPILE avoids numba, which crashes on free-threaded Windows.
204
+ test-command = '''python -c "import pytensor; pytensor.config.cxx = ''; import pytensor.tensor as pt; print(pytensor.__version__); from pytensor.scan import scan_perform; print(scan_perform.get_version()); x = pt.vector(); f = pytensor.function([x], (x * 2).sum(), mode='FAST_COMPILE'); assert float(f([1.0, 2.0, 3.0])) == 12.0"'''
193
205
  test-skip = ["*musllinux*", "*i686*"]
194
206
 
195
207
  # Testing seems to be running into issues locating libs where expected
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-08-02T00:12:33+0200",
11
+ "date": "2026-09-07T16:04:36+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "7175f7cadf3934a03f63e6e7b187fa1519e6d85f",
15
- "version": "3.2.4"
14
+ "full-revisionid": "bb5967ab72cfc29ee9f47c4a2fd0aaeeb1695268",
15
+ "version": "3.3.1"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -524,7 +524,9 @@ JAX = Mode(
524
524
  )
525
525
  PYTORCH = Mode(
526
526
  PytorchLinker(),
527
- RewriteDatabaseQuery(include=["fast_run"]),
527
+ # `Composite` has no PyTorch dispatch (it has no `nfunc_spec` to look up in torch),
528
+ # and torch fuses its own kernels anyway.
529
+ RewriteDatabaseQuery(include=["fast_run"], exclude=["fusion"]),
528
530
  )
529
531
 
530
532
  MLX = Mode(
@@ -1335,8 +1335,8 @@ def _populate_grad_dict(var_to_app_to_idx, grad_dict, wrt, cost_name=None):
1335
1335
  raise ValueError(
1336
1336
  f"{node.op} returned the wrong number of gradient terms."
1337
1337
  )
1338
- # We can not enforce this, as AdvancedSubtensor1 has an option to
1339
- # return the sparse grad for optimization reason.
1338
+ # We can not enforce this, as sparse Ops have an option to return a
1339
+ # structured grad for optimization reason.
1340
1340
 
1341
1341
  # for ig, i in zip(input_grads, inputs):
1342
1342
  # if (not isinstance(ig.type, (DisconnectedType, NullType)) and
@@ -45,13 +45,12 @@ _MOVED_FUNCTIONS = {
45
45
  "graph_inputs",
46
46
  "explicit_graph_inputs",
47
47
  "vars_between",
48
- "orhpans_between",
48
+ "orphans_between",
49
49
  "applys_between",
50
50
  "apply_depends_on",
51
51
  "truncated_graph_inputs",
52
52
  "general_toposort",
53
53
  "io_toposort",
54
- "list_of_nodes",
55
54
  "get_var_by_name",
56
55
  }
57
56
 
@@ -123,8 +123,6 @@ def graph_replace(
123
123
  Replace mapping
124
124
  strict: bool
125
125
  Raise an error if some replacements were not used
126
- return_unused: bool
127
- Return replacements that were not used
128
126
 
129
127
  Returns
130
128
  -------
@@ -43,7 +43,6 @@ from pytensor.graph.traversal import (
43
43
  )
44
44
  from pytensor.graph.utils import AssocList, InconsistencyError
45
45
  from pytensor.misc.ordered_set import OrderedSet
46
- from pytensor.utils import flatten
47
46
 
48
47
 
49
48
  _logger = logging.getLogger("pytensor.graph.rewriting.basic")
@@ -705,6 +704,15 @@ class MergeOptimizer(GraphRewriter):
705
704
  fgraph.attach_feature(MergeFeature())
706
705
 
707
706
  def apply(self, fgraph):
707
+ def has_direct_destroyer(var):
708
+ """Whether any direct client destroys `var` (view-chain destroyers not seen)."""
709
+ return any(
710
+ i in destroyed_idxs
711
+ for client, i in fgraph.clients[var]
712
+ if client.op.destroy_map
713
+ for destroyed_idxs in client.op.destroy_map.values()
714
+ )
715
+
708
716
  sched = fgraph.merge_feature.scheduled
709
717
  nb_fail = 0
710
718
  t0 = time.perf_counter()
@@ -755,15 +763,17 @@ class MergeOptimizer(GraphRewriter):
755
763
  continue
756
764
 
757
765
  if hasattr(fgraph, "destroy_handler"):
758
- # If both nodes have clients that destroy them, we
759
- # can't merge them.
760
- clients = (
761
- fgraph.clients[pairs[0][0]] + fgraph.clients[pairs[0][1]]
762
- )
763
- if any(
764
- i in flatten(c.op.destroy_map.values())
765
- for c, i in clients
766
- if c.op.destroy_map
766
+ # Merging two variables that both have a destroyer is
767
+ # always rejected by `DestroyHandler` validation
768
+ # ("multiple destroyers") -- skip those outright
769
+ # instead of paying a checkpoint + failed validate +
770
+ # revert per scheduled pair. A single-destroyer merge
771
+ # may still be feasible, and destroyers reachable only
772
+ # through view chains are rare: both are left to
773
+ # validation, keeping this check O(clients) with no
774
+ # droot recomputation.
775
+ if has_direct_destroyer(pairs[0][0]) and has_direct_destroyer(
776
+ pairs[0][1]
767
777
  ):
768
778
  continue
769
779
 
@@ -145,12 +145,13 @@ def apply_ancestors(
145
145
  graphs: Iterable[Variable],
146
146
  blockers: Iterable[Variable] | None = None,
147
147
  ) -> Generator[Apply, None, None]:
148
- """Return the Apply nodes that contribute to those in given graphs (inclusive)."""
148
+ """Return the Apply nodes that contribute to those in given graphs, excluding the owners of the blockers."""
149
149
  seen = {None} # This filters out Variables without an owner
150
+ blockers = frozenset(blockers or ())
150
151
  for var in ancestors(graphs, blockers):
151
152
  # For multi-output nodes, we'll see multiple variables
152
153
  # but we should only yield the Apply once
153
- if (apply := var.owner) not in seen:
154
+ if var not in blockers and (apply := var.owner) not in seen:
154
155
  yield apply
155
156
  seen.add(apply)
156
157
  return
@@ -1,3 +1,5 @@
1
+ import jax.numpy as jnp
2
+
1
3
  from pytensor.link.jax.dispatch.basic import jax_funcify
2
4
  from pytensor.tensor.subtensor import (
3
5
  AdvancedIncSubtensor,
@@ -60,7 +62,11 @@ def jax_funcify_IncSubtensor(op, node, **kwargs):
60
62
  indices = indices[0]
61
63
 
62
64
  if isinstance(op, AdvancedIncSubtensor):
63
- op._check_runtime_broadcast_of_vector_index(node, x, y, indices)
65
+ # jax_typify downgrades 0d arrays to Python scalars, which have no .shape,
66
+ # so re-arrayify y for a check that is written against array values.
67
+ op._check_runtime_broadcast_of_vector_index(
68
+ node, x, jnp.asarray(y), indices
69
+ )
64
70
 
65
71
  return jax_fn(x, indices, y)
66
72
 
@@ -15,25 +15,36 @@ from pytensor.link.utils import fgraph_to_python
15
15
  from pytensor.raise_op import Assert, CheckAndRaise
16
16
 
17
17
 
18
+ def float64_supported():
19
+ """Return whether the current default device can operate on float64.
20
+
21
+ MLX implements float64 on the CPU only; the Metal backend rejects it outright.
22
+ """
23
+ return mx.default_device() == mx.cpu
24
+
25
+
18
26
  def convert_dtype_to_mlx(dtype_str, auto_cast_unsupported=True):
19
27
  """Convert PyTensor dtype strings to MLX dtype objects.
20
28
 
21
29
  MLX expects dtype objects rather than string literals for type conversion.
22
30
  This function maps common dtype strings to their MLX equivalents.
23
31
 
32
+ float64 survives when the default device supports it and is narrowed to float32
33
+ otherwise. complex128 is always narrowed, MLX having no wider complex type.
34
+
24
35
  Parameters
25
36
  ----------
26
37
  dtype_str : str or MLX dtype
27
38
  The dtype to convert
28
- auto_cast_unsupported : bool
29
- If True, automatically cast unsupported dtypes to supported ones with warnings
39
+ auto_cast_unsupported : bool, optional
40
+ If True, narrow dtypes the current device cannot handle, warning as it does so.
41
+ If False, return the requested dtype and let any later failure surface. Default
42
+ True.
30
43
 
31
44
  Returns
32
45
  -------
33
46
  MLX dtype object
34
47
  """
35
- import warnings
36
-
37
48
  if isinstance(dtype_str, str):
38
49
  if dtype_str == "bool":
39
50
  return mx.bool_
@@ -58,11 +69,12 @@ def convert_dtype_to_mlx(dtype_str, auto_cast_unsupported=True):
58
69
  elif dtype_str == "float32":
59
70
  return mx.float32
60
71
  elif dtype_str == "float64":
61
- if auto_cast_unsupported:
72
+ if auto_cast_unsupported and not float64_supported():
62
73
  warnings.warn(
63
74
  "MLX does not support float64 on GPU. Automatically casting to float32. "
64
- "This may result in reduced precision. To avoid this warning, "
65
- "explicitly use float32 in your code or set floatX='float32' in PyTensor config.",
75
+ "This may result in reduced precision. To keep float64, run on the CPU "
76
+ "device with mx.set_default_device(mx.cpu); to avoid this warning, use "
77
+ "float32 or set floatX='float32' in PyTensor config.",
66
78
  UserWarning,
67
79
  stacklevel=3,
68
80
  )
@@ -116,6 +128,10 @@ def mlx_typify(data, **kwargs):
116
128
 
117
129
  @mlx_typify.register(np.ndarray)
118
130
  def mlx_typify_tensor(data, dtype=None, **kwargs):
131
+ # mx.array narrows float64 input to float32 unless the dtype is named explicitly,
132
+ # and it does so on the CPU too, where float64 is perfectly usable
133
+ if dtype is None and data.dtype == np.float64 and float64_supported():
134
+ dtype = mx.float64
119
135
  return _nan_safe_constant(data, dtype=dtype)
120
136
 
121
137
 
@@ -4,6 +4,7 @@ import mlx.core as mx
4
4
 
5
5
  from pytensor.link.mlx.dispatch.basic import mlx_funcify
6
6
  from pytensor.tensor.linalg.solvers.general import Solve
7
+ from pytensor.tensor.linalg.solvers.psd import CholeskySolve
7
8
  from pytensor.tensor.linalg.solvers.triangular import SolveTriangular
8
9
 
9
10
 
@@ -44,3 +45,22 @@ def mlx_funcify_SolveTriangular(op, node, **kwargs):
44
45
  )
45
46
 
46
47
  return solve_triangular
48
+
49
+
50
+ @mlx_funcify.register(CholeskySolve)
51
+ def mlx_funcify_CholeskySolve(op, node, **kwargs):
52
+ lower = op.lower
53
+ c_dtype = getattr(mx, node.inputs[0].dtype)
54
+ b_dtype = getattr(mx, node.inputs[1].dtype)
55
+
56
+ # MLX has no cho_solve, so with A = L L.T we solve L y = b then L.T x = y.
57
+ def cho_solve(c, b):
58
+ c = c.astype(stream=mx.cpu, dtype=c_dtype)
59
+ b = b.astype(stream=mx.cpu, dtype=b_dtype)
60
+ c_T = mx.swapaxes(c, -1, -2, stream=mx.cpu)
61
+ L, L_T = (c, c_T) if lower else (c_T, c)
62
+
63
+ y = mx.linalg.solve_triangular(L, b, upper=False, stream=mx.cpu)
64
+ return mx.linalg.solve_triangular(L_T, y, upper=True, stream=mx.cpu)
65
+
66
+ return cho_solve
@@ -0,0 +1,10 @@
1
+ from pytensor.link.mlx.dispatch.scalar import (
2
+ basic,
3
+ bessel,
4
+ beta,
5
+ erf,
6
+ erfcinv,
7
+ gamma,
8
+ gammainc,
9
+ math,
10
+ )
@@ -5,16 +5,15 @@ import mlx.core as mx
5
5
  from pytensor.link.mlx.dispatch.basic import convert_dtype_to_mlx, mlx_funcify
6
6
  from pytensor.scalar.basic import (
7
7
  Cast,
8
+ Clip,
8
9
  Composite,
9
10
  Identity,
10
11
  Mod,
11
12
  ScalarOp,
12
13
  Second,
13
14
  )
14
- from pytensor.scalar.math import Erfc, Erfcx, Log1mexp, Sigmoid, Softplus
15
15
 
16
16
 
17
- # MLX name overrides for nfunc_spec names that don't match mlx.core
18
17
  MLX_NFUNC_OVERRIDES = {
19
18
  "true_divide": "divide",
20
19
  "invert": "bitwise_invert",
@@ -96,6 +95,14 @@ def mlx_funcify_Mod(op, **kwargs):
96
95
  return mlx_mod
97
96
 
98
97
 
98
+ @mlx_funcify.register(Clip)
99
+ def mlx_funcify_Clip(op, **kwargs):
100
+ def clip(x, min, max):
101
+ return mx.where(x < min, min, mx.where(x > max, max, x))
102
+
103
+ return clip
104
+
105
+
99
106
  @mlx_funcify.register(Identity)
100
107
  def mlx_funcify_Identity(op, **kwargs):
101
108
  def identity(x):
@@ -115,55 +122,6 @@ def mlx_funcify_Second(op, **kwargs):
115
122
  return second
116
123
 
117
124
 
118
- @mlx_funcify.register(Sigmoid)
119
- def mlx_funcify_Sigmoid(op, **kwargs):
120
- return mx.sigmoid
121
-
122
-
123
- @mlx_funcify.register(Erfc)
124
- def mlx_funcify_Erfc(op, **kwargs):
125
- def erfc(x):
126
- return 1.0 - mx.erf(x)
127
-
128
- return erfc
129
-
130
-
131
- @mlx_funcify.register(Erfcx)
132
- def mlx_funcify_Erfcx(op, **kwargs):
133
- def erfcx(x):
134
- return mx.exp(x * x) * (1.0 - mx.erf(x))
135
-
136
- return erfcx
137
-
138
-
139
- @mlx_funcify.register(Softplus)
140
- def mlx_funcify_Softplus(op, **kwargs):
141
- def softplus(x):
142
- return mx.where(
143
- x < -37.0,
144
- mx.exp(x),
145
- mx.where(
146
- x < 18.0,
147
- mx.log1p(mx.exp(x)),
148
- mx.where(
149
- x < 33.3,
150
- x + mx.exp(-x),
151
- x,
152
- ),
153
- ),
154
- )
155
-
156
- return softplus
157
-
158
-
159
- @mlx_funcify.register(Log1mexp)
160
- def mlx_funcify_Log1mexp(op, node, **kwargs):
161
- def log1mexp(x):
162
- return mx.where(x < mx.log(0.5), mx.log1p(-mx.exp(x)), mx.log(-mx.expm1(x)))
163
-
164
- return log1mexp
165
-
166
-
167
125
  @mlx_funcify.register(Composite)
168
126
  def mlx_funcify_Composite(op, node=None, **kwargs):
169
127
  return mlx_funcify(op.fgraph, squeeze_output=True)