pytensor 2.28.0__tar.gz → 2.28.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 (428) hide show
  1. {pytensor-2.28.0/pytensor.egg-info → pytensor-2.28.1}/PKG-INFO +2 -2
  2. {pytensor-2.28.0 → pytensor-2.28.1}/README.rst +1 -1
  3. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/_version.py +3 -3
  4. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/configdefaults.py +1 -1
  5. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/slinalg.py +13 -7
  6. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/printing.py +26 -2
  7. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/shape.py +2 -3
  8. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/type.py +2 -11
  9. {pytensor-2.28.0 → pytensor-2.28.1/pytensor.egg-info}/PKG-INFO +2 -2
  10. {pytensor-2.28.0 → pytensor-2.28.1}/scripts/slowest_tests/update-slowest-times-issue.sh +26 -5
  11. {pytensor-2.28.0 → pytensor-2.28.1}/LICENSE.txt +0 -0
  12. {pytensor-2.28.0 → pytensor-2.28.1}/MANIFEST.in +0 -0
  13. {pytensor-2.28.0 → pytensor-2.28.1}/doc/.templates/PLACEHOLDER +0 -0
  14. {pytensor-2.28.0 → pytensor-2.28.1}/doc/.templates/layout.html +0 -0
  15. {pytensor-2.28.0 → pytensor-2.28.1}/doc/.templates/nb-badges.html +0 -0
  16. {pytensor-2.28.0 → pytensor-2.28.1}/doc/.templates/rendered_citation.html +0 -0
  17. {pytensor-2.28.0 → pytensor-2.28.1}/doc/LICENSE.txt +0 -0
  18. {pytensor-2.28.0 → pytensor-2.28.1}/doc/README.md +0 -0
  19. {pytensor-2.28.0 → pytensor-2.28.1}/doc/acknowledgement.rst +0 -0
  20. {pytensor-2.28.0 → pytensor-2.28.1}/doc/bcast.png +0 -0
  21. {pytensor-2.28.0 → pytensor-2.28.1}/doc/bcast.svg +0 -0
  22. {pytensor-2.28.0 → pytensor-2.28.1}/doc/blog.md +0 -0
  23. {pytensor-2.28.0 → pytensor-2.28.1}/doc/conf.py +0 -0
  24. {pytensor-2.28.0 → pytensor-2.28.1}/doc/core_development_guide.rst +0 -0
  25. {pytensor-2.28.0 → pytensor-2.28.1}/doc/css.inc +0 -0
  26. {pytensor-2.28.0 → pytensor-2.28.1}/doc/dev_start_guide.rst +0 -0
  27. {pytensor-2.28.0 → pytensor-2.28.1}/doc/environment.yml +0 -0
  28. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/apply.png +0 -0
  29. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/apply.svg +0 -0
  30. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/apply2.svg +0 -0
  31. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/creating_a_c_op.rst +0 -0
  32. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  33. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/creating_an_op.rst +0 -0
  34. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/ctype.rst +0 -0
  35. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/extending_faq.rst +0 -0
  36. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/extending_pytensor_solution_1.py +0 -0
  37. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/graph_rewriting.rst +0 -0
  38. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/graphstructures.rst +0 -0
  39. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/index.rst +0 -0
  40. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/inplace.rst +0 -0
  41. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/op.rst +0 -0
  42. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/other_ops.rst +0 -0
  43. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  44. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  45. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/pipeline.rst +0 -0
  46. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/scan.rst +0 -0
  47. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/tips.rst +0 -0
  48. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/type.rst +0 -0
  49. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/unittest.rst +0 -0
  50. {pytensor-2.28.0 → pytensor-2.28.1}/doc/extending/using_params.rst +0 -0
  51. {pytensor-2.28.0 → pytensor-2.28.1}/doc/faq.rst +0 -0
  52. {pytensor-2.28.0 → pytensor-2.28.1}/doc/gallery/page_footer.md +0 -0
  53. {pytensor-2.28.0 → pytensor-2.28.1}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
  54. {pytensor-2.28.0 → pytensor-2.28.1}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
  55. {pytensor-2.28.0 → pytensor-2.28.1}/doc/generate_dtype_tensor_table.py +0 -0
  56. {pytensor-2.28.0 → pytensor-2.28.1}/doc/glossary.rst +0 -0
  57. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/Elman_srnn.png +0 -0
  58. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/PyTensor.png +0 -0
  59. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/PyTensor_RGB.svg +0 -0
  60. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/PyTensor_logo.png +0 -0
  61. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/binder.svg +0 -0
  62. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/blocksparse.png +0 -0
  63. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/colab.svg +0 -0
  64. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/github.svg +0 -0
  65. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/lstm.png +0 -0
  66. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/lstm_memorycell.png +0 -0
  67. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/talk2010.gif +0 -0
  68. {pytensor-2.28.0 → pytensor-2.28.1}/doc/images/talk2010.png +0 -0
  69. {pytensor-2.28.0 → pytensor-2.28.1}/doc/index.rst +0 -0
  70. {pytensor-2.28.0 → pytensor-2.28.1}/doc/install.rst +0 -0
  71. {pytensor-2.28.0 → pytensor-2.28.1}/doc/internal/how_to_release.rst +0 -0
  72. {pytensor-2.28.0 → pytensor-2.28.1}/doc/internal/index.rst +0 -0
  73. {pytensor-2.28.0 → pytensor-2.28.1}/doc/internal/metadocumentation.rst +0 -0
  74. {pytensor-2.28.0 → pytensor-2.28.1}/doc/introduction.rst +0 -0
  75. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/compile/debugmode.rst +0 -0
  76. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/compile/function.rst +0 -0
  77. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/compile/index.rst +0 -0
  78. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/compile/io.rst +0 -0
  79. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/compile/mode.rst +0 -0
  80. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/compile/nanguardmode.rst +0 -0
  81. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/compile/opfromgraph.rst +0 -0
  82. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/compile/ops.rst +0 -0
  83. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/compile/profilemode.rst +0 -0
  84. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/compile/shared.rst +0 -0
  85. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/config.rst +0 -0
  86. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  87. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  88. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  89. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  90. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  91. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  92. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  93. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/mlp.html +0 -0
  94. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/mlp.png +0 -0
  95. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/mlp2.html +0 -0
  96. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  97. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/mlp2.png +0 -0
  98. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/ofg.html +0 -0
  99. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/examples/ofg2.html +0 -0
  100. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/index.ipynb +0 -0
  101. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/index.rst +0 -0
  102. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  103. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  104. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  105. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  106. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/graph/features.rst +0 -0
  107. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/graph/fgraph.rst +0 -0
  108. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/graph/graph.rst +0 -0
  109. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/graph/index.rst +0 -0
  110. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/graph/op.rst +0 -0
  111. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/graph/replace.rst +0 -0
  112. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/graph/type.rst +0 -0
  113. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/graph/utils.rst +0 -0
  114. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/index.rst +0 -0
  115. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/misc/pkl_utils.rst +0 -0
  116. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/printing.rst +0 -0
  117. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/scalar/index.rst +0 -0
  118. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/scan.rst +0 -0
  119. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/sparse/index.rst +0 -0
  120. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/sparse/sandbox.rst +0 -0
  121. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/basic.rst +0 -0
  122. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/basic_opt.rst +0 -0
  123. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/bcast.png +0 -0
  124. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/bcast.svg +0 -0
  125. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/conv.rst +0 -0
  126. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/elemwise.rst +0 -0
  127. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/extra_ops.rst +0 -0
  128. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/fft.rst +0 -0
  129. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/functional.rst +0 -0
  130. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/index.rst +0 -0
  131. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/io.rst +0 -0
  132. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/math_opt.rst +0 -0
  133. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/nlinalg.rst +0 -0
  134. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/plot_fft.png +0 -0
  135. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/random/distributions.rst +0 -0
  136. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/random/index.rst +0 -0
  137. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/slinalg.rst +0 -0
  138. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/tensor/utils.rst +0 -0
  139. {pytensor-2.28.0 → pytensor-2.28.1}/doc/library/typed_list.rst +0 -0
  140. {pytensor-2.28.0 → pytensor-2.28.1}/doc/links.rst +0 -0
  141. {pytensor-2.28.0 → pytensor-2.28.1}/doc/optimizations.rst +0 -0
  142. {pytensor-2.28.0 → pytensor-2.28.1}/doc/pylintrc +0 -0
  143. {pytensor-2.28.0 → pytensor-2.28.1}/doc/robots.txt +0 -0
  144. {pytensor-2.28.0 → pytensor-2.28.1}/doc/troubleshooting.rst +0 -0
  145. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/adding.rst +0 -0
  146. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/adding_solution_1.py +0 -0
  147. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/aliasing.rst +0 -0
  148. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/apply.png +0 -0
  149. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/apply.svg +0 -0
  150. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/bcast.png +0 -0
  151. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/broadcasting.rst +0 -0
  152. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/conditions.rst +0 -0
  153. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/debug_faq.rst +0 -0
  154. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/dlogistic.png +0 -0
  155. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/examples.rst +0 -0
  156. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/faq_tutorial.rst +0 -0
  157. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/gradients.rst +0 -0
  158. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/index.rst +0 -0
  159. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/loading_and_saving.rst +0 -0
  160. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/logistic.gp +0 -0
  161. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/logistic.png +0 -0
  162. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/loop.rst +0 -0
  163. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/loop_solution_1.py +0 -0
  164. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/modes.rst +0 -0
  165. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/modes_solution_1.py +0 -0
  166. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/multi_cores.rst +0 -0
  167. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/nan_tutorial.rst +0 -0
  168. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/pics/d3viz.png +0 -0
  169. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  170. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  171. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  172. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/printing_drawing.rst +0 -0
  173. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/prng.rst +0 -0
  174. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/profiling.rst +0 -0
  175. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/profiling_example.py +0 -0
  176. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/profiling_example_out.prof +0 -0
  177. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/shape_info.rst +0 -0
  178. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/sparse.rst +0 -0
  179. {pytensor-2.28.0 → pytensor-2.28.1}/doc/tutorial/symbolic_graphs.rst +0 -0
  180. {pytensor-2.28.0 → pytensor-2.28.1}/doc/user_guide.rst +0 -0
  181. {pytensor-2.28.0 → pytensor-2.28.1}/pyproject.toml +0 -0
  182. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/__init__.py +0 -0
  183. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/bin/__init__.py +0 -0
  184. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/bin/pytensor_cache.py +0 -0
  185. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/breakpoint.py +0 -0
  186. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/__init__.py +0 -0
  187. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/builders.py +0 -0
  188. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/compiledir.py +0 -0
  189. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/compilelock.py +0 -0
  190. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/debugmode.py +0 -0
  191. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/function/__init__.py +0 -0
  192. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/function/pfunc.py +0 -0
  193. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/function/types.py +0 -0
  194. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/io.py +0 -0
  195. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/mode.py +0 -0
  196. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/monitormode.py +0 -0
  197. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/nanguardmode.py +0 -0
  198. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/ops.py +0 -0
  199. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/profiling.py +0 -0
  200. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/compile/sharedvalue.py +0 -0
  201. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/configparser.py +0 -0
  202. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/d3viz/__init__.py +0 -0
  203. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  204. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/d3viz/css/d3viz.css +0 -0
  205. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/d3viz/d3viz.py +0 -0
  206. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/d3viz/formatting.py +0 -0
  207. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  208. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  209. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/d3viz/js/d3viz.js +0 -0
  210. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  211. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  212. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/gradient.py +0 -0
  213. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/__init__.py +0 -0
  214. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/basic.py +0 -0
  215. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/destroyhandler.py +0 -0
  216. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/features.py +0 -0
  217. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/fg.py +0 -0
  218. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/null_type.py +0 -0
  219. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/op.py +0 -0
  220. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/replace.py +0 -0
  221. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/rewriting/__init__.py +0 -0
  222. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/rewriting/basic.py +0 -0
  223. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/rewriting/db.py +0 -0
  224. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/rewriting/kanren.py +0 -0
  225. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/rewriting/unify.py +0 -0
  226. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/rewriting/utils.py +0 -0
  227. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/type.py +0 -0
  228. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/graph/utils.py +0 -0
  229. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/ifelse.py +0 -0
  230. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/__init__.py +0 -0
  231. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/basic.py +0 -0
  232. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/__init__.py +0 -0
  233. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/basic.py +0 -0
  234. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  235. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  236. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/cmodule.py +0 -0
  237. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/cutils.py +0 -0
  238. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/cvm.py +0 -0
  239. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/exceptions.py +0 -0
  240. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/interface.py +0 -0
  241. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/lazylinker_c.py +0 -0
  242. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/op.py +0 -0
  243. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/params_type.py +0 -0
  244. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/c/type.py +0 -0
  245. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/__init__.py +0 -0
  246. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/__init__.py +0 -0
  247. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/basic.py +0 -0
  248. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/blas.py +0 -0
  249. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/blockwise.py +0 -0
  250. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/einsum.py +0 -0
  251. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  252. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  253. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/math.py +0 -0
  254. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
  255. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/pad.py +0 -0
  256. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/random.py +0 -0
  257. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/scalar.py +0 -0
  258. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/scan.py +0 -0
  259. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/shape.py +0 -0
  260. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/slinalg.py +0 -0
  261. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/sort.py +0 -0
  262. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/sparse.py +0 -0
  263. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/subtensor.py +0 -0
  264. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
  265. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/jax/linker.py +0 -0
  266. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/__init__.py +0 -0
  267. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/_LAPACK.py +0 -0
  268. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/__init__.py +0 -0
  269. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/basic.py +0 -0
  270. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/blockwise.py +0 -0
  271. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  272. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/elemwise.py +0 -0
  273. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  274. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
  275. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/random.py +0 -0
  276. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/scalar.py +0 -0
  277. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/scan.py +0 -0
  278. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/sparse.py +0 -0
  279. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/subtensor.py +0 -0
  280. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
  281. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
  282. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/numba/linker.py +0 -0
  283. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
  284. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  285. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/blas.py +0 -0
  286. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
  287. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  288. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
  289. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/math.py +0 -0
  290. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
  291. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  292. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/shape.py +0 -0
  293. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/sort.py +0 -0
  294. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
  295. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/pytorch/linker.py +0 -0
  296. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/utils.py +0 -0
  297. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/link/vm.py +0 -0
  298. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/misc/__init__.py +0 -0
  299. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/misc/check_blas.py +0 -0
  300. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/misc/check_blas_many.sh +0 -0
  301. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/misc/check_duplicate_key.py +0 -0
  302. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  303. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/misc/elemwise_time_test.py +0 -0
  304. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/misc/frozendict.py +0 -0
  305. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/misc/may_share_memory.py +0 -0
  306. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/misc/ordered_set.py +0 -0
  307. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/misc/pkl_utils.py +0 -0
  308. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/npy_2_compat.py +0 -0
  309. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/py.typed +0 -0
  310. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/raise_op.py +0 -0
  311. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scalar/__init__.py +0 -0
  312. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scalar/basic.py +0 -0
  313. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  314. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  315. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scalar/c_code/gamma.c +0 -0
  316. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scalar/c_code/incbet.c +0 -0
  317. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scalar/loop.py +0 -0
  318. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scalar/math.py +0 -0
  319. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scalar/sharedvar.py +0 -0
  320. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scan/__init__.py +0 -0
  321. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scan/basic.py +0 -0
  322. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scan/checkpoints.py +0 -0
  323. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scan/op.py +0 -0
  324. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scan/rewriting.py +0 -0
  325. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scan/scan_perform.pyx +0 -0
  326. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scan/scan_perform_ext.py +0 -0
  327. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scan/utils.py +0 -0
  328. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/scan/views.py +0 -0
  329. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/sparse/__init__.py +0 -0
  330. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/sparse/basic.py +0 -0
  331. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/sparse/rewriting.py +0 -0
  332. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/sparse/sandbox/__init__.py +0 -0
  333. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/sparse/sandbox/sp.py +0 -0
  334. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/sparse/sandbox/sp2.py +0 -0
  335. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/sparse/sharedvar.py +0 -0
  336. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/sparse/type.py +0 -0
  337. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/sparse/utils.py +0 -0
  338. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/__init__.py +0 -0
  339. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/basic.py +0 -0
  340. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/blas.py +0 -0
  341. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/blas_c.py +0 -0
  342. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/blas_headers.py +0 -0
  343. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/blas_scipy.py +0 -0
  344. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/blockwise.py +0 -0
  345. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
  346. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
  347. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/c_code/dimshuffle.c +0 -0
  348. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/conv/__init__.py +0 -0
  349. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/conv/abstract_conv.py +0 -0
  350. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/einsum.py +0 -0
  351. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/elemwise.py +0 -0
  352. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/elemwise_cgen.py +0 -0
  353. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/exceptions.py +0 -0
  354. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/extra_ops.py +0 -0
  355. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/fft.py +0 -0
  356. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/fourier.py +0 -0
  357. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/functional.py +0 -0
  358. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/inplace.py +0 -0
  359. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/interpolate.py +0 -0
  360. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/io.py +0 -0
  361. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/linalg.py +0 -0
  362. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/math.py +0 -0
  363. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/nlinalg.py +0 -0
  364. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/pad.py +0 -0
  365. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/random/__init__.py +0 -0
  366. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/random/basic.py +0 -0
  367. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/random/op.py +0 -0
  368. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  369. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/random/rewriting/basic.py +0 -0
  370. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/random/rewriting/jax.py +0 -0
  371. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/random/rewriting/numba.py +0 -0
  372. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/random/type.py +0 -0
  373. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/random/utils.py +0 -0
  374. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/random/var.py +0 -0
  375. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/__init__.py +0 -0
  376. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/basic.py +0 -0
  377. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/blas.py +0 -0
  378. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/blas_c.py +0 -0
  379. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
  380. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/blockwise.py +0 -0
  381. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/einsum.py +0 -0
  382. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/elemwise.py +0 -0
  383. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/extra_ops.py +0 -0
  384. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/jax.py +0 -0
  385. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/linalg.py +0 -0
  386. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/math.py +0 -0
  387. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/numba.py +0 -0
  388. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/ofg.py +0 -0
  389. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/special.py +0 -0
  390. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/subtensor.py +0 -0
  391. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  392. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/shape.py +0 -0
  393. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/sharedvar.py +0 -0
  394. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/slinalg.py +0 -0
  395. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/sort.py +0 -0
  396. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/special.py +0 -0
  397. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/subtensor.py +0 -0
  398. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/type_other.py +0 -0
  399. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/utils.py +0 -0
  400. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/var.py +0 -0
  401. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/variable.py +0 -0
  402. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/tensor/xlogx.py +0 -0
  403. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/typed_list/__init__.py +0 -0
  404. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/typed_list/basic.py +0 -0
  405. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/typed_list/rewriting.py +0 -0
  406. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/typed_list/type.py +0 -0
  407. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/updates.py +0 -0
  408. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor/utils.py +0 -0
  409. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor.egg-info/SOURCES.txt +0 -0
  410. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor.egg-info/dependency_links.txt +0 -0
  411. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor.egg-info/entry_points.txt +0 -0
  412. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor.egg-info/requires.txt +0 -0
  413. {pytensor-2.28.0 → pytensor-2.28.1}/pytensor.egg-info/top_level.txt +0 -0
  414. {pytensor-2.28.0 → pytensor-2.28.1}/scripts/mypy-failing.txt +0 -0
  415. {pytensor-2.28.0 → pytensor-2.28.1}/setup.cfg +0 -0
  416. {pytensor-2.28.0 → pytensor-2.28.1}/setup.py +0 -0
  417. {pytensor-2.28.0 → pytensor-2.28.1}/tests/link/c/c_code/test_cenum.h +0 -0
  418. {pytensor-2.28.0 → pytensor-2.28.1}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  419. {pytensor-2.28.0 → pytensor-2.28.1}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
  420. {pytensor-2.28.0 → pytensor-2.28.1}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
  421. {pytensor-2.28.0 → pytensor-2.28.1}/tests/test_breakpoint.py +0 -0
  422. {pytensor-2.28.0 → pytensor-2.28.1}/tests/test_config.py +0 -0
  423. {pytensor-2.28.0 → pytensor-2.28.1}/tests/test_gradient.py +0 -0
  424. {pytensor-2.28.0 → pytensor-2.28.1}/tests/test_ifelse.py +0 -0
  425. {pytensor-2.28.0 → pytensor-2.28.1}/tests/test_printing.py +0 -0
  426. {pytensor-2.28.0 → pytensor-2.28.1}/tests/test_raise_op.py +0 -0
  427. {pytensor-2.28.0 → pytensor-2.28.1}/tests/test_rop.py +0 -0
  428. {pytensor-2.28.0 → pytensor-2.28.1}/tests/test_updates.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pytensor
3
- Version: 2.28.0
3
+ Version: 2.28.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: .. _license:
@@ -244,7 +244,7 @@ A good place to start contributing is by looking through the issues
244
244
 
245
245
 
246
246
  .. |Project Name| replace:: PyTensor
247
- .. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg?branch=main
247
+ .. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg
248
248
  :target: https://github.com/pymc-devs/pytensor/actions?query=workflow%3ATests+branch%3Amain
249
249
  .. |Coverage| image:: https://codecov.io/gh/pymc-devs/pytensor/branch/main/graph/badge.svg?token=WVwr8nZYmc
250
250
  :target: https://codecov.io/gh/pymc-devs/pytensor
@@ -133,7 +133,7 @@ A good place to start contributing is by looking through the issues
133
133
 
134
134
 
135
135
  .. |Project Name| replace:: PyTensor
136
- .. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg?branch=main
136
+ .. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg
137
137
  :target: https://github.com/pymc-devs/pytensor/actions?query=workflow%3ATests+branch%3Amain
138
138
  .. |Coverage| image:: https://codecov.io/gh/pymc-devs/pytensor/branch/main/graph/badge.svg?token=WVwr8nZYmc
139
139
  :target: https://codecov.io/gh/pymc-devs/pytensor
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-02-20T16:27:45+0100",
11
+ "date": "2025-02-24T18:22:58+0100",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "5d4e9e0749aa0d33a9db26080a35fdd579aef23d",
15
- "version": "2.28.0"
14
+ "full-revisionid": "67017a662a65abaa0e388925762aa3c903abe840",
15
+ "version": "2.28.1"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -331,7 +331,7 @@ def add_compile_configvars():
331
331
  rc = 1
