pytensor 2.25.1__tar.gz → 2.25.2__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 (422) hide show
  1. {pytensor-2.25.1 → pytensor-2.25.2}/MANIFEST.in +0 -1
  2. {pytensor-2.25.1/pytensor.egg-info → pytensor-2.25.2}/PKG-INFO +3 -3
  3. {pytensor-2.25.1 → pytensor-2.25.2}/README.rst +2 -2
  4. {pytensor-2.25.1 → pytensor-2.25.2}/doc/generate_dtype_tensor_table.py +1 -1
  5. {pytensor-2.25.1 → pytensor-2.25.2}/pyproject.toml +4 -9
  6. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/__init__.py +4 -1
  7. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/_version.py +3 -3
  8. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/bin/pytensor_cache.py +1 -3
  9. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/builders.py +1 -1
  10. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/debugmode.py +12 -23
  11. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/function/types.py +2 -6
  12. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/monitormode.py +2 -2
  13. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/profiling.py +6 -9
  14. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/configdefaults.py +4 -4
  15. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/configparser.py +5 -6
  16. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/gradient.py +6 -6
  17. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/basic.py +9 -5
  18. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/destroyhandler.py +2 -2
  19. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/basic.py +5 -8
  20. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/db.py +4 -4
  21. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/utils.py +3 -4
  22. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/basic.py +2 -2
  23. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/basic.py +45 -47
  24. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/cmodule.py +9 -11
  25. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/interface.py +4 -8
  26. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/lazylinker_c.py +4 -23
  27. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/op.py +25 -57
  28. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/params_type.py +26 -42
  29. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/type.py +52 -64
  30. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/__init__.py +10 -8
  31. pytensor-2.25.2/pytensor/link/jax/dispatch/blas.py +14 -0
  32. pytensor-2.25.2/pytensor/link/jax/dispatch/math.py +60 -0
  33. pytensor-2.25.2/pytensor/link/jax/dispatch/nlinalg.py +93 -0
  34. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/slinalg.py +4 -5
  35. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/pytorch/dispatch/__init__.py +1 -0
  36. pytensor-2.25.2/pytensor/link/pytorch/dispatch/extra_ops.py +58 -0
  37. pytensor-2.25.2/pytensor/link/pytorch/dispatch/sort.py +25 -0
  38. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/utils.py +6 -10
  39. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/vm.py +7 -11
  40. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/check_blas.py +1 -1
  41. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/check_duplicate_key.py +1 -1
  42. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/elemwise_openmp_speedup.py +1 -1
  43. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/elemwise_time_test.py +1 -1
  44. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/pkl_utils.py +1 -1
  45. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/printing.py +3 -5
  46. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/basic.py +33 -37
  47. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/math.py +10 -10
  48. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/op.py +1 -2
  49. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/rewriting.py +1 -3
  50. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/utils.py +2 -1
  51. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/basic.py +8 -6
  52. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/rewriting.py +29 -20
  53. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/basic.py +18 -24
  54. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/blas.py +12 -19
  55. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/blas_c.py +2 -2
  56. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/blas_headers.py +2 -2
  57. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/conv/abstract_conv.py +6 -5
  58. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/elemwise.py +20 -27
  59. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/elemwise_cgen.py +5 -5
  60. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/extra_ops.py +8 -9
  61. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/fft.py +1 -1
  62. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/math.py +28 -31
  63. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/linalg.py +29 -26
  64. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/math.py +1 -1
  65. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/shape.py +2 -2
  66. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/slinalg.py +9 -12
  67. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/subtensor.py +26 -37
  68. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/type.py +17 -15
  69. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/typed_list/basic.py +20 -21
  70. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/typed_list/type.py +7 -6
  71. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/utils.py +1 -1
  72. {pytensor-2.25.1 → pytensor-2.25.2/pytensor.egg-info}/PKG-INFO +3 -3
  73. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor.egg-info/SOURCES.txt +3 -2
  74. {pytensor-2.25.1 → pytensor-2.25.2}/scripts/mypy-failing.txt +1 -3
  75. {pytensor-2.25.1 → pytensor-2.25.2}/setup.py +1 -2
  76. {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_config.py +13 -0
  77. pytensor-2.25.1/pytensor/link/jax/dispatch/nlinalg.py +0 -161
  78. pytensor-2.25.1/pytensor/link/pytorch/dispatch/extra_ops.py +0 -23
  79. pytensor-2.25.1/pytensor/version.py +0 -28
  80. pytensor-2.25.1/versioneer.py +0 -2201
  81. {pytensor-2.25.1 → pytensor-2.25.2}/LICENSE.txt +0 -0
  82. {pytensor-2.25.1 → pytensor-2.25.2}/doc/.templates/PLACEHOLDER +0 -0
  83. {pytensor-2.25.1 → pytensor-2.25.2}/doc/.templates/layout.html +0 -0
  84. {pytensor-2.25.1 → pytensor-2.25.2}/doc/LICENSE.txt +0 -0
  85. {pytensor-2.25.1 → pytensor-2.25.2}/doc/README.md +0 -0
  86. {pytensor-2.25.1 → pytensor-2.25.2}/doc/acknowledgement.rst +0 -0
  87. {pytensor-2.25.1 → pytensor-2.25.2}/doc/bcast.png +0 -0
  88. {pytensor-2.25.1 → pytensor-2.25.2}/doc/bcast.svg +0 -0
  89. {pytensor-2.25.1 → pytensor-2.25.2}/doc/conf.py +0 -0
  90. {pytensor-2.25.1 → pytensor-2.25.2}/doc/core_development_guide.rst +0 -0
  91. {pytensor-2.25.1 → pytensor-2.25.2}/doc/css.inc +0 -0
  92. {pytensor-2.25.1 → pytensor-2.25.2}/doc/dev_start_guide.rst +0 -0
  93. {pytensor-2.25.1 → pytensor-2.25.2}/doc/environment.yml +0 -0
  94. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/apply.png +0 -0
  95. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/apply.svg +0 -0
  96. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/apply2.svg +0 -0
  97. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/creating_a_c_op.rst +0 -0
  98. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  99. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/creating_an_op.rst +0 -0
  100. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/ctype.rst +0 -0
  101. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/extending_faq.rst +0 -0
  102. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/extending_pytensor_solution_1.py +0 -0
  103. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/graph_rewriting.rst +0 -0
  104. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/graphstructures.rst +0 -0
  105. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/index.rst +0 -0
  106. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/inplace.rst +0 -0
  107. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/op.rst +0 -0
  108. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/other_ops.rst +0 -0
  109. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  110. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  111. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/pipeline.rst +0 -0
  112. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/scan.rst +0 -0
  113. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/tips.rst +0 -0
  114. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/type.rst +0 -0
  115. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/unittest.rst +0 -0
  116. {pytensor-2.25.1 → pytensor-2.25.2}/doc/extending/using_params.rst +0 -0
  117. {pytensor-2.25.1 → pytensor-2.25.2}/doc/faq.rst +0 -0
  118. {pytensor-2.25.1 → pytensor-2.25.2}/doc/glossary.rst +0 -0
  119. {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/Elman_srnn.png +0 -0
  120. {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/PyTensor_RGB.svg +0 -0
  121. {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/blocksparse.png +0 -0
  122. {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/lstm.png +0 -0
  123. {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/lstm_memorycell.png +0 -0
  124. {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/talk2010.gif +0 -0
  125. {pytensor-2.25.1 → pytensor-2.25.2}/doc/images/talk2010.png +0 -0
  126. {pytensor-2.25.1 → pytensor-2.25.2}/doc/index.rst +0 -0
  127. {pytensor-2.25.1 → pytensor-2.25.2}/doc/install.rst +0 -0
  128. {pytensor-2.25.1 → pytensor-2.25.2}/doc/internal/how_to_release.rst +0 -0
  129. {pytensor-2.25.1 → pytensor-2.25.2}/doc/internal/index.rst +0 -0
  130. {pytensor-2.25.1 → pytensor-2.25.2}/doc/internal/metadocumentation.rst +0 -0
  131. {pytensor-2.25.1 → pytensor-2.25.2}/doc/introduction.rst +0 -0
  132. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/debugmode.rst +0 -0
  133. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/function.rst +0 -0
  134. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/index.rst +0 -0
  135. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/io.rst +0 -0
  136. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/mode.rst +0 -0
  137. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/nanguardmode.rst +0 -0
  138. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/opfromgraph.rst +0 -0
  139. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/ops.rst +0 -0
  140. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/profilemode.rst +0 -0
  141. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/compile/shared.rst +0 -0
  142. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/config.rst +0 -0
  143. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  144. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  145. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  146. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  147. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  148. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  149. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  150. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/mlp.html +0 -0
  151. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/mlp.png +0 -0
  152. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/mlp2.html +0 -0
  153. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  154. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/mlp2.png +0 -0
  155. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/ofg.html +0 -0
  156. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/examples/ofg2.html +0 -0
  157. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index.ipynb +0 -0
  158. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index.rst +0 -0
  159. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  160. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  161. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  162. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  163. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/gradient.rst +0 -0
  164. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/features.rst +0 -0
  165. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/fgraph.rst +0 -0
  166. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/graph.rst +0 -0
  167. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/index.rst +0 -0
  168. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/op.rst +0 -0
  169. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/type.rst +0 -0
  170. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/graph/utils.rst +0 -0
  171. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/index.rst +0 -0
  172. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/misc/pkl_utils.rst +0 -0
  173. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/printing.rst +0 -0
  174. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/sandbox/index.rst +0 -0
  175. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/sandbox/linalg.rst +0 -0
  176. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/scalar/index.rst +0 -0
  177. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/scan.rst +0 -0
  178. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/sparse/index.rst +0 -0
  179. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/sparse/sandbox.rst +0 -0
  180. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/basic.rst +0 -0
  181. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/basic_opt.rst +0 -0
  182. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/bcast.png +0 -0
  183. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/bcast.svg +0 -0
  184. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/conv.rst +0 -0
  185. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/elemwise.rst +0 -0
  186. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/extra_ops.rst +0 -0
  187. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/fft.rst +0 -0
  188. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/index.rst +0 -0
  189. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/io.rst +0 -0
  190. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/math_opt.rst +0 -0
  191. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/nlinalg.rst +0 -0
  192. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/plot_fft.png +0 -0
  193. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/random/basic.rst +0 -0
  194. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/random/index.rst +0 -0
  195. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/random/utils.rst +0 -0
  196. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/slinalg.rst +0 -0
  197. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/tensor/utils.rst +0 -0
  198. {pytensor-2.25.1 → pytensor-2.25.2}/doc/library/typed_list.rst +0 -0
  199. {pytensor-2.25.1 → pytensor-2.25.2}/doc/links.rst +0 -0
  200. {pytensor-2.25.1 → pytensor-2.25.2}/doc/optimizations.rst +0 -0
  201. {pytensor-2.25.1 → pytensor-2.25.2}/doc/pylintrc +0 -0
  202. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/ccodegen.rst +0 -0
  203. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/compilation.rst +0 -0
  204. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/debugging_with_stepmode.rst +0 -0
  205. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/elemwise_compiler.rst +0 -0
  206. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/function.rst +0 -0
  207. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/functional.rst +0 -0
  208. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/how_to_make_ops.rst +0 -0
  209. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/index.rst +0 -0
  210. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/index2.rst +0 -0
  211. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/interactive_debugger.rst +0 -0
  212. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/logistic_regression_example.rst +0 -0
  213. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/performance.rst +0 -0
  214. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/randomnumbers.rst +0 -0
  215. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/rethinkccodegen.rst +0 -0
  216. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/sandbox.rst +0 -0
  217. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/software.rst +0 -0
  218. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/sparse.rst +0 -0
  219. {pytensor-2.25.1 → pytensor-2.25.2}/doc/sandbox/tensoroptools.rst +0 -0
  220. {pytensor-2.25.1 → pytensor-2.25.2}/doc/troubleshooting.rst +0 -0
  221. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/adding.rst +0 -0
  222. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/adding_solution_1.py +0 -0
  223. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/aliasing.rst +0 -0
  224. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/apply.png +0 -0
  225. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/apply.svg +0 -0
  226. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/bcast.png +0 -0
  227. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/broadcasting.rst +0 -0
  228. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/conditions.rst +0 -0
  229. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/debug_faq.rst +0 -0
  230. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/dlogistic.png +0 -0
  231. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/examples.rst +0 -0
  232. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/faq_tutorial.rst +0 -0
  233. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/gradients.rst +0 -0
  234. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/index.rst +0 -0
  235. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/loading_and_saving.rst +0 -0
  236. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/logistic.gp +0 -0
  237. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/logistic.png +0 -0
  238. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/loop.rst +0 -0
  239. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/loop_solution_1.py +0 -0
  240. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/modes.rst +0 -0
  241. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/modes_solution_1.py +0 -0
  242. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/multi_cores.rst +0 -0
  243. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/nan_tutorial.rst +0 -0
  244. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/pics/d3viz.png +0 -0
  245. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  246. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  247. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  248. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/printing_drawing.rst +0 -0
  249. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/profiling.rst +0 -0
  250. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/profiling_example.py +0 -0
  251. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/profiling_example_out.prof +0 -0
  252. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/shape_info.rst +0 -0
  253. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/sparse.rst +0 -0
  254. {pytensor-2.25.1 → pytensor-2.25.2}/doc/tutorial/symbolic_graphs.rst +0 -0
  255. {pytensor-2.25.1 → pytensor-2.25.2}/doc/user_guide.rst +0 -0
  256. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/bin/__init__.py +0 -0
  257. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/breakpoint.py +0 -0
  258. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/__init__.py +0 -0
  259. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/compiledir.py +0 -0
  260. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/compilelock.py +0 -0
  261. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/function/__init__.py +0 -0
  262. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/function/pfunc.py +0 -0
  263. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/io.py +0 -0
  264. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/mode.py +0 -0
  265. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/nanguardmode.py +0 -0
  266. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/ops.py +0 -0
  267. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/compile/sharedvalue.py +0 -0
  268. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/__init__.py +0 -0
  269. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  270. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/css/d3viz.css +0 -0
  271. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/d3viz.py +0 -0
  272. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/formatting.py +0 -0
  273. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  274. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  275. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/js/d3viz.js +0 -0
  276. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  277. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  278. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/__init__.py +0 -0
  279. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/features.py +0 -0
  280. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/fg.py +0 -0
  281. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/null_type.py +0 -0
  282. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/op.py +0 -0
  283. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/replace.py +0 -0
  284. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/__init__.py +0 -0
  285. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/kanren.py +0 -0
  286. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/unify.py +0 -0
  287. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/rewriting/utils.py +0 -0
  288. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/graph/type.py +0 -0
  289. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/ifelse.py +0 -0
  290. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/__init__.py +0 -0
  291. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/__init__.py +0 -0
  292. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  293. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  294. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/cutils.py +0 -0
  295. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/cvm.py +0 -0
  296. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/c/exceptions.py +0 -0
  297. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/__init__.py +0 -0
  298. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/basic.py +0 -0
  299. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/blockwise.py +0 -0
  300. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  301. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  302. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/random.py +0 -0
  303. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/scalar.py +0 -0
  304. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/scan.py +0 -0
  305. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/shape.py +0 -0
  306. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/slinalg.py +0 -0
  307. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/sort.py +0 -0
  308. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/sparse.py +0 -0
  309. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/subtensor.py +0 -0
  310. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
  311. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/jax/linker.py +0 -0
  312. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/__init__.py +0 -0
  313. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/__init__.py +0 -0
  314. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/basic.py +0 -0
  315. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  316. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/elemwise.py +0 -0
  317. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  318. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
  319. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/random.py +0 -0
  320. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/scalar.py +0 -0
  321. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/scan.py +0 -0
  322. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/sparse.py +0 -0
  323. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/subtensor.py +0 -0
  324. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
  325. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
  326. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/numba/linker.py +0 -0
  327. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  328. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  329. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  330. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/link/pytorch/linker.py +0 -0
  331. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/__init__.py +0 -0
  332. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/check_blas_many.sh +0 -0
  333. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/frozendict.py +0 -0
  334. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/may_share_memory.py +0 -0
  335. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/ordered_set.py +0 -0
  336. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/misc/safe_asarray.py +0 -0
  337. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/py.typed +0 -0
  338. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/raise_op.py +0 -0
  339. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/__init__.py +0 -0
  340. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  341. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  342. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/c_code/gamma.c +0 -0
  343. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/c_code/incbet.c +0 -0
  344. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/loop.py +0 -0
  345. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scalar/sharedvar.py +0 -0
  346. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/__init__.py +0 -0
  347. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/basic.py +0 -0
  348. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/checkpoints.py +0 -0
  349. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/scan_perform.pyx +0 -0
  350. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/scan_perform_ext.py +0 -0
  351. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/scan/views.py +0 -0
  352. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/__init__.py +0 -0
  353. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/sandbox/__init__.py +0 -0
  354. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/sandbox/sp.py +0 -0
  355. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/sandbox/sp2.py +0 -0
  356. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/sharedvar.py +0 -0
  357. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/type.py +0 -0
  358. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/sparse/utils.py +0 -0
  359. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/__init__.py +0 -0
  360. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/blas_scipy.py +0 -0
  361. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/blockwise.py +0 -0
  362. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
  363. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
  364. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/c_code/dimshuffle.c +0 -0
  365. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/conv/__init__.py +0 -0
  366. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/exceptions.py +0 -0
  367. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/fourier.py +0 -0
  368. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/functional.py +0 -0
  369. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/inplace.py +0 -0
  370. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/io.py +0 -0
  371. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/linalg.py +0 -0
  372. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/nlinalg.py +0 -0
  373. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/__init__.py +0 -0
  374. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/basic.py +0 -0
  375. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/op.py +0 -0
  376. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  377. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/rewriting/basic.py +0 -0
  378. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/rewriting/jax.py +0 -0
  379. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/rewriting/numba.py +0 -0
  380. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/type.py +0 -0
  381. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/utils.py +0 -0
  382. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/random/var.py +0 -0
  383. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/__init__.py +0 -0
  384. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/basic.py +0 -0
  385. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/blas.py +0 -0
  386. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/blas_c.py +0 -0
  387. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/blas_scipy.py +0 -0
  388. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/blockwise.py +0 -0
  389. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/elemwise.py +0 -0
  390. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/extra_ops.py +0 -0
  391. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/jax.py +0 -0
  392. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/shape.py +0 -0
  393. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/special.py +0 -0
  394. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/subtensor.py +0 -0
  395. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  396. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/sharedvar.py +0 -0
  397. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/sort.py +0 -0
  398. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/special.py +0 -0
  399. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/type_other.py +0 -0
  400. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/utils.py +0 -0
  401. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/var.py +0 -0
  402. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/variable.py +0 -0
  403. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/tensor/xlogx.py +0 -0
  404. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/typed_list/__init__.py +0 -0
  405. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/typed_list/rewriting.py +0 -0
  406. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor/updates.py +0 -0
  407. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor.egg-info/dependency_links.txt +0 -0
  408. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor.egg-info/entry_points.txt +0 -0
  409. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor.egg-info/requires.txt +0 -0
  410. {pytensor-2.25.1 → pytensor-2.25.2}/pytensor.egg-info/top_level.txt +0 -0
  411. {pytensor-2.25.1 → pytensor-2.25.2}/setup.cfg +0 -0
  412. {pytensor-2.25.1 → pytensor-2.25.2}/tests/link/c/c_code/test_cenum.h +0 -0
  413. {pytensor-2.25.1 → pytensor-2.25.2}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  414. {pytensor-2.25.1 → pytensor-2.25.2}/tests/tensor/conv/c_code/corr3d_gemm.c +0 -0
  415. {pytensor-2.25.1 → pytensor-2.25.2}/tests/tensor/conv/c_code/corr_gemm.c +0 -0
  416. {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_breakpoint.py +0 -0
  417. {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_gradient.py +0 -0
  418. {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_ifelse.py +0 -0
  419. {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_printing.py +0 -0
  420. {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_raise_op.py +0 -0
  421. {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_rop.py +0 -0
  422. {pytensor-2.25.1 → pytensor-2.25.2}/tests/test_updates.py +0 -0
@@ -8,5 +8,4 @@ global-include *.h
8
8
  global-include *.hh
9
9
  global-include *.sh
10
10
  recursive-include doc *
11
- include versioneer.py
12
11
  include pytensor/_version.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytensor
3
- Version: 2.25.1
3
+ Version: 2.25.2
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:
@@ -243,7 +243,7 @@ A good place to start contributing is by looking through the issues
243
243
 
244
244
 
245
245
  .. |Project Name| replace:: PyTensor
246
- .. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg
247
- :target: https://github.com/pymc-devs/pytensor/actions?query=workflow%3ATests
246
+ .. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg?branch=main
247
+ :target: https://github.com/pymc-devs/pytensor/actions?query=workflow%3ATests+branch%3Amain
248
248
  .. |Coverage| image:: https://codecov.io/gh/pymc-devs/pytensor/branch/main/graph/badge.svg?token=WVwr8nZYmc
249
249
  :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
137
- :target: https://github.com/pymc-devs/pytensor/actions?query=workflow%3ATests
136
+ .. |Tests Status| image:: https://github.com/pymc-devs/pytensor/workflows/Tests/badge.svg?branch=main
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
@@ -31,7 +31,7 @@ for letter in letters:
31
31
  if len(shape[1]) < 6 or len(set(shape[1])) > 1:
32
32
  broadcastable_str = str(shape[1])
33
33
  else:
34
- broadcastable_str = '(%s,) * %d' % (str(shape[1][0]), len(shape[1]))
34
+ broadcastable_str = f'({shape[1][0]},) * {len(shape[1])}'
35
35
  print('%s%-10s %-10s %-4s %-15s %-20s' %(
36
36
  letter[0], shape[0], letter[1], len(shape[1]), s, broadcastable_str
37
37
  ))
@@ -3,7 +3,7 @@ requires = [
3
3
  "setuptools>=59.0.0",
4
4
  "cython",
5
5
  "numpy>=1.17.0",
6
- "versioneer[toml]>=0.28",
6
+ "versioneer[toml]==0.29",
7
7
  ]
8
8
  build-backend = "setuptools.build_meta"
9
9
 
@@ -125,8 +125,8 @@ line-length = 88
125
125
  exclude = ["doc/", "pytensor/_version.py"]
126
126
 
127
127
  [tool.ruff.lint]
128
- select = ["C", "E", "F", "I", "UP", "W", "RUF"]
129
- ignore = ["C408", "C901", "E501", "E741", "RUF012"]
128
+ select = ["C", "E", "F", "I", "UP", "W", "RUF", "PERF", "PTH", "ISC"]
129
+ ignore = ["C408", "C901", "E501", "E741", "RUF012", "PERF203", "ISC001"]
130
130
 
131
131
 
132
132
  [tool.ruff.lint.isort]
@@ -136,6 +136,7 @@ lines-after-imports = 2
136
136
  # TODO: Get rid of these:
137
137
  "**/__init__.py" = ["F401", "E402", "F403"]
138
138
  "pytensor/tensor/linalg.py" = ["F403"]
139
+ "pytensor/link/c/cmodule.py" = ["PTH"]
139
140
  # For the tests we skip because `pytest.importorskip` is used:
140
141
  "tests/link/jax/test_scalar.py" = ["E402"]
141
142
  "tests/link/jax/test_tensor_basic.py" = ["E402"]
@@ -149,23 +150,17 @@ lines-after-imports = 2
149
150
  "tests/sparse/test_sp2.py" = ["E402"]
150
151
  "tests/sparse/test_utils.py" = ["E402"]
151
152
  "tests/sparse/sandbox/test_sp.py" = ["E402", "F401"]
152
- "versioneer.py" = ["I"]
153
153
 
154
154
 
155
155
  [tool.mypy]
156
156
  python_version = "3.10"
157
157
  ignore_missing_imports = true
158
- no_implicit_optional = true
159
- check_untyped_defs = false
160
158
  strict_equality = true
161
159
  warn_redundant_casts = true
162
160
  warn_unused_configs = true
163
161
  warn_unused_ignores = true
164
162
  warn_return_any = true
165
- warn_no_return = false
166
163
  warn_unreachable = true
167
- show_error_codes = true
168
- allow_redefinition = false
169
164
  files = ["pytensor", "tests"]
170
165
  plugins = ["numpy.typing.mypy_plugin"]
171
166
 
@@ -28,7 +28,10 @@ from functools import singledispatch
28
28
  from pathlib import Path
29
29
  from typing import Any, NoReturn, Optional
30
30
 
31
- from pytensor.version import version as __version__
31
+ from pytensor import _version
32
+
33
+
34
+ __version__: str = _version.get_versions()["version"]
32
35
 
33
36
 
34
37
  pytensor_logger = logging.getLogger("pytensor")
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2024-07-10T08:33:07+0200",
11
+ "date": "2024-07-15T13:39:05+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "223b739f68bac30955cf06dafcf2932d0b3a18a7",
15
- "version": "2.25.1"
14
+ "full-revisionid": "72c6a816917b5ae1700fa469248278206a3bdf00",
15
+ "version": "2.25.2"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -30,9 +30,7 @@ def print_help(exit_status):
30
30
  print('Type "pytensor-cache clear" to erase the cache')
31
31
  print('Type "pytensor-cache list" to print the cache content')
32
32
  print('Type "pytensor-cache unlock" to unlock the cache directory')
33
- print(
34
- 'Type "pytensor-cache cleanup" to delete keys in the old ' "format/code version"
35
- )
33
+ print('Type "pytensor-cache cleanup" to delete keys in the old format/code version')
36
34
  print('Type "pytensor-cache purge" to force deletion of the cache directory')
37
35
  print(
38
36
  'Type "pytensor-cache basecompiledir" '
@@ -434,7 +434,7 @@ class OpFromGraph(Op, HasInnerGraph):
434
434
  def __str__(self):
435
435
  name = self.__class__.__name__ if self.name is None else self.name
436
436
  is_inline = self.is_inline
437
- return "{name}{{inline={is_inline}}}".format(**locals())
437
+ return f"{name}{{inline={is_inline}}}"
438
438
 
439
439
  def _combine_list_overrides(self, default_outs, custom_outs, callable_args):
440
440
  """Combines default and custom overrides into a single list of outputs."""
@@ -478,7 +478,7 @@ def _check_inputs(
478
478
  """
479
479
  destroyed_idx_list = []
480
480
  destroy_map = node.op.destroy_map
481
- for o_pos, i_pos_list in destroy_map.items():
481
+ for i_pos_list in destroy_map.values():
482
482
  destroyed_idx_list.extend(i_pos_list)
483
483
  destroyed_res_list = [node.inputs[i] for i in destroyed_idx_list]
484
484
 
@@ -598,7 +598,7 @@ def _check_viewmap(fgraph, node, storage_map):
598
598
  # TODO: make sure this is correct
599
599
  # According to OB, duplicate inputs are rejected on build graph time
600
600
  # if they cause problems. So if they are here it should be ok.
601
- for key, val in good_alias.items():
601
+ for key in good_alias:
602
602
  bad_alias.pop(key, None)
603
603
  if bad_alias:
604
604
  raise BadViewMap(node, oi, outstorage, list(bad_alias.values()))
@@ -756,10 +756,7 @@ def _get_preallocated_maps(
756
756
  # TODO: Sparse? Scalar does not really make sense.
757
757
 
758
758
  # Do not preallocate memory for outputs that actually work inplace
759
- considered_outputs = []
760
- for r in node.outputs:
761
- if r not in inplace_outs:
762
- considered_outputs.append(r)
759
+ considered_outputs = [r for r in node.outputs if r not in inplace_outs]
763
760
 
764
761
  # Output storage that was initially present in the storage_map
765
762
  if "initial" in prealloc_modes or "ALL" in prealloc_modes:
@@ -1617,14 +1614,10 @@ class _Linker(LocalLinker):
1617
1614
  opt = str(reason[0][0])
1618
1615
  msg = (
1619
1616
  f"An optimization (probably {opt}) inserted an "
1620
- "apply node that raise an error."
1621
- + "\nThe information we have about this "
1622
- "optimizations is:"
1623
- + str(reason[0][1])
1624
- + "\n"
1625
- + reason[0][2]
1626
- + "\n\nThe original exception: \n"
1627
- + str(e)
1617
+ "apply node that raise an error.\n"
1618
+ "The information we have about this optimization is:"
1619
+ f"{reason[0][1]}\n{reason[0][2]}\n"
1620
+ f"\nThe original exception: \n{e}"
1628
1621
  )
1629
1622
  new_e = e.__class__(msg)
1630
1623
  exc_type, exc_value, exc_trace = sys.exc_info()
@@ -1728,15 +1721,11 @@ class _Linker(LocalLinker):
1728
1721
  raise
1729
1722
  opt = str(reason[0][0])
1730
1723
  msg = (
1731
- f"An optimization (probably {opt}) inserted "
1732
- "an apply node that raise an error."
1733
- + "\nThe information we have about this "
1734
- "optimizations is:"
1735
- + str(reason[0][1])
1736
- + "\n"
1737
- + reason[0][2]
1738
- + "\n\nThe original exception: \n"
1739
- + str(e)
1724
+ f"An optimization (probably {opt}) inserted an "
1725
+ "apply node that raise an error.\n"
1726
+ "The information we have about this optimization is:"
1727
+ f"{reason[0][1]}\n{reason[0][2]}\n"
1728
+ f"\nThe original exception: \n{e}"
1740
1729
  )
1741
1730
  new_e = e.__class__(msg)
1742
1731
  exc_type, exc_value, exc_trace = sys.exc_info()
@@ -1067,7 +1067,7 @@ class Function:
1067
1067
  container = property(
1068
1068
  lambda self: self._container,
1069
1069
  None, # this property itself is not settable
1070
- doc=("dictionary-like access to the containers associated with " "Variables"),
1070
+ doc=("dictionary-like access to the containers associated with Variables"),
1071
1071
  )
1072
1072
 
1073
1073
  def free(self):
@@ -1890,11 +1890,7 @@ def get_info_on_inputs(named_inputs, n_unnamed_inputs):
1890
1890
  )
1891
1891
  else:
1892
1892
  if n_unnamed_inputs == 0:
1893
- msg = "The function has {} named input{} ({}).".format(
1894
- n_named_inputs,
1895
- get_plural(n_named_inputs),
1896
- ", ".join(named_inputs),
1897
- )
1893
+ msg = f"The function has {n_named_inputs} named input{get_plural(n_named_inputs)} ({', '.join(named_inputs)})."
1898
1894
  else:
1899
1895
  msg = (
1900
1896
  f"The function has {n_named_inputs} named input{get_plural(n_named_inputs)} ({', '.join(named_inputs)}), and {n_unnamed_inputs} unnamed "
@@ -110,6 +110,6 @@ def detect_nan(fgraph, i, node, fn):
110
110
  ):
111
111
  print("*** NaN detected ***")
112
112
  debugprint(node)
113
- print("Inputs : %s" % [input[0] for input in fn.inputs])
114
- print("Outputs: %s" % [output[0] for output in fn.outputs])
113
+ print(f"Inputs : {[input[0] for input in fn.inputs]}")
114
+ print(f"Outputs: {[output[0] for output in fn.outputs]}")
115
115
  break
@@ -753,14 +753,11 @@ class ProfileStats:
753
753
  )
754
754
  # Same as before, this I've sacrificed some information making
755
755
  # the output more readable
756
+ percent = sum(f for f, t, a, nd_id, nb_call in atimes[N:])
757
+ duration = sum(t for f, t, a, nd_id, nb_call in atimes[N:])
756
758
  print(
757
- " ... (remaining %i Apply instances account for "
758
- "%.2f%%(%.2fs) of the runtime)"
759
- % (
760
- max(0, len(atimes) - N),
761
- sum(f for f, t, a, nd_id, nb_call in atimes[N:]),
762
- sum(t for f, t, a, nd_id, nb_call in atimes[N:]),
763
- ),
759
+ f" ... (remaining {max(0, len(atimes) - N)} Apply instances account for "
760
+ f"{percent:.2f}%%({duration:.2f}s) of the runtime)",
764
761
  file=file,
765
762
  )
766
763
  print("", file=file)
@@ -1380,9 +1377,9 @@ class ProfileStats:
1380
1377
  items.sort(key=lambda a: a[1], reverse=True)
1381
1378
  for idx, ((fgraph, node), node_outputs_size) in enumerate(items[:N]):
1382
1379
  code = ["c"] * len(node.outputs)
1383
- for out, inp in node.op.destroy_map.items():
1380
+ for out in node.op.destroy_map:
1384
1381
  code[out] = "i"
1385
- for out, inp in node.op.view_map.items():
1382
+ for out in node.op.view_map:
1386
1383
  code[out] = "v"
1387
1384
  shapes = str(fct_shapes[fgraph][node])
1388
1385
 
@@ -1155,14 +1155,14 @@ def _default_compiledirname() -> str:
1155
1155
  return safe
1156
1156
 
1157
1157
 
1158
- def _filter_base_compiledir(path: Path) -> Path:
1158
+ def _filter_base_compiledir(path: str | Path) -> Path:
1159
1159
  # Expand '~' in path
1160
- return path.expanduser()
1160
+ return Path(path).expanduser()
1161
1161
 
1162
1162
 
1163
- def _filter_compiledir(path: Path) -> Path:
1163
+ def _filter_compiledir(path: str | Path) -> Path:
1164
1164
  # Expand '~' in path
1165
- path = path.expanduser()
1165
+ path = Path(path).expanduser()
1166
1166
  # Turn path into the 'real' path. This ensures that:
1167
1167
  # 1. There is no relative path, which would fail e.g. when trying to
1168
1168
  # import modules from the compile dir.
@@ -533,12 +533,11 @@ class DeviceParam(ConfigParam):
533
533
  )
534
534
  elif val == self.default:
535
535
  return val
536
- else:
537
- raise ValueError(
538
- 'Invalid value ("{val}") for configuration '
539
- 'variable "{self.name}". Valid options start with '
540
- 'one of "cpu".'
541
- )
536
+ raise ValueError(
537
+ f'Invalid value ("{val}") for configuration '
538
+ f'variable "{self.name}". Valid options start with '
539
+ 'one of "cpu".'
540
+ )
542
541
 
543
542
  def __str__(self):
544
543
  return f"{self.name} ({self.default})"
@@ -802,20 +802,20 @@ def _node_to_pattern(node):
802
802
  if not isinstance(connection_pattern, list):
803
803
  raise TypeError(
804
804
  "Op.connection_pattern should return "
805
- + f"list of list of bool, but for Op={node.op}"
806
- + f"got {connection_pattern} with type {type(connection_pattern)}."
805
+ f"list of list of bool, but for Op={node.op}"
806
+ f"got {connection_pattern} with type {type(connection_pattern)}."
807
807
  )
808
808
  if len(connection_pattern) != len(node.inputs):
809
809
  raise ValueError(
810
810
  f"{node.op}.connection_pattern should have {len(node.inputs)}"
811
- + f" rows but has {len(connection_pattern)}."
811
+ f" rows but has {len(connection_pattern)}."
812
812
  )
813
813
  for ii, output_pattern in enumerate(connection_pattern):
814
814
  if not isinstance(output_pattern, list):
815
815
  raise TypeError(
816
816
  f"{node.op}.connection_pattern should return"
817
- + f" a list of lists, but element {int(ii)}"
818
- + f"is {output_pattern} of type {type(output_pattern)}."
817
+ f" a list of lists, but element {int(ii)}"
818
+ f"is {output_pattern} of type {type(output_pattern)}."
819
819
  )
820
820
  else:
821
821
  connection_pattern = [[True for output in node.outputs] for ipt in node.inputs]
@@ -1328,7 +1328,7 @@ def _populate_grad_dict(var_to_app_to_idx, grad_dict, wrt, cost_name=None):
1328
1328
  elif connected and not actually_connected:
1329
1329
  msg = f"{node.op}.grad returned DisconnectedType for input {i}."
1330
1330
  if hasattr(node.op, "connection_pattern"):
1331
- msg += " Its connection_pattern method does not" " allow this."
1331
+ msg += " Its connection_pattern method does not allow this."
1332
1332
  raise TypeError(msg)
1333
1333
  else:
1334
1334
  msg += (
@@ -909,6 +909,7 @@ def ancestors(
909
909
  def expand(r: Variable) -> Iterator[Variable] | None:
910
910
  if r.owner and (not blockers or r not in blockers):
911
911
  return reversed(r.owner.inputs)
912
+ return None
912
913
 
913
914
  yield from cast(Generator[Variable, None, None], walk(graphs, expand, False))
914
915
 
@@ -1011,6 +1012,7 @@ def vars_between(
1011
1012
  def expand(r: Variable) -> Iterable[Variable] | None:
1012
1013
  if r.owner and r not in ins:
1013
1014
  return reversed(r.owner.inputs + r.owner.outputs)
1015
+ return None
1014
1016
 
1015
1017
  yield from cast(Generator[Variable, None, None], walk(outs, expand))
1016
1018
 
@@ -2039,13 +2041,15 @@ def get_var_by_name(
2039
2041
  from pytensor.graph.op import HasInnerGraph
2040
2042
 
2041
2043
  def expand(r) -> list[Variable] | None:
2042
- if r.owner:
2043
- res = list(r.owner.inputs)
2044
+ if not r.owner:
2045
+ return None
2046
+
2047
+ res = list(r.owner.inputs)
2044
2048
 
2045
- if isinstance(r.owner.op, HasInnerGraph):
2046
- res.extend(r.owner.op.inner_outputs)
2049
+ if isinstance(r.owner.op, HasInnerGraph):
2050
+ res.extend(r.owner.op.inner_outputs)
2047
2051
 
2048
- return res
2052
+ return res
2049
2053
 
2050
2054
  results: tuple[Variable, ...] = ()
2051
2055
  for var in walk(graphs, expand, False):
@@ -182,7 +182,7 @@ def _build_droot_impact(destroy_handler):
182
182
  root_destroyer = {} # root -> destroyer apply
183
183
 
184
184
  for app in destroy_handler.destroyers:
185
- for output_idx, input_idx_list in app.op.destroy_map.items():
185
+ for input_idx_list in app.op.destroy_map.values():
186
186
  if len(input_idx_list) != 1:
187
187
  raise NotImplementedError()
188
188
  input_idx = input_idx_list[0]
@@ -698,7 +698,7 @@ class DestroyHandler(Bookkeeper):
698
698
  # keep track of clients that should run before the current Apply
699
699
  root_clients = set_type()
700
700
  # for each destroyed input...
701
- for output_idx, input_idx_list in app.op.destroy_map.items():
701
+ for input_idx_list in app.op.destroy_map.values():
702
702
  destroyed_idx = input_idx_list[0]
703
703
  destroyed_variable = app.inputs[destroyed_idx]
704
704
  root = droot[destroyed_variable]
@@ -1664,15 +1664,12 @@ class PatternNodeRewriter(NodeRewriter):
1664
1664
 
1665
1665
  def pattern_to_str(pattern):
1666
1666
  if isinstance(pattern, list | tuple):
1667
- return "{}({})".format(
1668
- str(pattern[0]),
1669
- ", ".join(pattern_to_str(p) for p in pattern[1:]),
1670
- )
1667
+ args = ", ".join(pattern_to_str(p) for p in pattern[1:])
1668
+ return f"{pattern[0]!s}({args})"
1671
1669
  elif isinstance(pattern, dict):
1672
- return "{} subject to {}".format(
1673
- pattern_to_str(pattern["pattern"]),
1674
- str(pattern.get("constraint", "no conditions")),
1675
- )
1670
+ a = pattern_to_str(pattern["pattern"])
1671
+ b = pattern.get("constraint", "no conditions")
1672
+ return f"{a} subject to {b}"
1676
1673
  else:
1677
1674
  return str(pattern)
1678
1675
 
@@ -229,10 +229,10 @@ class RewriteDatabaseQuery:
229
229
  def __str__(self):
230
230
  return (
231
231
  "RewriteDatabaseQuery("
232
- + f"inc={self.include},ex={self.exclude},"
233
- + f"require={self.require},subquery={self.subquery},"
234
- + f"position_cutoff={self.position_cutoff},"
235
- + f"extra_rewrites={self.extra_rewrites})"
232
+ f"inc={self.include},ex={self.exclude},"
233
+ f"require={self.require},subquery={self.subquery},"
234
+ f"position_cutoff={self.position_cutoff},"
235
+ f"extra_rewrites={self.extra_rewrites})"
236
236
  )
237
237
 
238
238
  def __setstate__(self, state):
@@ -245,10 +245,9 @@ class MetaType(ABCMeta):
245
245
  else:
246
246
 
247
247
  def __str__(self):
248
- return "{}{{{}}}".format(
249
- self.__class__.__name__,
250
- ", ".join(f"{p}={getattr(self, p)!r}" for p in props),
251
- )
248
+ classname = self.__class__.__name__
249
+ args = ", ".join(f"{p}={getattr(self, p)!r}" for p in props)
250
+ return f"{classname}{{{args}}}"
252
251
 
253
252
  dct["__str__"] = __str__
254
253
 
@@ -322,7 +322,7 @@ class PerformLinker(LocalLinker):
322
322
  output_storage=None,
323
323
  storage_map=None,
324
324
  ):
325
- fgraph: Any = self.fgraph
325
+ fgraph = self.fgraph
326
326
  order = self.schedule(fgraph)
327
327
  no_recycling = self.no_recycling
328
328
 
@@ -347,7 +347,7 @@ class PerformLinker(LocalLinker):
347
347
  thunks[-1].outputs = [storage_map[v] for v in node.outputs]
348
348
 
349
349
  computed, last_user = gc_helper(order)
350
- post_thunk_old_storage: Any = [] if self.allow_gc else None
350
+ post_thunk_old_storage = [] if self.allow_gc else None
351
351
 
352
352
  for node in order:
353
353
  if self.allow_gc: