pytensor 3.1.2__tar.gz → 3.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. {pytensor-3.1.2/pytensor.egg-info → pytensor-3.1.3}/PKG-INFO +1 -1
  2. {pytensor-3.1.2 → pytensor-3.1.3}/doc/internal/how_to_release.rst +0 -4
  3. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/config.rst +0 -33
  4. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/_version.py +3 -3
  5. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/debug/profiling.py +1 -59
  6. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/maker.py +1 -8
  7. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/mode.py +55 -3
  8. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/configdefaults.py +0 -61
  9. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/configparser.py +0 -3
  10. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/gradient.py +1 -1
  11. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/features.py +1 -26
  12. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/rewriting/basic.py +1 -1
  13. pytensor-3.1.3/pytensor/graph/rewriting/utils.py +116 -0
  14. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/type.py +0 -28
  15. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/basic.py +1 -7
  16. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/cmodule.py +1 -40
  17. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/op.py +0 -1
  18. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/printing.py +0 -81
  19. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scalar/basic.py +30 -79
  20. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/op.py +2 -12
  21. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/utils.py +0 -32
  22. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/sparse/basic.py +12 -2
  23. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/basic.py +1 -1
  24. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/gemm.py +3 -1
  25. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/elemwise.py +7 -6
  26. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/extra_ops.py +0 -65
  27. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/fourier.py +11 -6
  28. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/inverse.py +3 -1
  29. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/optimize.py +4 -4
  30. pytensor-3.1.3/pytensor/tensor/rewriting/extra_ops.py +64 -0
  31. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/math.py +0 -15
  32. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/subtensor.py +180 -35
  33. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/subtensor_lift.py +83 -40
  34. {pytensor-3.1.2 → pytensor-3.1.3/pytensor.egg-info}/PKG-INFO +1 -1
  35. {pytensor-3.1.2 → pytensor-3.1.3}/tests/test_gradient.py +7 -0
  36. pytensor-3.1.2/pytensor/graph/rewriting/utils.py +0 -272
  37. pytensor-3.1.2/pytensor/tensor/rewriting/extra_ops.py +0 -118
  38. {pytensor-3.1.2 → pytensor-3.1.3}/LICENSE.txt +0 -0
  39. {pytensor-3.1.2 → pytensor-3.1.3}/MANIFEST.in +0 -0
  40. {pytensor-3.1.2 → pytensor-3.1.3}/README.rst +0 -0
  41. {pytensor-3.1.2 → pytensor-3.1.3}/doc/.templates/PLACEHOLDER +0 -0
  42. {pytensor-3.1.2 → pytensor-3.1.3}/doc/.templates/layout.html +0 -0
  43. {pytensor-3.1.2 → pytensor-3.1.3}/doc/.templates/nb-badges.html +0 -0
  44. {pytensor-3.1.2 → pytensor-3.1.3}/doc/.templates/rendered_citation.html +0 -0
  45. {pytensor-3.1.2 → pytensor-3.1.3}/doc/LICENSE.txt +0 -0
  46. {pytensor-3.1.2 → pytensor-3.1.3}/doc/README.md +0 -0
  47. {pytensor-3.1.2 → pytensor-3.1.3}/doc/_drafts/benchmark_mlx_v_jax_corrected.ipynb +0 -0
  48. {pytensor-3.1.2 → pytensor-3.1.3}/doc/_thumbnails/autodiff/vector_jacobian_product.png +0 -0
  49. {pytensor-3.1.2 → pytensor-3.1.3}/doc/acknowledgement.rst +0 -0
  50. {pytensor-3.1.2 → pytensor-3.1.3}/doc/bcast.png +0 -0
  51. {pytensor-3.1.2 → pytensor-3.1.3}/doc/bcast.svg +0 -0
  52. {pytensor-3.1.2 → pytensor-3.1.3}/doc/blog.md +0 -0
  53. {pytensor-3.1.2 → pytensor-3.1.3}/doc/conf.py +0 -0
  54. {pytensor-3.1.2 → pytensor-3.1.3}/doc/core_development_guide.rst +0 -0
  55. {pytensor-3.1.2 → pytensor-3.1.3}/doc/css.inc +0 -0
  56. {pytensor-3.1.2 → pytensor-3.1.3}/doc/dev_start_guide.rst +0 -0
  57. {pytensor-3.1.2 → pytensor-3.1.3}/doc/environment.yml +0 -0
  58. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/apply.png +0 -0
  59. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/apply.svg +0 -0
  60. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/apply2.svg +0 -0
  61. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/creating_a_c_op.rst +0 -0
  62. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  63. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/creating_an_op.rst +0 -0
  64. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/ctype.rst +0 -0
  65. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/extending_faq.rst +0 -0
  66. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/extending_pytensor_solution_1.py +0 -0
  67. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/graph_rewriting.rst +0 -0
  68. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/graphstructures.rst +0 -0
  69. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/index.rst +0 -0
  70. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/inplace.rst +0 -0
  71. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/op.rst +0 -0
  72. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/other_ops.rst +0 -0
  73. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  74. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  75. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/pipeline.rst +0 -0
  76. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/scan.rst +0 -0
  77. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/tips.rst +0 -0
  78. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/type.rst +0 -0
  79. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/unittest.rst +0 -0
  80. {pytensor-3.1.2 → pytensor-3.1.3}/doc/extending/using_params.rst +0 -0
  81. {pytensor-3.1.2 → pytensor-3.1.3}/doc/faq.rst +0 -0
  82. {pytensor-3.1.2 → pytensor-3.1.3}/doc/gallery/applications/normalizing_flows_in_pytensor.ipynb +0 -0
  83. {pytensor-3.1.2 → pytensor-3.1.3}/doc/gallery/applications/tiny_transformer_llm.ipynb +0 -0
  84. {pytensor-3.1.2 → pytensor-3.1.3}/doc/gallery/autodiff/vector_jacobian_product.ipynb +0 -0
  85. {pytensor-3.1.2 → pytensor-3.1.3}/doc/gallery/introduction/pytensor_intro.ipynb +0 -0
  86. {pytensor-3.1.2 → pytensor-3.1.3}/doc/gallery/optimize/root.ipynb +0 -0
  87. {pytensor-3.1.2 → pytensor-3.1.3}/doc/gallery/page_footer.md +0 -0
  88. {pytensor-3.1.2 → pytensor-3.1.3}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
  89. {pytensor-3.1.2 → pytensor-3.1.3}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
  90. {pytensor-3.1.2 → pytensor-3.1.3}/doc/generate_dtype_tensor_table.py +0 -0
  91. {pytensor-3.1.2 → pytensor-3.1.3}/doc/glossary.rst +0 -0
  92. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/Elman_srnn.png +0 -0
  93. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/PyTensor.png +0 -0
  94. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/PyTensor_RGB.svg +0 -0
  95. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/PyTensor_logo.png +0 -0
  96. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/binder.svg +0 -0
  97. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/blocksparse.png +0 -0
  98. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/colab.svg +0 -0
  99. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/github.svg +0 -0
  100. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/lstm.png +0 -0
  101. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/lstm_memorycell.png +0 -0
  102. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/talk2010.gif +0 -0
  103. {pytensor-3.1.2 → pytensor-3.1.3}/doc/images/talk2010.png +0 -0
  104. {pytensor-3.1.2 → pytensor-3.1.3}/doc/index.rst +0 -0
  105. {pytensor-3.1.2 → pytensor-3.1.3}/doc/install.rst +0 -0
  106. {pytensor-3.1.2 → pytensor-3.1.3}/doc/internal/index.rst +0 -0
  107. {pytensor-3.1.2 → pytensor-3.1.3}/doc/internal/metadocumentation.rst +0 -0
  108. {pytensor-3.1.2 → pytensor-3.1.3}/doc/introduction.rst +0 -0
  109. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/compile/debugmode.rst +0 -0
  110. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/compile/function.rst +0 -0
  111. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/compile/index.rst +0 -0
  112. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/compile/io.rst +0 -0
  113. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/compile/mode.rst +0 -0
  114. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/compile/nanguardmode.rst +0 -0
  115. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/compile/opfromgraph.rst +0 -0
  116. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/compile/ops.rst +0 -0
  117. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/compile/profilemode.rst +0 -0
  118. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/compile/shared.rst +0 -0
  119. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  120. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  121. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  122. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  123. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  124. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  125. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  126. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp.html +0 -0
  127. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp.png +0 -0
  128. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp2.html +0 -0
  129. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  130. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/mlp2.png +0 -0
  131. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/ofg.html +0 -0
  132. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/examples/ofg2.html +0 -0
  133. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/index.ipynb +0 -0
  134. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/index.rst +0 -0
  135. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  136. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  137. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  138. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  139. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/graph/features.rst +0 -0
  140. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/graph/fgraph.rst +0 -0
  141. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/graph/graph.rst +0 -0
  142. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/graph/index.rst +0 -0
  143. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/graph/op.rst +0 -0
  144. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/graph/replace.rst +0 -0
  145. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/graph/type.rst +0 -0
  146. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/graph/utils.rst +0 -0
  147. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/index.rst +0 -0
  148. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/misc/pkl_utils.rst +0 -0
  149. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/printing.rst +0 -0
  150. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/scalar/index.rst +0 -0
  151. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/scan.rst +0 -0
  152. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/sparse/index.rst +0 -0
  153. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/sparse/sandbox.rst +0 -0
  154. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/basic.rst +0 -0
  155. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/basic_opt.rst +0 -0
  156. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/bcast.png +0 -0
  157. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/bcast.svg +0 -0
  158. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/elemwise.rst +0 -0
  159. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/extra_ops.rst +0 -0
  160. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/fft.rst +0 -0
  161. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/functional.rst +0 -0
  162. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/index.rst +0 -0
  163. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/io.rst +0 -0
  164. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/linalg.rst +0 -0
  165. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/math_opt.rst +0 -0
  166. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/nlinalg.rst +0 -0
  167. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/optimize.rst +0 -0
  168. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/plot_fft.png +0 -0
  169. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/random.rst +0 -0
  170. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/slinalg.rst +0 -0
  171. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/tensor/utils.rst +0 -0
  172. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/typed_list.rst +0 -0
  173. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/xtensor/index.md +0 -0
  174. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/xtensor/linalg.md +0 -0
  175. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/xtensor/math.md +0 -0
  176. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/xtensor/module_functions.md +0 -0
  177. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/xtensor/random.md +0 -0
  178. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/xtensor/signal.md +0 -0
  179. {pytensor-3.1.2 → pytensor-3.1.3}/doc/library/xtensor/type.md +0 -0
  180. {pytensor-3.1.2 → pytensor-3.1.3}/doc/links.rst +0 -0
  181. {pytensor-3.1.2 → pytensor-3.1.3}/doc/optimizations.rst +0 -0
  182. {pytensor-3.1.2 → pytensor-3.1.3}/doc/pylintrc +0 -0
  183. {pytensor-3.1.2 → pytensor-3.1.3}/doc/robots.txt +0 -0
  184. {pytensor-3.1.2 → pytensor-3.1.3}/doc/troubleshooting.rst +0 -0
  185. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/adding.rst +0 -0
  186. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/adding_solution_1.py +0 -0
  187. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/aliasing.rst +0 -0
  188. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/apply.png +0 -0
  189. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/apply.svg +0 -0
  190. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/bcast.png +0 -0
  191. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/broadcasting.rst +0 -0
  192. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/conditions.rst +0 -0
  193. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/debug_faq.rst +0 -0
  194. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/dlogistic.png +0 -0
  195. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/examples.rst +0 -0
  196. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/faq_tutorial.rst +0 -0
  197. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/gradients.rst +0 -0
  198. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/index.rst +0 -0
  199. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/loading_and_saving.rst +0 -0
  200. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/logistic.gp +0 -0
  201. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/logistic.png +0 -0
  202. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/loop.rst +0 -0
  203. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/loop_solution_1.py +0 -0
  204. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/modes.rst +0 -0
  205. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/modes_solution_1.py +0 -0
  206. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/multi_cores.rst +0 -0
  207. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/nan_tutorial.rst +0 -0
  208. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/pics/d3viz.png +0 -0
  209. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  210. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  211. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  212. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/printing_drawing.rst +0 -0
  213. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/prng.rst +0 -0
  214. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/profiling.rst +0 -0
  215. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/profiling_example.py +0 -0
  216. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/profiling_example_out.prof +0 -0
  217. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/shape_info.rst +0 -0
  218. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/sparse.rst +0 -0
  219. {pytensor-3.1.2 → pytensor-3.1.3}/doc/tutorial/symbolic_graphs.rst +0 -0
  220. {pytensor-3.1.2 → pytensor-3.1.3}/doc/user_guide.rst +0 -0
  221. {pytensor-3.1.2 → pytensor-3.1.3}/pyproject.toml +0 -0
  222. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/__init__.py +0 -0
  223. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/_sparse_lazy.py +0 -0
  224. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/__init__.py +0 -0
  225. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/alloc.py +0 -0
  226. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/blockwise.py +0 -0
  227. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/core.py +0 -0
  228. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/diagonal.py +0 -0
  229. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/dimshuffle.py +0 -0
  230. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/dot.py +0 -0
  231. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/elemwise.py +0 -0
  232. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/orthogonal.py +0 -0
  233. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/permutation.py +0 -0
  234. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/positive_definite.py +0 -0
  235. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/reshape.py +0 -0
  236. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/selection.py +0 -0
  237. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/shape.py +0 -0
  238. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/specify.py +0 -0
  239. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/subtensor.py +0 -0
  240. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/symmetric.py +0 -0
  241. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/assumptions/triangular.py +0 -0
  242. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/basic.py +0 -0
  243. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/bin/__init__.py +0 -0
  244. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/bin/pytensor_cache.py +0 -0
  245. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/breakpoint.py +0 -0
  246. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/__init__.py +0 -0
  247. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/aliasing.py +0 -0
  248. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/builders.py +0 -0
  249. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/compiledir.py +0 -0
  250. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/compilelock.py +0 -0
  251. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/debug/__init__.py +0 -0
  252. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/debug/debugmode.py +0 -0
  253. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/debug/dump.py +0 -0
  254. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/debug/monitormode.py +0 -0
  255. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/debug/nanguardmode.py +0 -0
  256. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/executor.py +0 -0
  257. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/inner_function.py +0 -0
  258. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/io.py +0 -0
  259. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/ops.py +0 -0
  260. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/rebuild.py +0 -0
  261. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/rewriting.py +0 -0
  262. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/compile/sharedvalue.py +0 -0
  263. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/__init__.py +0 -0
  264. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  265. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/css/d3viz.css +0 -0
  266. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/d3viz.py +0 -0
  267. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/formatting.py +0 -0
  268. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/html/template.html +0 -0
  269. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  270. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  271. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/js/d3viz.js +0 -0
  272. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  273. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  274. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/__init__.py +0 -0
  275. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/basic.py +0 -0
  276. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/destroyhandler.py +0 -0
  277. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/fg.py +0 -0
  278. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/null_type.py +0 -0
  279. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/op.py +0 -0
  280. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/replace.py +0 -0
  281. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/rewriting/__init__.py +0 -0
  282. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/rewriting/db.py +0 -0
  283. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/rewriting/kanren.py +0 -0
  284. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/rewriting/reachability.py +0 -0
  285. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/rewriting/unify.py +0 -0
  286. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/traversal.py +0 -0
  287. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/graph/utils.py +0 -0
  288. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/ifelse.py +0 -0
  289. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/ipython.py +0 -0
  290. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/__init__.py +0 -0
  291. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/__init__.py +0 -0
  292. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/basic.py +0 -0
  293. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  294. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  295. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/cutils.py +0 -0
  296. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/cvm.py +0 -0
  297. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/exceptions.py +0 -0
  298. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/interface.py +0 -0
  299. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/lazylinker_c.py +0 -0
  300. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/params_type.py +0 -0
  301. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/c/type.py +0 -0
  302. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/__init__.py +0 -0
  303. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/__init__.py +0 -0
  304. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/basic.py +0 -0
  305. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/blas.py +0 -0
  306. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/blockwise.py +0 -0
  307. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/einsum.py +0 -0
  308. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  309. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  310. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/__init__.py +0 -0
  311. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/constructors.py +0 -0
  312. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/decomposition.py +0 -0
  313. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/inverse.py +0 -0
  314. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/products.py +0 -0
  315. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/solvers.py +0 -0
  316. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/linalg/summary.py +0 -0
  317. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/math.py +0 -0
  318. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/pad.py +0 -0
  319. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/random.py +0 -0
  320. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/scalar.py +0 -0
  321. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/scan.py +0 -0
  322. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/shape.py +0 -0
  323. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
  324. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
  325. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/sort.py +0 -0
  326. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/sparse.py +0 -0
  327. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/subtensor.py +0 -0
  328. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
  329. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/linker.py +0 -0
  330. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/jax/ops.py +0 -0
  331. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/__init__.py +0 -0
  332. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/__init__.py +0 -0
  333. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/basic.py +0 -0
  334. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/blas.py +0 -0
  335. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/blockwise.py +0 -0
  336. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/einsum.py +0 -0
  337. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/elemwise.py +0 -0
  338. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/extra_ops.py +0 -0
  339. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/__init__.py +0 -0
  340. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/decomposition.py +0 -0
  341. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/inverse.py +0 -0
  342. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/products.py +0 -0
  343. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/solvers.py +0 -0
  344. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/linalg/summary.py +0 -0
  345. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/math.py +0 -0
  346. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/pad.py +0 -0
  347. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/scalar.py +0 -0
  348. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/shape.py +0 -0
  349. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/signal/__init__.py +0 -0
  350. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/signal/conv.py +0 -0
  351. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/sort.py +0 -0
  352. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/subtensor.py +0 -0
  353. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/dispatch/tensor_basic.py +0 -0
  354. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/mlx/linker.py +0 -0
  355. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/__init__.py +0 -0
  356. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/cache.py +0 -0
  357. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/__init__.py +0 -0
  358. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/basic.py +0 -0
  359. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/blockwise.py +0 -0
  360. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/compile_ops.py +0 -0
  361. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  362. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/elemwise.py +0 -0
  363. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  364. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +0 -0
  365. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
  366. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/constructors.py +0 -0
  367. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
  368. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
  369. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/dispatch.py +0 -0
  370. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/eigen.py +0 -0
  371. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
  372. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
  373. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/qr.py +0 -0
  374. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/qz.py +0 -0
  375. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/schur.py +0 -0
  376. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/decomposition/svd.py +0 -0
  377. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/inverse.py +0 -0
  378. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/products.py +0 -0
  379. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/__init__.py +0 -0
  380. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/cholesky.py +0 -0
  381. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/dispatch.py +0 -0
  382. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/general.py +0 -0
  383. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/hermitian.py +0 -0
  384. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/linear_control.py +0 -0
  385. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/lu_solve.py +0 -0
  386. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/posdef.py +0 -0
  387. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/symmetric.py +0 -0
  388. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/triangular.py +0 -0
  389. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/tridiagonal.py +0 -0
  390. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/solvers/utils.py +0 -0
  391. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/summary.py +0 -0
  392. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
  393. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/random.py +0 -0
  394. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/scalar.py +0 -0
  395. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/scan.py +0 -0
  396. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/shape.py +0 -0
  397. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
  398. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
  399. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sort.py +0 -0
  400. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/__init__.py +0 -0
  401. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/basic.py +0 -0
  402. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/math.py +0 -0
  403. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/sparse/variable.py +0 -0
  404. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/string_codegen.py +0 -0
  405. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/subtensor.py +0 -0
  406. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
  407. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/typed_list.py +0 -0
  408. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
  409. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/numba/linker.py +0 -0
  410. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
  411. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  412. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/blas.py +0 -0
  413. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
  414. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  415. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
  416. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/__init__.py +0 -0
  417. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/decomposition.py +0 -0
  418. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/inverse.py +0 -0
  419. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/products.py +0 -0
  420. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/linalg/summary.py +0 -0
  421. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/math.py +0 -0
  422. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  423. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/shape.py +0 -0
  424. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/sort.py +0 -0
  425. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
  426. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/pytorch/linker.py +0 -0
  427. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/utils.py +0 -0
  428. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/link/vm.py +0 -0
  429. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/misc/__init__.py +0 -0
  430. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/misc/check_blas.py +0 -0
  431. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/misc/check_blas_many.sh +0 -0
  432. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/misc/check_duplicate_key.py +0 -0
  433. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  434. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/misc/elemwise_time_test.py +0 -0
  435. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/misc/frozendict.py +0 -0
  436. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/misc/may_share_memory.py +0 -0
  437. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/misc/ordered_set.py +0 -0
  438. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/misc/pkl_utils.py +0 -0
  439. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/npy_2_compat.py +0 -0
  440. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/py.typed +0 -0
  441. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/raise_op.py +0 -0
  442. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scalar/__init__.py +0 -0
  443. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  444. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  445. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scalar/c_code/gamma.c +0 -0
  446. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scalar/c_code/incbet.c +0 -0
  447. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scalar/loop.py +0 -0
  448. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scalar/math.py +0 -0
  449. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scalar/sharedvar.py +0 -0
  450. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/__init__.py +0 -0
  451. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/basic.py +0 -0
  452. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/checkpoints.py +0 -0
  453. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/rewriting/__init__.py +0 -0
  454. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/rewriting/db.py +0 -0
  455. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/rewriting/inner_graph.py +0 -0
  456. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/rewriting/inplace.py +0 -0
  457. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/rewriting/io.py +0 -0
  458. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/rewriting/merge.py +0 -0
  459. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/rewriting/push_out.py +0 -0
  460. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/rewriting/trace.py +0 -0
  461. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/rewriting/utils.py +0 -0
  462. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/scan_perform.pyx +0 -0
  463. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/scan_perform_ext.py +0 -0
  464. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/scan/views.py +0 -0
  465. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/sparse/__init__.py +0 -0
  466. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/sparse/linalg.py +0 -0
  467. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/sparse/math.py +0 -0
  468. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/sparse/rewriting.py +0 -0
  469. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/sparse/sharedvar.py +0 -0
  470. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/sparse/type.py +0 -0
  471. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/sparse/utils.py +0 -0
  472. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/sparse/variable.py +0 -0
  473. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/__init__.py +0 -0
  474. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/__init__.py +0 -0
  475. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/_core.py +0 -0
  476. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/batched.py +0 -0
  477. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/blas_c.py +0 -0
  478. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/__init__.py +0 -0
  479. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/alt_blas_common.h +0 -0
  480. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/alt_blas_template.c +0 -0
  481. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/blas_headers.py +0 -0
  482. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/c_code/codegen.py +0 -0
  483. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/gemv.py +0 -0
  484. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blas/ger.py +0 -0
  485. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/blockwise.py +0 -0
  486. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/c_code/dimshuffle.c +0 -0
  487. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/einsum.py +0 -0
  488. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/elemwise_cgen.py +0 -0
  489. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/exceptions.py +0 -0
  490. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/fft.py +0 -0
  491. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/functional.py +0 -0
  492. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/interpolate.py +0 -0
  493. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/__init__.py +0 -0
  494. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/_lazy.py +0 -0
  495. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/constructors.py +0 -0
  496. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/__init__.py +0 -0
  497. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/cholesky.py +0 -0
  498. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/eigen.py +0 -0
  499. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/lu.py +0 -0
  500. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/qr.py +0 -0
  501. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/schur.py +0 -0
  502. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/decomposition/svd.py +0 -0
  503. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/dtype_utils.py +0 -0
  504. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/products.py +0 -0
  505. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/__init__.py +0 -0
  506. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/core.py +0 -0
  507. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/general.py +0 -0
  508. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/linear_control.py +0 -0
  509. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/lstsq.py +0 -0
  510. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/psd.py +0 -0
  511. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/triangular.py +0 -0
  512. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/solvers/tridiagonal.py +0 -0
  513. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/linalg/summary.py +0 -0
  514. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/math.py +0 -0
  515. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/nlinalg.py +0 -0
  516. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/pad.py +0 -0
  517. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/random/__init__.py +0 -0
  518. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/random/basic.py +0 -0
  519. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/random/op.py +0 -0
  520. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  521. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/basic.py +0 -0
  522. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/jax.py +0 -0
  523. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/random/rewriting/numba.py +0 -0
  524. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/random/type.py +0 -0
  525. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/random/utils.py +0 -0
  526. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/random/variable.py +0 -0
  527. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/reshape.py +0 -0
  528. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/__init__.py +0 -0
  529. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/assumptions.py +0 -0
  530. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/basic.py +0 -0
  531. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/blas.py +0 -0
  532. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/blas_c.py +0 -0
  533. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/blockwise.py +0 -0
  534. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/einsum.py +0 -0
  535. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/elemwise.py +0 -0
  536. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/indexed_elemwise.py +0 -0
  537. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/jax.py +0 -0
  538. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/__init__.py +0 -0
  539. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/decomposition.py +0 -0
  540. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/inverse.py +0 -0
  541. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/products.py +0 -0
  542. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/solvers.py +0 -0
  543. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/summary.py +0 -0
  544. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/linalg/utils.py +0 -0
  545. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/numba.py +0 -0
  546. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/ofg.py +0 -0
  547. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/optimize.py +0 -0
  548. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/reshape.py +0 -0
  549. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/shape.py +0 -0
  550. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/special.py +0 -0
  551. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  552. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/shape.py +0 -0
  553. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/sharedvar.py +0 -0
  554. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/signal/__init__.py +0 -0
  555. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/signal/conv.py +0 -0
  556. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/slinalg.py +0 -0
  557. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/sort.py +0 -0
  558. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/special.py +0 -0
  559. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/subtensor.py +0 -0
  560. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/symbolic.py +0 -0
  561. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/type.py +0 -0
  562. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/type_other.py +0 -0
  563. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/utils.py +0 -0
  564. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/var.py +0 -0
  565. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/variable.py +0 -0
  566. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/tensor/xlogx.py +0 -0
  567. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/typed_list/__init__.py +0 -0
  568. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/typed_list/basic.py +0 -0
  569. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/typed_list/rewriting.py +0 -0
  570. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/typed_list/type.py +0 -0
  571. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/utils.py +0 -0
  572. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/__init__.py +0 -0
  573. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/basic.py +0 -0
  574. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/indexing.py +0 -0
  575. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/linalg.py +0 -0
  576. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/math.py +0 -0
  577. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/random/__init__.py +0 -0
  578. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/random/basic.py +0 -0
  579. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/random/type.py +0 -0
  580. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/random/variable.py +0 -0
  581. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/reduction.py +0 -0
  582. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/rewriting/__init__.py +0 -0
  583. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/rewriting/basic.py +0 -0
  584. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/rewriting/indexing.py +0 -0
  585. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/rewriting/math.py +0 -0
  586. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/rewriting/reduction.py +0 -0
  587. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/rewriting/shape.py +0 -0
  588. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/rewriting/utils.py +0 -0
  589. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/rewriting/vectorization.py +0 -0
  590. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/shape.py +0 -0
  591. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/signal.py +0 -0
  592. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/type.py +0 -0
  593. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor/xtensor/vectorization.py +0 -0
  594. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor.egg-info/SOURCES.txt +0 -0
  595. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor.egg-info/dependency_links.txt +0 -0
  596. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor.egg-info/entry_points.txt +0 -0
  597. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor.egg-info/requires.txt +0 -0
  598. {pytensor-3.1.2 → pytensor-3.1.3}/pytensor.egg-info/top_level.txt +0 -0
  599. {pytensor-3.1.2 → pytensor-3.1.3}/scripts/mypy-failing.txt +0 -0
  600. {pytensor-3.1.2 → pytensor-3.1.3}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
  601. {pytensor-3.1.2 → pytensor-3.1.3}/setup.cfg +0 -0
  602. {pytensor-3.1.2 → pytensor-3.1.3}/setup.py +0 -0
  603. {pytensor-3.1.2 → pytensor-3.1.3}/tests/link/c/c_code/test_cenum.h +0 -0
  604. {pytensor-3.1.2 → pytensor-3.1.3}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  605. {pytensor-3.1.2 → pytensor-3.1.3}/tests/test_basic.py +0 -0
  606. {pytensor-3.1.2 → pytensor-3.1.3}/tests/test_breakpoint.py +0 -0
  607. {pytensor-3.1.2 → pytensor-3.1.3}/tests/test_config.py +0 -0
  608. {pytensor-3.1.2 → pytensor-3.1.3}/tests/test_ifelse.py +0 -0
  609. {pytensor-3.1.2 → pytensor-3.1.3}/tests/test_printing.py +0 -0
  610. {pytensor-3.1.2 → pytensor-3.1.3}/tests/test_raise_op.py +0 -0
  611. {pytensor-3.1.2 → pytensor-3.1.3}/tests/test_rop.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytensor
3
- Version: 3.1.2
3
+ Version: 3.1.3
4
4
  Summary: Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.
5
5
  Author-email: pymc-devs <pymc.devs@gmail.com>
6
6
  License-Expression: BSD-3-Clause
@@ -13,10 +13,6 @@ Update the version number
13
13
 
14
14
  Update the year in the ``PyTensor/LICENSE.txt`` file too, if necessary.
15
15
 
16
- Update the code and the documentation for the pytensor flags
17
- ``warn__ignore_bug_before`` to accept the new version. You must modify the
18
- file ``pytensor/configdefaults.py`` and ``doc/library/config.txt``.
19
-
20
16
  Tag the release
21
17
  ===============
22
18
 
@@ -405,31 +405,6 @@ import ``pytensor`` and print the config variable, as in:
405
405
  raise the exception (i.e. ``'raise'``).
406
406
 
407
407
 
408
- .. attribute:: config.warn__ignore_bug_before
409
-
410
- String value: ``'None'``, ``'all'``, ``'0.3'``, ``'0.4'``, ``'0.4.1'``,
411
- ``'0.5'``, ``'0.6'``, ``'0.7'``, ``'0.8'``, ``'0.8.1'``, ``'0.8.2'``,
412
- ``'0.9'``, ``'0.10'``, ``'1.0'``, ``'1.0.1'``, ``'1.0.2'``, ``'1.0.3'``,
413
- ``'1.0.4'``,``'1.0.5'``
414
-
415
- Default: ``'0.9'``
416
-
417
- When we an PyTensor bug that generated a bad result is fixed, we also make
418
- PyTensor raise a warning when it encounters the same circumstances again. This
419
- helps users determine whether or not said bug has affected past runs, since
420
- one only needs to perform the same runs again with the new version, and one
421
- does not have to understand the PyTensor internals that triggered the bug.
422
-
423
- This flag lets users ignore warnings about old bugs that were
424
- fixed before their first checkout of PyTensor.
425
- You can set its value to the first version of PyTensor
426
- that you used (probably 0.3 or higher)
427
-
428
- ``'None'`` means that all warnings will be displayed.
429
- ``'all'`` means all warnings will be ignored.
430
-
431
- This flag's value cannot be modified during program execution.
432
-
433
408
  .. attribute:: base_compiledir
434
409
 
435
410
  Default: On Windows: ``$LOCALAPPDATA\\PyTensor`` if ``$LOCALAPPDATA`` is defined,
@@ -734,11 +709,3 @@ import ``pytensor`` and print the config variable, as in:
734
709
  The number of traceback stack levels to keep for variables during PyTensor
735
710
  compilation. When this value is greater than zero, it will make PyTensor keep
736
711
  internal stack traces.
737
-
738
- .. attribute:: config.metaopt__verbose
739
-
740
- Int value, default: 0
741
-
742
- The verbosity level of the meta-rewriter: ``0`` for silent, ``1`` to only
743
- warn when PyTensor cannot meta-rewrite an :class:`Op`, ``2`` for full output (e.g.
744
- timings and the rewrites selected).
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-07-06T16:55:07+0200",
11
+ "date": "2026-07-10T22:43:47+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "47d3d0e3721d0488734b84051da78031081c7dc2",
15
- "version": "3.1.2"
14
+ "full-revisionid": "4c7f21181b616d2e05310a518c87cc661ba1b97e",
15
+ "version": "3.1.3"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -9,7 +9,6 @@ ProfileStats object for runtime and memory profiling.
9
9
  #
10
10
 
11
11
  import atexit
12
- import copy
13
12
  import logging
14
13
  import operator
15
14
  import sys
@@ -54,8 +53,6 @@ _atexit_registered: bool = False
54
53
  def _atexit_print_fn():
55
54
  """Print `ProfileStat` objects in `_atexit_print_list` to `_atexit_print_file`."""
56
55
  if config.profile:
57
- to_sum = []
58
-
59
56
  if config.profiling__destination == "stderr":
60
57
  destination_file = "<stderr>"
61
58
  elif config.profiling__destination == "stdout":
@@ -78,64 +75,9 @@ def _atexit_print_fn():
78
75
  n_ops_to_print=config.profiling__n_ops,
79
76
  n_apply_to_print=config.profiling__n_apply,
80
77
  )
81
-
82
- if ps.show_sum:
83
- to_sum.append(ps)
84
78
  else:
85
79
  # TODO print the name if there is one!
86
80
  print("Skipping empty Profile") # noqa: T201
87
- if len(to_sum) > 1:
88
- # Make a global profile
89
- cum = copy.copy(to_sum[0])
90
- msg = f"Sum of all({len(to_sum)}) printed profiles at exit."
91
- cum.message = msg
92
- for ps in to_sum[1:]:
93
- for attr in [
94
- "compile_time",
95
- "fct_call_time",
96
- "fct_callcount",
97
- "vm_call_time",
98
- "rewriter_time",
99
- "linker_time",
100
- "validate_time",
101
- "import_time",
102
- "linker_node_make_thunks",
103
- ]:
104
- setattr(cum, attr, getattr(cum, attr) + getattr(ps, attr))
105
-
106
- # merge dictionary
107
- for attr in [
108
- "apply_time",
109
- "apply_callcount",
110
- "apply_cimpl",
111
- "variable_shape",
112
- "variable_strides",
113
- "variable_offset",
114
- "linker_make_thunk_time",
115
- ]:
116
- cum_attr = getattr(cum, attr)
117
- for key, val in getattr(ps, attr.items()):
118
- assert key not in cum_attr, (key, cum_attr)
119
- cum_attr[key] = val
120
-
121
- if cum.rewriter_profile and ps.rewriter_profile:
122
- try:
123
- merge = cum.rewriter_profile[0].merge_profile(
124
- cum.rewriter_profile[1], ps.rewriter_profile[1]
125
- )
126
- assert len(merge) == len(cum.rewriter_profile[1])
127
- cum.rewriter_profile = (cum.rewriter_profile[0], merge)
128
- except Exception as e:
129
- print(e) # noqa: T201
130
- cum.rewriter_profile = None
131
- else:
132
- cum.rewriter_profile = None
133
-
134
- cum.summary(
135
- file=f,
136
- n_ops_to_print=config.profiling__n_ops,
137
- n_apply_to_print=config.profiling__n_apply,
138
- )
139
81
 
140
82
  if config.print_global_stats:
141
83
  print_global_stats()
@@ -159,7 +101,7 @@ def print_global_stats():
159
101
  destination_file = config.profiling__destination
160
102
 
161
103
  with extended_open(destination_file, mode="w") as f:
162
- print("=" * 50, file=destination_file)
104
+ print("=" * 50, file=f)
163
105
  print(
164
106
  (
165
107
  "Global stats: ",
@@ -469,14 +469,7 @@ class FunctionMaker:
469
469
  mode=mode,
470
470
  traceback__limit=config.traceback__compile_limit,
471
471
  ):
472
- # Expose the compile mode so inner-graph rewrites can recover
473
- # the active linker's required/incompatible rewrites reliably
474
- # (``config.mode`` is unreliable across nested compilations).
475
- fgraph._compile_mode = mode
476
- try:
477
- rewriter_profile = rewriter(fgraph)
478
- finally:
479
- del fgraph._compile_mode
472
+ rewriter_profile = rewriter(fgraph)
480
473
 
481
474
  end_rewriter = time.perf_counter()
482
475
  rewrite_time = end_rewriter - start_rewriter
@@ -4,6 +4,7 @@ WRITEME
4
4
  """
5
5
 
6
6
  import logging
7
+ import sys
7
8
  import warnings
8
9
  from typing import Any
9
10
 
@@ -279,6 +280,53 @@ optdb.register("CheckStackTrace", CheckStackTraceRewriter(), *_tags, position=-1
279
280
  del _tags
280
281
 
281
282
 
283
+ class _ActiveModeGraphRewriter(GraphRewriter):
284
+ """Wrap a mode's optimizer so applying it records the active compile mode.
285
+
286
+ Exposes the compile mode as ``fgraph._compile_mode`` (see ``get_active_mode``)
287
+ so rewrites can make decisions based on the compile target (fusion split rules,
288
+ inner graph specialization, ...). Stamps the mode when the fgraph does not already carry one, and
289
+ restores the previous state after.
290
+ """
291
+
292
+ def __init__(self, rewriter: GraphRewriter, mode: "Mode"):
293
+ self._rewriter = rewriter
294
+ self._mode = mode
295
+
296
+ def add_requirements(self, fgraph):
297
+ return self._rewriter.add_requirements(fgraph)
298
+
299
+ def apply(self, fgraph, *args, **kwargs):
300
+ # Only stamp when unset, so a mode already established by an outer
301
+ # optimizer run (the outermost compilation, or a nested inner-graph
302
+ # rewrite) wins.
303
+ stamped = getattr(fgraph, "_compile_mode", None) is None
304
+ if stamped:
305
+ fgraph._compile_mode = self._mode
306
+ try:
307
+ return self._rewriter.apply(fgraph, *args, **kwargs)
308
+ finally:
309
+ if stamped:
310
+ del fgraph._compile_mode
311
+
312
+ def print_summary(self, stream=sys.stdout, level=0, depth=-1):
313
+ return self._rewriter.print_summary(stream=stream, level=level, depth=depth)
314
+
315
+ def print_profile(self, stream, prof, level=0):
316
+ # ``GraphRewriter.print_profile`` is a classmethod that raises unless
317
+ # overridden, so delegate to the wrapped rewriter's implementation.
318
+ return self._rewriter.print_profile(stream, prof, level=level)
319
+
320
+ def __getattr__(self, name):
321
+ # Delegate everything else (profiling helpers, query metadata, ...) to the
322
+ # wrapped rewriter. ``__getattr__`` only fires for names not found normally,
323
+ # so the overrides above take precedence. Guard ``_rewriter`` itself to avoid
324
+ # infinite recursion before ``__init__`` has run.
325
+ if name == "_rewriter":
326
+ raise AttributeError(name)
327
+ return getattr(self._rewriter, name)
328
+
329
+
282
330
  class Mode:
283
331
  """A class that specifies the rewrites/optimizations used during function compilation.
284
332
 
@@ -377,9 +425,13 @@ class Mode:
377
425
  @property
378
426
  def optimizer(self):
379
427
  if isinstance(self._optimizer, RewriteDatabaseQuery):
380
- return self.optdb.query(self._optimizer)
428
+ rewriter = self.optdb.query(self._optimizer)
381
429
  else:
382
- return self._optimizer
430
+ rewriter = self._optimizer
431
+ # Stamp this mode as the fgraph's active compile mode while rewriting, so
432
+ # inner-graph rewrites can recover the right linker even when the optimizer
433
+ # is run directly (outside ``FunctionMaker``, e.g. ``mode.optimizer.rewrite(fgraph)``).
434
+ return _ActiveModeGraphRewriter(rewriter, self)
383
435
 
384
436
  def get_linker_optimizer(self, linker, optimizer):
385
437
  if isinstance(linker, str) or linker is None:
@@ -455,7 +507,7 @@ class Mode:
455
507
 
456
508
  C = Mode("c", "fast_run")
457
509
  CVM = Mode("cvm", "fast_run")
458
- VM = (Mode("vm", "fast_run"),)
510
+ VM = Mode("vm", "fast_run")
459
511
 
460
512
  NUMBA = Mode(
461
513
  NumbaLinker(),
@@ -65,26 +65,6 @@ def _filter_mode(val):
65
65
  )
66
66
 
67
67
 
68
- def _split_version(version):
69
- """
70
- Take version as a dot-separated string, return a tuple of int
71
- """
72
- return tuple(int(i) for i in version.split("."))
73
-
74
-
75
- def _warn_default(version):
76
- """
77
- Return True iff we should warn about bugs fixed after a given version.
78
- """
79
- if config.warn__ignore_bug_before == "None":
80
- return True
81
- if config.warn__ignore_bug_before == "all":
82
- return False
83
- if _split_version(config.warn__ignore_bug_before) >= _split_version(version):
84
- return False
85
- return True
86
-
87
-
88
68
  def _is_valid_check_preallocated_output_param(param):
89
69
  if not isinstance(param, str):
90
70
  return False
@@ -591,47 +571,6 @@ def add_traceback_configvars():
591
571
 
592
572
 
593
573
  def add_error_and_warning_configvars():
594
- ###
595
- # To disable some warning about old bug that are fixed now.
596
- ###
597
- config.add(
598
- "warn__ignore_bug_before",
599
- (
600
- "If 'None', we warn about all PyTensor bugs found by default. "
601
- "If 'all', we don't warn about PyTensor bugs found by default. "
602
- "If a version, we print only the warnings relative to PyTensor "
603
- "bugs found after that version. "
604
- "Warning for specific bugs can be configured with specific "
605
- "[warn] flags."
606
- ),
607
- EnumStr(
608
- "0.9",
609
- [
610
- "None",
611
- "all",
612
- "0.3",
613
- "0.4",
614
- "0.4.1",
615
- "0.5",
616
- "0.6",
617
- "0.7",
618
- "0.8",
619
- "0.8.1",
620
- "0.8.2",
621
- "0.9",
622
- "0.10",
623
- "1.0",
624
- "1.0.1",
625
- "1.0.2",
626
- "1.0.3",
627
- "1.0.4",
628
- "1.0.5",
629
- ],
630
- mutable=False,
631
- ),
632
- in_c_key=False,
633
- )
634
-
635
574
  # Note to developers:
636
575
  # Generally your exceptions should use an apply node's __str__
637
576
  # method when exception_verbosity == 'low'. When exception_verbosity
@@ -101,7 +101,6 @@ class PyTensorConfigParser:
101
101
  traceback__limit: int
102
102
  traceback__compile_limit: int
103
103
  # add_error_and_warning_configvars
104
- warn__ignore_bug_before: int
105
104
  exception_verbosity: str
106
105
  # add_testvalue_and_checking_configvars
107
106
  check_input: bool
@@ -138,8 +137,6 @@ class PyTensorConfigParser:
138
137
  optdb__max_use_ratio: float
139
138
  cycle_detection: str
140
139
  check_stack_trace: str
141
- # add_metaopt_configvars
142
- metaopt__verbose: int
143
140
  # add_vm_configvars
144
141
  profile: bool
145
142
  profile_optimizer: bool
@@ -139,7 +139,7 @@ class DisconnectedType(Type):
139
139
  " a symbolic placeholder."
140
140
  )
141
141
 
142
- def fiter_variable(self, other):
142
+ def filter_variable(self, other):
143
143
  raise AssertionError(
144
144
  "If you're assigning to a DisconnectedType you're"
145
145
  " doing something wrong. It should only be used as"
@@ -1,4 +1,3 @@
1
- import inspect
2
1
  import sys
3
2
  import time
4
3
  import warnings
@@ -693,32 +692,8 @@ class Validator(Feature):
693
692
  )
694
693
 
695
694
  def validate(self, fgraph):
696
- """
697
- If the caller is replace_all_validate, just raise the
698
- exception. replace_all_validate will print out the
699
- verbose output. Or it has to be done here before raise.
700
- """
701
695
  t0 = time.perf_counter()
702
- try:
703
- ret = fgraph.execute_callbacks("on_validate")
704
- except Exception as e:
705
- cf = inspect.currentframe()
706
- uf = cf.f_back
707
- uf_info = inspect.getframeinfo(uf)
708
-
709
- # If the caller is replace_all_validate, just raise the
710
- # exception. replace_all_validate will print out the
711
- # verbose output.
712
- # Or it has to be done here before raise.
713
- if uf_info.function == "replace_all_validate":
714
- raise
715
- else:
716
- verbose = uf.f_locals.get("verbose", False)
717
- if verbose:
718
- r = uf.f_locals.get("r", "")
719
- reason = uf_info.function
720
- print(f"validate failed on node {r}.\n Reason: {reason}, {e}") # noqa: T201
721
- raise
696
+ ret = fgraph.execute_callbacks("on_validate")
722
697
  t1 = time.perf_counter()
723
698
  if fgraph.profile:
724
699
  fgraph.profile.validate_time += t1 - t0
@@ -1119,7 +1119,7 @@ class OpToRewriterTracker:
1119
1119
  else:
1120
1120
  # An OpPattern without parameters behaves like a regular tracked_type
1121
1121
  self.tracked_types[c.op_type].append(rw)
1122
- if isinstance(c, type):
1122
+ elif isinstance(c, type):
1123
1123
  self.tracked_types[c].append(rw)
1124
1124
  else:
1125
1125
  self.tracked_instances[c].append(rw)
@@ -0,0 +1,116 @@
1
+ from collections.abc import Generator, Iterable, Sequence
2
+ from typing import TYPE_CHECKING, Optional, cast
3
+
4
+ from pytensor.graph.basic import (
5
+ Apply,
6
+ Variable,
7
+ )
8
+ from pytensor.graph.fg import FunctionGraph, Output
9
+ from pytensor.graph.rewriting.db import RewriteDatabaseQuery
10
+
11
+
12
+ if TYPE_CHECKING:
13
+ from pytensor.graph.rewriting.basic import GraphRewriter
14
+
15
+
16
+ def rewrite_graph(
17
+ graph: Variable | Sequence[Variable] | FunctionGraph,
18
+ include: Sequence[str] = ("canonicalize",),
19
+ custom_rewrite: Optional["GraphRewriter"] = None,
20
+ clone: bool = False,
21
+ **kwargs,
22
+ ) -> Variable | Sequence[Variable] | FunctionGraph:
23
+ """Easily apply rewrites to a graph.
24
+
25
+ Parameters
26
+ ----------
27
+ graph
28
+ A `FunctionGraph` or `Variable` to be rewritten.
29
+ include
30
+ String names of the rewrites to be queried, via a
31
+ `RewriteDatabaseQuery` instance, and applied. The default rewrite
32
+ query string is ``"canonicalization"``.
33
+ custom_rewrite
34
+ A custom `Rewriter` to also be applied.
35
+ clone
36
+ Whether or not to clone the input graph before rewriting.
37
+ **kwargs
38
+ Keyword arguments passed to a `RewriteDatabaseQuery` object.
39
+ """
40
+ from pytensor.compile import optdb
41
+
42
+ if isinstance(graph, FunctionGraph):
43
+ fgraph = graph
44
+ else:
45
+ outputs = [graph] if isinstance(graph, Variable) else graph
46
+ fgraph = FunctionGraph(outputs=outputs, clone=clone, copy_inputs=False)
47
+
48
+ query_rewrites = optdb.query(RewriteDatabaseQuery(include=include, **kwargs))
49
+ query_rewrites.rewrite(fgraph)
50
+
51
+ if custom_rewrite is not None:
52
+ custom_rewrite.rewrite(fgraph)
53
+
54
+ if isinstance(graph, FunctionGraph):
55
+ return fgraph
56
+ if isinstance(graph, Variable):
57
+ return fgraph.outputs[0]
58
+ return fgraph.outputs
59
+
60
+
61
+ def rewrite_subgraph(
62
+ outputs: Sequence[Variable],
63
+ frontier: Iterable[Variable],
64
+ include: Sequence[str] = ("canonicalize",),
65
+ **kwargs,
66
+ ) -> list[Variable]:
67
+ """Rewrite the subgraph between ``frontier`` and ``outputs`` in isolation.
68
+
69
+ The ``frontier`` variables are temporarily detached from their owners, so
70
+ they act as inputs of the subgraph: rewrites can neither reach past them
71
+ nor modify the graph they belong to. This allows simplifying fresh
72
+ expressions that hang off the variables of an existing `FunctionGraph`
73
+ without mutating it behind its (and its features') back.
74
+
75
+ The rewrite is in place: ``outputs`` must not belong to a `FunctionGraph`.
76
+
77
+ Parameters
78
+ ----------
79
+ outputs
80
+ The outputs of the subgraph to rewrite.
81
+ frontier
82
+ Variables at which the subgraph stops; every path from ``outputs``
83
+ into the surrounding graph must go through one of them.
84
+ include
85
+ Rewrite query names, as in `rewrite_graph`.
86
+ **kwargs
87
+ Keyword arguments passed to `rewrite_graph`.
88
+ """
89
+ saved_owners = [(v, v.owner, v.index) for v in frontier]
90
+ for v, _, _ in saved_owners:
91
+ v.owner = None
92
+ try:
93
+ rewritten = cast(
94
+ Sequence[Variable],
95
+ rewrite_graph(list(outputs), include=include, clone=False, **kwargs),
96
+ )
97
+ return list(rewritten)
98
+ finally:
99
+ for v, owner, idx in saved_owners:
100
+ v.owner = owner
101
+ v.index = idx
102
+
103
+
104
+ def get_clients_at_depth(
105
+ fgraph: FunctionGraph, node: Apply, depth: int
106
+ ) -> Generator[Apply, None, None]:
107
+ """Yields node clients at given depth."""
108
+ for var in node.outputs:
109
+ if depth > 0:
110
+ for out_node, _ in fgraph.clients[var]:
111
+ if isinstance(out_node.op, Output):
112
+ continue
113
+ yield from get_clients_at_depth(fgraph, out_node, depth - 1)
114
+ else:
115
+ assert var.owner is not None
116
+ yield var.owner
@@ -96,34 +96,6 @@ class Type(MetaObject, Generic[D]): # noqa: UP046
96
96
 
97
97
  """
98
98
 
99
- def filter_inplace(
100
- self,
101
- value: Any,
102
- storage: Any,
103
- strict: bool = False,
104
- allow_downcast: bool | None = None,
105
- ):
106
- """Return data or an appropriately wrapped/converted data by converting it in-place.
107
-
108
- This method allows one to reuse old allocated memory. If this method
109
- is implemented, it will be called instead of `Type.filter`.
110
-
111
- As of now, this method is not implemented and was previously used for transferring memory to and from GPU.
112
-
113
- Parameters
114
- ----------
115
- value: array-like
116
- storage: array-like
117
- The old value (e.g. the old NumPy array)
118
- strict: bool
119
- allow_downcast: bool (optional)
120
-
121
- Raises
122
- ------
123
- NotImplementedError
124
- """
125
- raise NotImplementedError()
126
-
127
99
  def filter_variable(
128
100
  self, other: Variable | D, allow_convert: bool = True
129
101
  ) -> variable_type:
@@ -97,13 +97,7 @@ class Container:
97
97
  if self.allow_downcast is not None:
98
98
  kwargs["allow_downcast"] = self.allow_downcast
99
99
 
100
- try:
101
- # Use in-place filtering when/if possible
102
- self.storage[0] = self.type.filter_inplace(
103
- value, self.storage[0], **kwargs
104
- )
105
- except NotImplementedError:
106
- self.storage[0] = self.type.filter(value, **kwargs)
100
+ self.storage[0] = self.type.filter(value, **kwargs)
107
101
 
108
102
  except Exception as e:
109
103
  e.args = (*e.args, f'Container name "{self.name}"')
@@ -58,15 +58,6 @@ def is_StdLibDirsAndLibsType(
58
58
  return cast(StdLibDirsAndLibsType, fn)
59
59
 
60
60
 
61
- class GCCLLVMType(Protocol):
62
- is_llvm: bool | None
63
- __call__: Callable[[], bool | None]
64
-
65
-
66
- def is_GCCLLVMType(fn: Callable[[], bool | None]) -> GCCLLVMType:
67
- return cast(GCCLLVMType, fn)
68
-
69
-
70
61
  _logger = logging.getLogger("pytensor.link.c.cmodule")
71
62
 
72
63
  METH_VARARGS = "METH_VARARGS"
@@ -262,10 +253,7 @@ def _get_ext_suffix():
262
253
  """Get the suffix for compiled extensions"""
263
254
  from setuptools._distutils.sysconfig import get_config_var
264
255
 
265
- dist_suffix = get_config_var("EXT_SUFFIX")
266
- if dist_suffix is None:
267
- dist_suffix = get_config_var("SO")
268
- return dist_suffix
256
+ return get_config_var("EXT_SUFFIX")
269
257
 
270
258
 
271
259
  def add_gcc_dll_directory() -> AbstractContextManager[None]:
@@ -1817,33 +1805,6 @@ def std_lib_dirs():
1817
1805
  return std_lib_dirs_and_libs()[1]
1818
1806
 
1819
1807
 
1820
- @is_GCCLLVMType
1821
- def gcc_llvm() -> bool | None:
1822
- """
1823
- Detect if the g++ version used is the llvm one or not.
1824
-
1825
- It don't support all g++ parameters even if it support many of them.
1826
-
1827
- """
1828
- if gcc_llvm.is_llvm is None:
1829
- try:
1830
- p_out = output_subprocess_Popen([config.cxx, "--version"])
1831
- output = p_out[0] + p_out[1]
1832
- except OSError:
1833
- # Typically means g++ cannot be found.
1834
- # So it is not an llvm compiler.
1835
-
1836
- # Normally this should not happen as we should not try to
1837
- # compile when g++ is not available. If this happen, it
1838
- # will crash later so supposing it is not llvm is "safe".
1839
- output = b""
1840
- gcc_llvm.is_llvm = b"llvm" in output
1841
- return gcc_llvm.is_llvm
1842
-
1843
-
1844
- gcc_llvm.is_llvm = None
1845
-
1846
-
1847
1808
  class Compiler:
1848
1809
  """
1849
1810
  Meta compiler that offer some generic function.
@@ -217,7 +217,6 @@ int main( int argc, const char* argv[] )
217
217
  )
218
218
  if OpenMPOp.gxx_support_openmp is False:
219
219
  self.openmp = False
220
- config.openmp = False
221
220
 
222
221
  def prepare_node(self, node, storage_map, compute_map, impl):
223
222
  if impl == "c":