332
332
  if rc != 0:
333
333
  _logger.warning(
334
- "g++ not available, if using conda: `conda install m2w64-toolchain`"
334
+ "g++ not available, if using conda: `conda install gxx`"
335
335
  )
336
336
 
337
337
  if rc != 0:
@@ -124,20 +124,26 @@ def solve_triangular_impl(A, B, trans, lower, unit_diagonal, b_ndim, overwrite_b
124
124
  _N = np.int32(A.shape[-1])
125
125
  _solve_check_input_shapes(A, B)
126
126
 
127
+ # Seems weird to not use the b_ndim input directly, but when I did that Numba complained that the output type
128
+ # could potentially be 3d (it didn't understand b_ndim was always equal to B.ndim)
127
129
  B_is_1d = B.ndim == 1
128
130
 
131
+ # This will only copy if A is not already fortran contiguous
132
+ A_f = np.asfortranarray(A)
133
+
129
134
  if overwrite_b:
130
- B_copy = B
135
+ if B_is_1d:
136
+ B_copy = np.expand_dims(B, -1)
137
+ else:
138
+ # This *will* allow inplace destruction of B, but only if it is already fortran contiguous.
139
+ # Otherwise, there's no way to get around the need to copy the data before going into TRTRS
140
+ B_copy = np.asfortranarray(B)
131
141
  else:
132
142
  if B_is_1d:
133
- # _copy_to_fortran_order does nothing with vectors
134
- B_copy = np.copy(B)
143
+ B_copy = np.copy(np.expand_dims(B, -1))
135
144
  else:
136
145
  B_copy = _copy_to_fortran_order(B)
137
146
 
138
- if B_is_1d:
139
- B_copy = np.expand_dims(B_copy, -1)
140
-
141
147
  NRHS = 1 if B_is_1d else int(B_copy.shape[-1])
142
148
 
143
149
  UPLO = val_to_int_ptr(ord("L") if lower else ord("U"))
@@ -155,7 +161,7 @@ def solve_triangular_impl(A, B, trans, lower, unit_diagonal, b_ndim, overwrite_b
155
161
  DIAG,
156
162
  N,
157
163
  NRHS,
158
- np.asfortranarray(A).T.view(w_type).ctypes,
164
+ A_f.view(w_type).ctypes,
159
165
  LDA,
160
166
  B_copy.view(w_type).ctypes,
161
167
  LDB,
@@ -89,6 +89,7 @@ def debugprint(
89
89
  | Sequence[Variable | Apply | Function | FunctionGraph],
90
90
  depth: int = -1,
91
91
  print_type: bool = False,
92
+ print_shape: bool = False,
92
93
  file: Literal["str"] | TextIO | None = None,
93
94
  id_type: IDTypesType = "CHAR",
94
95
  stop_on_name: bool = False,
@@ -98,6 +99,7 @@ def debugprint(
98
99
  print_op_info: bool = False,
99
100
  print_destroy_map: bool = False,
100
101
  print_view_map: bool = False,
102
+ print_memory_map: bool = False,
101
103
  print_fgraph_inputs: bool = False,
102
104
  ) -> str | TextIO:
103
105
  r"""Print a graph as text.
@@ -123,6 +125,8 @@ def debugprint(
123
125
  Print graph to this depth (``-1`` for unlimited).
124
126
  print_type
125
127
  If ``True``, print the `Type`\s of each `Variable` in the graph.
128
+ print_shape
129
+ If ``True``, print the shape of each `Variable` in the graph.
126
130
  file
127
131
  When `file` extends `TextIO`, print to it; when `file` is
128
132
  equal to ``"str"``, return a string; when `file` is ``None``, print to
@@ -153,6 +157,8 @@ def debugprint(
153
157
  Whether to print the `destroy_map`\s of printed objects
154
158
  print_view_map
155
159
  Whether to print the `view_map`\s of printed objects
160
+ print_memory_map
161
+ Whether to set both `print_destroy_map` and `print_view_map` to ``True``.
156
162
  print_fgraph_inputs
157
163
  Print the inputs of `FunctionGraph`\s.
158
164
 
@@ -177,6 +183,10 @@ def debugprint(
177
183
  if used_ids is None:
178
184
  used_ids = dict()
179
185
 
186
+ if print_memory_map:
187
+ print_destroy_map = True
188
+ print_view_map = True
189
+
180
190
  inputs_to_print = []
181
191
  outputs_to_print = []
182
192
  profile_list: list[Any | None] = []
@@ -265,6 +275,7 @@ N.B.:
265
275
  depth=depth,
266
276
  done=done,
267
277
  print_type=print_type,
278
+ print_shape=print_shape,
268
279
  file=_file,
269
280
  id_type=id_type,
270
281
  inner_graph_ops=inner_graph_vars,
@@ -295,6 +306,7 @@ N.B.:
295
306
  depth=depth,
296
307
  done=done,
297
308
  print_type=print_type,
309
+ print_shape=print_shape,
298
310
  file=_file,
299
311
  topo_order=topo_order,
300
312
  id_type=id_type,
@@ -365,6 +377,7 @@ N.B.:
365
377
  depth=depth,
366
378
  done=done,
367
379
  print_type=print_type,
380
+ print_shape=print_shape,
368
381
  file=_file,
369
382
  id_type=id_type,
370
383
  inner_graph_ops=inner_graph_vars,
@@ -387,6 +400,7 @@ N.B.:
387
400
  depth=depth,
388
401
  done=done,
389
402
  print_type=print_type,
403
+ print_shape=print_shape,
390
404
  file=_file,
391
405
  id_type=id_type,
392
406
  stop_on_name=stop_on_name,
@@ -421,6 +435,7 @@ N.B.:
421
435
  depth=depth,
422
436
  done=done,
423
437
  print_type=print_type,
438
+ print_shape=print_shape,
424
439
  file=_file,
425
440
  id_type=id_type,
426
441
  stop_on_name=stop_on_name,
@@ -452,6 +467,7 @@ def _debugprint(
452
467
  depth: int = -1,
453
468
  done: dict[Literal["output"] | Variable | Apply, str] | None = None,
454
469
  print_type: bool = False,
470
+ print_shape: bool = False,
455
471
  file: TextIO = sys.stdout,
456
472
  print_destroy_map: bool = False,
457
473
  print_view_map: bool = False,
@@ -484,6 +500,8 @@ def _debugprint(
484
500
  See `debugprint`.
485
501
  print_type
486
502
  See `debugprint`.
503
+ print_shape
504
+ See `debugprint`.
487
505
  file
488
506
  File-like object to which to print.
489
507
  print_destroy_map
@@ -532,6 +550,11 @@ def _debugprint(
532
550
  else:
533
551
  type_str = ""
534
552
 
553
+ if print_shape and hasattr(var.type, "shape"):
554
+ shape_str = f" shape={str(var.type.shape).replace('None', '?')}"
555
+ else:
556
+ shape_str = ""
557
+
535
558
  if prefix_child is None:
536
559
  prefix_child = prefix
537
560
 
@@ -612,7 +635,7 @@ def _debugprint(
612
635
  if is_inner_graph_header:
613
636
  var_output = f"{prefix}{node.op}{id_str}{destroy_map_str}{view_map_str}{o}"
614
637
  else:
615
- var_output = f"{prefix}{node.op}{output_idx}{id_str}{type_str}{var_name}{destroy_map_str}{view_map_str}{o}{data}"
638
+ var_output = f"{prefix}{node.op}{output_idx}{id_str}{type_str}{shape_str}{var_name}{destroy_map_str}{view_map_str}{o}{data}"
616
639
 
617
640
  if print_op_info and node not in op_information:
618
641
  op_information.update(op_debug_information(node.op, node))
@@ -662,6 +685,7 @@ def _debugprint(
662
685
  depth=depth - 1,
663
686
  done=_done,
664
687
  print_type=print_type,
688
+ print_shape=print_shape,
665
689
  file=file,
666
690
  topo_order=topo_order,
667
691
  id_type=id_type,
@@ -692,7 +716,7 @@ def _debugprint(
692
716
  else:
693
717
  data = ""
694
718
 
695
- var_output = f"{prefix}{var}{id_str}{type_str}{data}"
719
+ var_output = f"{prefix}{var}{id_str}{type_str}{shape_str}{data}"
696
720
 
697
721
  if print_op_info and var.owner and var.owner not in op_information:
698
722
  op_information.update(op_debug_information(var.owner.op, var.owner))
@@ -966,16 +966,15 @@ def local_reshape_to_dimshuffle(fgraph, node):
966
966
  inp, output_shape = node.inputs
967
967
  [output] = node.outputs
968
968
 
969
- # Remove any broadcastable dimensions from the input
970
- squeeze_axes = [i for i, bcast in enumerate(inp.type.broadcastable) if bcast]
971
-
972
969
  # Trivial case, all dimensions of input/output are known to be broadcastable:
973
970
  # there's nothing to reshape
974
971
  if all(inp.type.broadcastable) or all(output.type.broadcastable):
972
+ squeeze_axes = tuple(range(inp.type.ndim))
975
973
  new_output_shape = []
976
974
  expand_axes = tuple(range(output.type.ndim))
977
975
 
978
976
  else:
977
+ squeeze_axes = [i for i, bcast in enumerate(inp.type.broadcastable) if bcast]
979
978
  unpacked_shape = _unpack_shape_vector(output_shape)
980
979
  new_output_shape = []
981
980
  expand_axes = []
@@ -399,22 +399,13 @@ class TensorType(CType[np.ndarray], HasDataType, HasShape):
399
399
  else:
400
400
  shape = self.shape
401
401
  len_shape = len(shape)
402
-
403
- def shape_str(s):
404
- if s is None:
405
- return "?"
406
- else:
407
- return str(s)
408
-
409
- formatted_shape = ", ".join(shape_str(s) for s in shape)
410
- if len_shape == 1:
411
- formatted_shape += ","
402
+ formatted_shape = str(shape).replace("None", "?")
412
403
 
413
404
  if len_shape > 2:
414
405
  name = f"Tensor{len_shape}"
415
406
  else:
416
407
  name = ("Scalar", "Vector", "Matrix")[len_shape]
417
- return f"{name}({self.dtype}, shape=({formatted_shape}))"
408
+ return f"{name}({self.dtype}, shape={formatted_shape})"
418
409
 
419
410
  def __repr__(self):
420
411
  return f"TensorType({self.dtype}, shape={self.shape})"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pytensor
3
- Version: 2.28.0
3
+ Version: 2.28.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: .. _license:
@@ -244,7 +244,7 @@ A good place to start contributing is by looking through the issues
244
244
 
245
245
 
246
246
  .. |Project Name| replace:: PyTensor
247
- .. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg?branch=main
247
+ .. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg
248
248
  :target: https://github.com/pymc-devs/pytensor/actions?query=workflow%3ATests+branch%3Amain
249
249
  .. |Coverage| image:: https://codecov.io/gh/pymc-devs/pytensor/branch/main/graph/badge.svg?token=WVwr8nZYmc
250
250
  :target: https://codecov.io/gh/pymc-devs/pytensor
@@ -7,8 +7,19 @@ repo=pytensor
7
7
  issue_number=1124
8
8
  title="Speed up test times :rocket:"
9
9
  workflow=Tests
10
- latest_id=$(gh run list --workflow $workflow --status success --limit 1 --json databaseId --jq '.[0].databaseId')
11
- jobs=$(gh api /repos/$owner/$repo/actions/runs/$latest_id/jobs --jq '.jobs | map({name: .name, run_id: .run_id, id: .id, started_at: .started_at, completed_at: .completed_at})')
10
+ latest_id=$(gh run list --branch main --limit 1 --workflow $workflow --status success --json databaseId,startedAt,updatedAt --jq '
11
+ . | map({
12
+ databaseId: .databaseId,
13
+ startedAt: .startedAt,
14
+ updatedAt: .updatedAt,
15
+ minutes: (((.updatedAt | fromdate) - (.startedAt | fromdate)) / 60)
16
+ } | select(.minutes > 10))
17
+ | .[0].databaseId
18
+ ')
19
+ jobs=$(gh api /repos/$owner/$repo/actions/runs/$latest_id/jobs --jq '
20
+ .jobs
21
+ | map({name: .name, run_id: .run_id, id: .id, started_at: .started_at, completed_at: .completed_at})
22
+ ')
12
23
 
13
24
  # Skip 3.10, float32, and Benchmark tests
14
25
  function skip_job() {
@@ -31,7 +42,7 @@ function skip_job() {
31
42
  # Remove common prefix from the name
32
43
  function remove_prefix() {
33
44
  name=$1
34
- echo $name | sed -e 's/^ubuntu-latest test py3.12 : fast-compile 0 : float32 0 : //'
45
+ echo $name | sed -e 's/^ubuntu-latest test py3.13 numpy>=2.0 : fast-compile 0 : float32 0 : //'
35
46
  }
36
47
 
37
48
  function human_readable_time() {
@@ -64,7 +75,11 @@ echo "$jobs" | jq -c '.[]' | while read -r job; do
64
75
  fi
65
76
 
66
77
  echo "Processing job: $name (ID: $id, Run ID: $run_id)"
67
- times=$(gh run view --job $id --log | python extract-slow-tests.py)
78
+
79
+ # Seeing a bit more stabilty with the API rather than the CLI
80
+ # https://docs.github.com/en/rest/actions/workflow-jobs?apiVersion=2022-11-28#download-job-logs-for-a-workflow-run
81
+ times=$(gh api /repos/$owner/$repo/actions/jobs/$id/logs | python extract-slow-tests.py)
82
+ # times=$(gh run view --job $id --log | python extract-slow-tests.py)
68
83
 
69
84
  if [ -z "$times" ]; then
70
85
  # Some of the jobs are non-test jobs, so we skip them
@@ -89,6 +104,11 @@ echo "$jobs" | jq -c '.[]' | while read -r job; do
89
104
  fi
90
105
  done
91
106
 
107
+ if [ -z "$all_times" ]; then
108
+ echo "No slow tests found, exiting"
109
+ exit 1
110
+ fi
111
+
92
112
  run_date=$(date +"%Y-%m-%d")
93
113
  body=$(cat << EOF
94
114
  If you are motivated to help speed up some tests, we would appreciate it!
@@ -100,7 +120,8 @@ $all_times
100
120
  You can find more information on how to contribute [here](https://pytensor.readthedocs.io/en/latest/dev_start_guide.html)
101
121
 
102
122
  Automatically generated by [GitHub Action](https://github.com/pymc-devs/pytensor/blob/main/.github/workflows/slow-tests-issue.yml)
103
- Latest run date: $run_date
123
+ Latest run date: $run_date
124
+ Run logs: [$latest_id](https://github.com/pymc-devs/pytensor/actions/runs/$latest_id)
104
125
  EOF
105
126
  )
106
127
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes