pytensor 2.37.0__tar.gz → 2.38.0__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 (520) hide show
  1. {pytensor-2.37.0/pytensor.egg-info → pytensor-2.38.0}/PKG-INFO +1 -1
  2. pytensor-2.38.0/doc/library/xtensor/signal.md +7 -0
  3. {pytensor-2.37.0 → pytensor-2.38.0}/pyproject.toml +1 -0
  4. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/_version.py +3 -3
  5. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/replace.py +25 -10
  6. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/_LAPACK.py +385 -0
  7. pytensor-2.38.0/pytensor/link/numba/dispatch/linalg/decomposition/qz.py +1320 -0
  8. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/slinalg.py +99 -0
  9. pytensor-2.38.0/pytensor/link/numba/dispatch/sparse/basic.py +240 -0
  10. pytensor-2.38.0/pytensor/link/numba/dispatch/sparse/math.py +649 -0
  11. pytensor-2.38.0/pytensor/link/numba/dispatch/sparse/variable.py +598 -0
  12. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/basic.py +46 -10
  13. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/math.py +7 -4
  14. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/_linalg/solve/linear_control.py +144 -53
  15. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/elemwise.py +3 -3
  16. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/extra_ops.py +2 -2
  17. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/nlinalg.py +5 -1
  18. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/optimize.py +2 -1
  19. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/basic.py +7 -3
  20. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/blockwise.py +11 -5
  21. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/math.py +5 -2
  22. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/shape.py +31 -8
  23. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/subtensor.py +1 -1
  24. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/shape.py +1 -1
  25. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/signal/conv.py +5 -4
  26. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/slinalg.py +418 -3
  27. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/subtensor.py +2 -1
  28. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/utils.py +11 -0
  29. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/__init__.py +1 -1
  30. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/basic.py +50 -0
  31. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/indexing.py +48 -2
  32. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/reduction.py +17 -6
  33. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/utils.py +10 -2
  34. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/shape.py +50 -42
  35. pytensor-2.38.0/pytensor/xtensor/signal.py +74 -0
  36. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/type.py +79 -20
  37. pytensor-2.38.0/pytensor/xtensor/vectorization.py +664 -0
  38. {pytensor-2.37.0 → pytensor-2.38.0/pytensor.egg-info}/PKG-INFO +1 -1
  39. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor.egg-info/SOURCES.txt +3 -0
  40. pytensor-2.37.0/pytensor/link/numba/dispatch/sparse/basic.py +0 -86
  41. pytensor-2.37.0/pytensor/link/numba/dispatch/sparse/math.py +0 -372
  42. pytensor-2.37.0/pytensor/link/numba/dispatch/sparse/variable.py +0 -420
  43. pytensor-2.37.0/pytensor/xtensor/vectorization.py +0 -278
  44. {pytensor-2.37.0 → pytensor-2.38.0}/LICENSE.txt +0 -0
  45. {pytensor-2.37.0 → pytensor-2.38.0}/MANIFEST.in +0 -0
  46. {pytensor-2.37.0 → pytensor-2.38.0}/README.rst +0 -0
  47. {pytensor-2.37.0 → pytensor-2.38.0}/doc/.templates/PLACEHOLDER +0 -0
  48. {pytensor-2.37.0 → pytensor-2.38.0}/doc/.templates/layout.html +0 -0
  49. {pytensor-2.37.0 → pytensor-2.38.0}/doc/.templates/nb-badges.html +0 -0
  50. {pytensor-2.37.0 → pytensor-2.38.0}/doc/.templates/rendered_citation.html +0 -0
  51. {pytensor-2.37.0 → pytensor-2.38.0}/doc/LICENSE.txt +0 -0
  52. {pytensor-2.37.0 → pytensor-2.38.0}/doc/README.md +0 -0
  53. {pytensor-2.37.0 → pytensor-2.38.0}/doc/_drafts/benchmark_mlx_v_jax_corrected.ipynb +0 -0
  54. {pytensor-2.37.0 → pytensor-2.38.0}/doc/_thumbnails/autodiff/vector_jacobian_product.png +0 -0
  55. {pytensor-2.37.0 → pytensor-2.38.0}/doc/acknowledgement.rst +0 -0
  56. {pytensor-2.37.0 → pytensor-2.38.0}/doc/bcast.png +0 -0
  57. {pytensor-2.37.0 → pytensor-2.38.0}/doc/bcast.svg +0 -0
  58. {pytensor-2.37.0 → pytensor-2.38.0}/doc/blog.md +0 -0
  59. {pytensor-2.37.0 → pytensor-2.38.0}/doc/conf.py +0 -0
  60. {pytensor-2.37.0 → pytensor-2.38.0}/doc/core_development_guide.rst +0 -0
  61. {pytensor-2.37.0 → pytensor-2.38.0}/doc/css.inc +0 -0
  62. {pytensor-2.37.0 → pytensor-2.38.0}/doc/dev_start_guide.rst +0 -0
  63. {pytensor-2.37.0 → pytensor-2.38.0}/doc/environment.yml +0 -0
  64. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/apply.png +0 -0
  65. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/apply.svg +0 -0
  66. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/apply2.svg +0 -0
  67. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/creating_a_c_op.rst +0 -0
  68. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/creating_a_numba_jax_op.rst +0 -0
  69. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/creating_an_op.rst +0 -0
  70. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/ctype.rst +0 -0
  71. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/extending_faq.rst +0 -0
  72. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/extending_pytensor_solution_1.py +0 -0
  73. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/graph_rewriting.rst +0 -0
  74. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/graphstructures.rst +0 -0
  75. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/index.rst +0 -0
  76. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/inplace.rst +0 -0
  77. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/op.rst +0 -0
  78. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/other_ops.rst +0 -0
  79. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/pics/symbolic_graph_opt.png +0 -0
  80. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/pics/symbolic_graph_unopt.png +0 -0
  81. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/pipeline.rst +0 -0
  82. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/scan.rst +0 -0
  83. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/tips.rst +0 -0
  84. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/type.rst +0 -0
  85. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/unittest.rst +0 -0
  86. {pytensor-2.37.0 → pytensor-2.38.0}/doc/extending/using_params.rst +0 -0
  87. {pytensor-2.37.0 → pytensor-2.38.0}/doc/faq.rst +0 -0
  88. {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/applications/normalizing_flows_in_pytensor.ipynb +0 -0
  89. {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/autodiff/vector_jacobian_product.ipynb +0 -0
  90. {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/introduction/pytensor_intro.ipynb +0 -0
  91. {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/optimize/root.ipynb +0 -0
  92. {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/page_footer.md +0 -0
  93. {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/rewrites/graph_rewrites.ipynb +0 -0
  94. {pytensor-2.37.0 → pytensor-2.38.0}/doc/gallery/scan/scan_tutorial.ipynb +0 -0
  95. {pytensor-2.37.0 → pytensor-2.38.0}/doc/generate_dtype_tensor_table.py +0 -0
  96. {pytensor-2.37.0 → pytensor-2.38.0}/doc/glossary.rst +0 -0
  97. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/Elman_srnn.png +0 -0
  98. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/PyTensor.png +0 -0
  99. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/PyTensor_RGB.svg +0 -0
  100. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/PyTensor_logo.png +0 -0
  101. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/binder.svg +0 -0
  102. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/blocksparse.png +0 -0
  103. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/colab.svg +0 -0
  104. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/github.svg +0 -0
  105. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/lstm.png +0 -0
  106. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/lstm_memorycell.png +0 -0
  107. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/talk2010.gif +0 -0
  108. {pytensor-2.37.0 → pytensor-2.38.0}/doc/images/talk2010.png +0 -0
  109. {pytensor-2.37.0 → pytensor-2.38.0}/doc/index.rst +0 -0
  110. {pytensor-2.37.0 → pytensor-2.38.0}/doc/install.rst +0 -0
  111. {pytensor-2.37.0 → pytensor-2.38.0}/doc/internal/how_to_release.rst +0 -0
  112. {pytensor-2.37.0 → pytensor-2.38.0}/doc/internal/index.rst +0 -0
  113. {pytensor-2.37.0 → pytensor-2.38.0}/doc/internal/metadocumentation.rst +0 -0
  114. {pytensor-2.37.0 → pytensor-2.38.0}/doc/introduction.rst +0 -0
  115. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/debugmode.rst +0 -0
  116. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/function.rst +0 -0
  117. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/index.rst +0 -0
  118. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/io.rst +0 -0
  119. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/mode.rst +0 -0
  120. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/nanguardmode.rst +0 -0
  121. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/opfromgraph.rst +0 -0
  122. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/ops.rst +0 -0
  123. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/profilemode.rst +0 -0
  124. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/compile/shared.rst +0 -0
  125. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/config.rst +0 -0
  126. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/css/d3-context-menu.css +0 -0
  127. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/css/d3viz.css +0 -0
  128. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/js/d3-context-menu.js +0 -0
  129. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/js/d3.v3.min.js +0 -0
  130. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/js/d3viz.js +0 -0
  131. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/js/dagre-d3.min.js +0 -0
  132. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/d3viz/js/graphlib-dot.min.js +0 -0
  133. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/mlp.html +0 -0
  134. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/mlp.png +0 -0
  135. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/mlp2.html +0 -0
  136. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/mlp2.pdf +0 -0
  137. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/mlp2.png +0 -0
  138. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/ofg.html +0 -0
  139. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/examples/ofg2.html +0 -0
  140. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index.ipynb +0 -0
  141. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index.rst +0 -0
  142. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index_files/index_10_0.png +0 -0
  143. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index_files/index_11_0.png +0 -0
  144. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index_files/index_24_0.png +0 -0
  145. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/d3viz/index_files/index_25_0.png +0 -0
  146. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/features.rst +0 -0
  147. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/fgraph.rst +0 -0
  148. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/graph.rst +0 -0
  149. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/index.rst +0 -0
  150. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/op.rst +0 -0
  151. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/replace.rst +0 -0
  152. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/type.rst +0 -0
  153. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/graph/utils.rst +0 -0
  154. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/index.rst +0 -0
  155. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/misc/pkl_utils.rst +0 -0
  156. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/printing.rst +0 -0
  157. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/scalar/index.rst +0 -0
  158. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/scan.rst +0 -0
  159. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/sparse/index.rst +0 -0
  160. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/sparse/sandbox.rst +0 -0
  161. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/basic.rst +0 -0
  162. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/basic_opt.rst +0 -0
  163. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/bcast.png +0 -0
  164. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/bcast.svg +0 -0
  165. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/elemwise.rst +0 -0
  166. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/extra_ops.rst +0 -0
  167. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/fft.rst +0 -0
  168. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/functional.rst +0 -0
  169. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/index.rst +0 -0
  170. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/io.rst +0 -0
  171. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/math_opt.rst +0 -0
  172. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/nlinalg.rst +0 -0
  173. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/optimize.rst +0 -0
  174. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/plot_fft.png +0 -0
  175. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/random/distributions.rst +0 -0
  176. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/random/index.rst +0 -0
  177. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/slinalg.rst +0 -0
  178. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/tensor/utils.rst +0 -0
  179. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/typed_list.rst +0 -0
  180. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/index.md +0 -0
  181. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/linalg.md +0 -0
  182. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/math.md +0 -0
  183. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/module_functions.md +0 -0
  184. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/random.md +0 -0
  185. {pytensor-2.37.0 → pytensor-2.38.0}/doc/library/xtensor/type.md +0 -0
  186. {pytensor-2.37.0 → pytensor-2.38.0}/doc/links.rst +0 -0
  187. {pytensor-2.37.0 → pytensor-2.38.0}/doc/optimizations.rst +0 -0
  188. {pytensor-2.37.0 → pytensor-2.38.0}/doc/pylintrc +0 -0
  189. {pytensor-2.37.0 → pytensor-2.38.0}/doc/robots.txt +0 -0
  190. {pytensor-2.37.0 → pytensor-2.38.0}/doc/troubleshooting.rst +0 -0
  191. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/adding.rst +0 -0
  192. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/adding_solution_1.py +0 -0
  193. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/aliasing.rst +0 -0
  194. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/apply.png +0 -0
  195. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/apply.svg +0 -0
  196. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/bcast.png +0 -0
  197. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/broadcasting.rst +0 -0
  198. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/conditions.rst +0 -0
  199. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/debug_faq.rst +0 -0
  200. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/dlogistic.png +0 -0
  201. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/examples.rst +0 -0
  202. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/faq_tutorial.rst +0 -0
  203. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/gradients.rst +0 -0
  204. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/index.rst +0 -0
  205. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/loading_and_saving.rst +0 -0
  206. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/logistic.gp +0 -0
  207. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/logistic.png +0 -0
  208. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/loop.rst +0 -0
  209. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/loop_solution_1.py +0 -0
  210. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/modes.rst +0 -0
  211. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/modes_solution_1.py +0 -0
  212. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/multi_cores.rst +0 -0
  213. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/nan_tutorial.rst +0 -0
  214. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/pics/d3viz.png +0 -0
  215. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/pics/logreg_pydotprint_predict.png +0 -0
  216. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/pics/logreg_pydotprint_prediction.png +0 -0
  217. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/pics/logreg_pydotprint_train.png +0 -0
  218. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/printing_drawing.rst +0 -0
  219. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/prng.rst +0 -0
  220. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/profiling.rst +0 -0
  221. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/profiling_example.py +0 -0
  222. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/profiling_example_out.prof +0 -0
  223. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/shape_info.rst +0 -0
  224. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/sparse.rst +0 -0
  225. {pytensor-2.37.0 → pytensor-2.38.0}/doc/tutorial/symbolic_graphs.rst +0 -0
  226. {pytensor-2.37.0 → pytensor-2.38.0}/doc/user_guide.rst +0 -0
  227. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/__init__.py +0 -0
  228. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/bin/__init__.py +0 -0
  229. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/bin/pytensor_cache.py +0 -0
  230. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/breakpoint.py +0 -0
  231. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/__init__.py +0 -0
  232. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/builders.py +0 -0
  233. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/compiledir.py +0 -0
  234. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/compilelock.py +0 -0
  235. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/debugmode.py +0 -0
  236. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/function/__init__.py +0 -0
  237. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/function/pfunc.py +0 -0
  238. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/function/types.py +0 -0
  239. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/io.py +0 -0
  240. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/mode.py +0 -0
  241. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/monitormode.py +0 -0
  242. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/nanguardmode.py +0 -0
  243. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/ops.py +0 -0
  244. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/profiling.py +0 -0
  245. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/compile/sharedvalue.py +0 -0
  246. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/configdefaults.py +0 -0
  247. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/configparser.py +0 -0
  248. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/__init__.py +0 -0
  249. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/css/d3-context-menu.css +0 -0
  250. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/css/d3viz.css +0 -0
  251. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/d3viz.py +0 -0
  252. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/formatting.py +0 -0
  253. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/html/template.html +0 -0
  254. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/js/d3-context-menu.js +0 -0
  255. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/js/d3.v3.min.js +0 -0
  256. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/js/d3viz.js +0 -0
  257. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/js/dagre-d3.min.js +0 -0
  258. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/d3viz/js/graphlib-dot.min.js +0 -0
  259. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/gradient.py +0 -0
  260. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/__init__.py +0 -0
  261. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/basic.py +0 -0
  262. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/destroyhandler.py +0 -0
  263. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/features.py +0 -0
  264. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/fg.py +0 -0
  265. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/null_type.py +0 -0
  266. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/op.py +0 -0
  267. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/__init__.py +0 -0
  268. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/basic.py +0 -0
  269. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/db.py +0 -0
  270. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/kanren.py +0 -0
  271. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/unify.py +0 -0
  272. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/rewriting/utils.py +0 -0
  273. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/traversal.py +0 -0
  274. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/type.py +0 -0
  275. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/graph/utils.py +0 -0
  276. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/ifelse.py +0 -0
  277. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/ipython.py +0 -0
  278. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/__init__.py +0 -0
  279. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/basic.py +0 -0
  280. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/__init__.py +0 -0
  281. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/basic.py +0 -0
  282. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/c_code/lazylinker_c.c +0 -0
  283. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/c_code/pytensor_mod_helper.h +0 -0
  284. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/cmodule.py +0 -0
  285. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/cutils.py +0 -0
  286. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/cvm.py +0 -0
  287. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/exceptions.py +0 -0
  288. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/interface.py +0 -0
  289. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/lazylinker_c.py +0 -0
  290. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/op.py +0 -0
  291. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/params_type.py +0 -0
  292. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/c/type.py +0 -0
  293. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/__init__.py +0 -0
  294. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/__init__.py +0 -0
  295. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/basic.py +0 -0
  296. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/blas.py +0 -0
  297. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/blockwise.py +0 -0
  298. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/einsum.py +0 -0
  299. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/elemwise.py +0 -0
  300. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/extra_ops.py +0 -0
  301. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/math.py +0 -0
  302. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/nlinalg.py +0 -0
  303. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/pad.py +0 -0
  304. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/random.py +0 -0
  305. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/scalar.py +0 -0
  306. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/scan.py +0 -0
  307. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/shape.py +0 -0
  308. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/signal/__init__.py +0 -0
  309. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/signal/conv.py +0 -0
  310. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/slinalg.py +0 -0
  311. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/sort.py +0 -0
  312. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/sparse.py +0 -0
  313. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/subtensor.py +0 -0
  314. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/dispatch/tensor_basic.py +0 -0
  315. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/linker.py +0 -0
  316. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/jax/ops.py +0 -0
  317. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/__init__.py +0 -0
  318. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/__init__.py +0 -0
  319. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/basic.py +0 -0
  320. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/blockwise.py +0 -0
  321. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/core.py +0 -0
  322. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/elemwise.py +0 -0
  323. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/extra_ops.py +0 -0
  324. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/math.py +0 -0
  325. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/nlinalg.py +0 -0
  326. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/shape.py +0 -0
  327. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/signal/__init__.py +0 -0
  328. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/signal/conv.py +0 -0
  329. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/slinalg.py +0 -0
  330. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/sort.py +0 -0
  331. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/dispatch/subtensor.py +0 -0
  332. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/mlx/linker.py +0 -0
  333. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/__init__.py +0 -0
  334. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/cache.py +0 -0
  335. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/__init__.py +0 -0
  336. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/basic.py +0 -0
  337. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/blockwise.py +0 -0
  338. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/compile_ops.py +0 -0
  339. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/cython_support.py +0 -0
  340. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/elemwise.py +0 -0
  341. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/extra_ops.py +0 -0
  342. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/__init__.py +0 -0
  343. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/__init__.py +0 -0
  344. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/cholesky.py +0 -0
  345. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/lu.py +0 -0
  346. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/lu_factor.py +0 -0
  347. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/qr.py +0 -0
  348. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/decomposition/schur.py +0 -0
  349. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/__init__.py +0 -0
  350. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/cholesky.py +0 -0
  351. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/general.py +0 -0
  352. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/linear_control.py +0 -0
  353. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/lu_solve.py +0 -0
  354. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/posdef.py +0 -0
  355. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/symmetric.py +0 -0
  356. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/triangular.py +0 -0
  357. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/tridiagonal.py +0 -0
  358. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/solve/utils.py +0 -0
  359. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/linalg/utils.py +0 -0
  360. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/nlinalg.py +0 -0
  361. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/random.py +0 -0
  362. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/scalar.py +0 -0
  363. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/scan.py +0 -0
  364. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/shape.py +0 -0
  365. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/signal/__init__.py +0 -0
  366. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/signal/conv.py +0 -0
  367. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/sort.py +0 -0
  368. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/sparse/__init__.py +0 -0
  369. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/string_codegen.py +0 -0
  370. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/subtensor.py +0 -0
  371. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/tensor_basic.py +0 -0
  372. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/typed_list.py +0 -0
  373. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/dispatch/vectorize_codegen.py +0 -0
  374. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/numba/linker.py +0 -0
  375. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/__init__.py +0 -0
  376. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/basic.py +0 -0
  377. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/blas.py +0 -0
  378. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/blockwise.py +0 -0
  379. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/elemwise.py +0 -0
  380. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/extra_ops.py +0 -0
  381. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/math.py +0 -0
  382. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/nlinalg.py +0 -0
  383. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/scalar.py +0 -0
  384. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/shape.py +0 -0
  385. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/slinalg.py +0 -0
  386. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/sort.py +0 -0
  387. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/dispatch/subtensor.py +0 -0
  388. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/pytorch/linker.py +0 -0
  389. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/utils.py +0 -0
  390. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/link/vm.py +0 -0
  391. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/__init__.py +0 -0
  392. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/check_blas.py +0 -0
  393. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/check_blas_many.sh +0 -0
  394. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/check_duplicate_key.py +0 -0
  395. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/elemwise_openmp_speedup.py +0 -0
  396. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/elemwise_time_test.py +0 -0
  397. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/frozendict.py +0 -0
  398. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/may_share_memory.py +0 -0
  399. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/ordered_set.py +0 -0
  400. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/misc/pkl_utils.py +0 -0
  401. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/npy_2_compat.py +0 -0
  402. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/printing.py +0 -0
  403. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/py.typed +0 -0
  404. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/raise_op.py +0 -0
  405. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/__init__.py +0 -0
  406. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/basic.py +0 -0
  407. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/c_code/Faddeeva.cc +0 -0
  408. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/c_code/Faddeeva.hh +0 -0
  409. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/c_code/gamma.c +0 -0
  410. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/c_code/incbet.c +0 -0
  411. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/loop.py +0 -0
  412. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/math.py +0 -0
  413. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scalar/sharedvar.py +0 -0
  414. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/__init__.py +0 -0
  415. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/basic.py +0 -0
  416. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/checkpoints.py +0 -0
  417. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/op.py +0 -0
  418. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/rewriting.py +0 -0
  419. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/scan_perform.pyx +0 -0
  420. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/scan_perform_ext.py +0 -0
  421. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/utils.py +0 -0
  422. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/scan/views.py +0 -0
  423. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/__init__.py +0 -0
  424. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/linalg.py +0 -0
  425. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/rewriting.py +0 -0
  426. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/sharedvar.py +0 -0
  427. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/type.py +0 -0
  428. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/utils.py +0 -0
  429. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/sparse/variable.py +0 -0
  430. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/__init__.py +0 -0
  431. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/_linalg/__init__.py +0 -0
  432. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/_linalg/solve/__init__.py +0 -0
  433. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/_linalg/solve/rewriting.py +0 -0
  434. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/_linalg/solve/tridiagonal.py +0 -0
  435. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/basic.py +0 -0
  436. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/blas.py +0 -0
  437. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/blas_c.py +0 -0
  438. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/blas_headers.py +0 -0
  439. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/blockwise.py +0 -0
  440. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/c_code/alt_blas_common.h +0 -0
  441. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/c_code/alt_blas_template.c +0 -0
  442. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/c_code/dimshuffle.c +0 -0
  443. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/einsum.py +0 -0
  444. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/elemwise_cgen.py +0 -0
  445. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/exceptions.py +0 -0
  446. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/fft.py +0 -0
  447. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/fourier.py +0 -0
  448. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/functional.py +0 -0
  449. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/interpolate.py +0 -0
  450. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/linalg.py +0 -0
  451. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/math.py +0 -0
  452. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/pad.py +0 -0
  453. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/__init__.py +0 -0
  454. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/basic.py +0 -0
  455. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/op.py +0 -0
  456. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/rewriting/__init__.py +0 -0
  457. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/rewriting/basic.py +0 -0
  458. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/rewriting/jax.py +0 -0
  459. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/rewriting/numba.py +0 -0
  460. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/type.py +0 -0
  461. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/utils.py +0 -0
  462. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/random/var.py +0 -0
  463. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/reshape.py +0 -0
  464. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/__init__.py +0 -0
  465. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/blas.py +0 -0
  466. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/blas_c.py +0 -0
  467. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/einsum.py +0 -0
  468. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/elemwise.py +0 -0
  469. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/extra_ops.py +0 -0
  470. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/jax.py +0 -0
  471. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/linalg.py +0 -0
  472. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/numba.py +0 -0
  473. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/ofg.py +0 -0
  474. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/reshape.py +0 -0
  475. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/special.py +0 -0
  476. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/subtensor_lift.py +0 -0
  477. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/rewriting/uncanonicalize.py +0 -0
  478. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/sharedvar.py +0 -0
  479. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/signal/__init__.py +0 -0
  480. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/sort.py +0 -0
  481. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/special.py +0 -0
  482. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/type.py +0 -0
  483. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/type_other.py +0 -0
  484. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/utils.py +0 -0
  485. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/var.py +0 -0
  486. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/variable.py +0 -0
  487. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/tensor/xlogx.py +0 -0
  488. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/typed_list/__init__.py +0 -0
  489. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/typed_list/basic.py +0 -0
  490. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/typed_list/rewriting.py +0 -0
  491. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/typed_list/type.py +0 -0
  492. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/updates.py +0 -0
  493. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/linalg.py +0 -0
  494. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/math.py +0 -0
  495. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/random.py +0 -0
  496. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/__init__.py +0 -0
  497. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/basic.py +0 -0
  498. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/indexing.py +0 -0
  499. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/math.py +0 -0
  500. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/reduction.py +0 -0
  501. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/shape.py +0 -0
  502. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor/xtensor/rewriting/vectorization.py +0 -0
  503. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor.egg-info/dependency_links.txt +0 -0
  504. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor.egg-info/entry_points.txt +0 -0
  505. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor.egg-info/requires.txt +0 -0
  506. {pytensor-2.37.0 → pytensor-2.38.0}/pytensor.egg-info/top_level.txt +0 -0
  507. {pytensor-2.37.0 → pytensor-2.38.0}/scripts/mypy-failing.txt +0 -0
  508. {pytensor-2.37.0 → pytensor-2.38.0}/scripts/slowest_tests/update-slowest-times-issue.sh +0 -0
  509. {pytensor-2.37.0 → pytensor-2.38.0}/setup.cfg +0 -0
  510. {pytensor-2.37.0 → pytensor-2.38.0}/setup.py +0 -0
  511. {pytensor-2.37.0 → pytensor-2.38.0}/tests/link/c/c_code/test_cenum.h +0 -0
  512. {pytensor-2.37.0 → pytensor-2.38.0}/tests/link/c/c_code/test_quadratic_function.c +0 -0
  513. {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_breakpoint.py +0 -0
  514. {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_config.py +0 -0
  515. {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_gradient.py +0 -0
  516. {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_ifelse.py +0 -0
  517. {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_printing.py +0 -0
  518. {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_raise_op.py +0 -0
  519. {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_rop.py +0 -0
  520. {pytensor-2.37.0 → pytensor-2.38.0}/tests/test_updates.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytensor
3
- Version: 2.37.0
3
+ Version: 2.38.0
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
@@ -0,0 +1,7 @@
1
+ (libdoc_xtensor_linalg)=
2
+ # `xtensor.signal` -- Signal processing operations
3
+
4
+ ```{eval-rst}
5
+ .. automodule:: pytensor.xtensor.signal
6
+ :members:
7
+ ```
@@ -163,6 +163,7 @@ lines-after-imports = 2
163
163
  "tests/link/numba/**/test_*.py" = ["E402"]
164
164
  "tests/link/pytorch/**/test_*.py" = ["E402"]
165
165
  "tests/link/mlx/**/test_*.py" = ["E402"]
166
+ "tests/xtensor/**/*.py" = ["E402"]
166
167
 
167
168
 
168
169
 
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-01-23T09:04:26+0100",
11
+ "date": "2026-02-19T15:15:27+0100",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "9834e96cee86d9f18436be5fa9e31c692bf6326f",
15
- "version": "2.37.0"
14
+ "full-revisionid": "87470065d89190405c9291235daf621d17de17ed",
15
+ "version": "2.38.0"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -208,19 +208,13 @@ def graph_replace(
208
208
 
209
209
 
210
210
  @singledispatch
211
- def _vectorize_node(op: Op, node: Apply, *batched_inputs) -> Apply:
211
+ def _vectorize_node(op: Op, node: Apply, *batched_inputs) -> Apply | Sequence[Variable]:
212
212
  # Default implementation is provided in pytensor.tensor.blockwise
213
213
  raise NotImplementedError
214
214
 
215
215
 
216
- def vectorize_node(node: Apply, *batched_inputs) -> Apply:
217
- """Returns vectorized version of node with new batched inputs."""
218
- op = node.op
219
- return _vectorize_node(op, node, *batched_inputs)
220
-
221
-
222
216
  def _vectorize_not_needed(op, node, *batched_inputs):
223
- return op.make_node(*batched_inputs)
217
+ return op.make_node(*batched_inputs).outputs
224
218
 
225
219
 
226
220
  @overload
@@ -289,19 +283,40 @@ def vectorize_graph(
289
283
  # [array([-10., -11.]), array([10., 11.])]
290
284
 
291
285
  """
286
+ # TODO: Move this to tensor.vectorize, and make this helper type agnostic.
287
+ #
288
+ # This helper may dispatch to tensor.vectorize_graph or xtensor.vectorize_graph depending on the replacement types
289
+ # The behavior is distinct, because tensor vectorization depends on axis-position while xtensor depends on dimension labels
290
+ #
291
+ # xtensor.vectorize_graph will be able to handle batched inner tensor operations, while tensor.vectorize_graph won't,
292
+ # as it is by design unaware of xtensors and their semantics.
292
293
  if isinstance(outputs, Sequence):
293
294
  seq_outputs = outputs
294
295
  else:
295
296
  seq_outputs = [outputs]
296
297
 
298
+ if not all(
299
+ isinstance(key, Variable) and isinstance(value, Variable)
300
+ for key, value in replace.items()
301
+ ):
302
+ raise ValueError(f"Some of the replaced items are not Variables: {replace}")
303
+
297
304
  inputs = truncated_graph_inputs(seq_outputs, ancestors_to_include=replace.keys())
298
305
  new_inputs = [replace.get(inp, inp) for inp in inputs]
299
306
 
300
307
  vect_vars = dict(zip(inputs, new_inputs, strict=True))
301
308
  for node in toposort(seq_outputs, blockers=inputs):
302
309
  vect_inputs = [vect_vars.get(inp, inp) for inp in node.inputs]
303
- vect_node = vectorize_node(node, *vect_inputs)
304
- for output, vect_output in zip(node.outputs, vect_node.outputs, strict=True):
310
+
311
+ vect_node_or_outputs = _vectorize_node(node.op, node, *vect_inputs)
312
+ # Compatibility with the old API
313
+ vect_outputs = (
314
+ vect_node_or_outputs.outputs
315
+ if isinstance(vect_node_or_outputs, Apply)
316
+ else vect_node_or_outputs
317
+ )
318
+
319
+ for output, vect_output in zip(node.outputs, vect_outputs, strict=True):
305
320
  if output in vect_vars:
306
321
  # This can happen when some outputs of a multi-output node are given a replacement,
307
322
  # while some of the remaining outputs are still needed in the graph.
@@ -946,3 +946,388 @@ class _LAPACK:
946
946
  fn(TRANA, TRANB, ISGN, M, N, A, LDA, B, LDB, C, LDC, SCALE, INFO)
947
947
 
948
948
  return trsyl
949
+
950
+ @classmethod
951
+ def numba_xgges(cls, dtype):
952
+ """
953
+ Compute generalized eigenvalues and, optionally, the left and/or right generalized Schur vectors of a pair
954
+ of real nonsymmetric matrices (A,B).
955
+
956
+ Called by scipy.linalg.qz and scipy.linalg.ordqz.
957
+ """
958
+ kind = get_blas_kind(dtype)
959
+ float_pointer = _get_nb_float_from_dtype(kind)
960
+ unique_func_name = f"scipy.lapack.{kind}gges"
961
+
962
+ @numba_basic.numba_njit
963
+ def get_gges_pointer():
964
+ with numba.objmode(ptr=types.intp):
965
+ ptr = get_lapack_ptr(dtype, "gges")
966
+ return ptr
967
+
968
+ if isinstance(dtype, Complex):
969
+ real_pointer = nb_f64p if dtype is nb_c128 else nb_f32p
970
+ gges_function_type = types.FunctionType(
971
+ types.void(
972
+ nb_i32p, # JOBVSL
973
+ nb_i32p, # JOBVSR
974
+ nb_i32p, # SORT
975
+ nb_i32p, # SELECT
976
+ nb_i32p, # N
977
+ float_pointer, # A
978
+ nb_i32p, # LDA
979
+ float_pointer, # B
980
+ nb_i32p, # LDB
981
+ nb_i32p, # SDIM
982
+ float_pointer, # ALPHA
983
+ float_pointer, # BETA
984
+ float_pointer, # VSL
985
+ nb_i32p, # LDVSL
986
+ float_pointer, # VSR
987
+ nb_i32p, # LDVSR
988
+ float_pointer, # WORK
989
+ nb_i32p, # LWORK
990
+ real_pointer, # RWORK
991
+ nb_i32p, # BWORK
992
+ nb_i32p, # INFO
993
+ )
994
+ )
995
+
996
+ @numba_basic.numba_njit
997
+ def gges(
998
+ JOBVSL,
999
+ JOBVSR,
1000
+ SORT,
1001
+ SELECT,
1002
+ N,
1003
+ A,
1004
+ LDA,
1005
+ B,
1006
+ LDB,
1007
+ SDIM,
1008
+ ALPHA,
1009
+ BETA,
1010
+ VSL,
1011
+ LDVSL,
1012
+ VSR,
1013
+ LDVSR,
1014
+ WORK,
1015
+ LWORK,
1016
+ RWORK,
1017
+ BWORK,
1018
+ INFO,
1019
+ ):
1020
+ fn = _call_cached_ptr(
1021
+ get_ptr_func=get_gges_pointer,
1022
+ func_type_ref=gges_function_type,
1023
+ unique_func_name_lit=unique_func_name,
1024
+ )
1025
+ fn(
1026
+ JOBVSL,
1027
+ JOBVSR,
1028
+ SORT,
1029
+ SELECT,
1030
+ N,
1031
+ A,
1032
+ LDA,
1033
+ B,
1034
+ LDB,
1035
+ SDIM,
1036
+ ALPHA,
1037
+ BETA,
1038
+ VSL,
1039
+ LDVSL,
1040
+ VSR,
1041
+ LDVSR,
1042
+ WORK,
1043
+ LWORK,
1044
+ RWORK,
1045
+ BWORK,
1046
+ INFO,
1047
+ )
1048
+ else: # Real case
1049
+ gges_function_type = types.FunctionType(
1050
+ types.void(
1051
+ nb_i32p, # JOBVSL
1052
+ nb_i32p, # JOBVSR
1053
+ nb_i32p, # SORT
1054
+ nb_i32p, # SELECT
1055
+ nb_i32p, # N
1056
+ float_pointer, # A
1057
+ nb_i32p, # LDA
1058
+ float_pointer, # B
1059
+ nb_i32p, # LDB
1060
+ nb_i32p, # SDIM
1061
+ float_pointer, # ALPHAR
1062
+ float_pointer, # ALPHAI
1063
+ float_pointer, # BETA
1064
+ float_pointer, # VSL
1065
+ nb_i32p, # LDVSL
1066
+ float_pointer, # VSR
1067
+ nb_i32p, # LDVSR
1068
+ float_pointer, # WORK
1069
+ nb_i32p, # LWORK
1070
+ nb_i32p, # BWORK
1071
+ nb_i32p, # INFO
1072
+ )
1073
+ )
1074
+
1075
+ @numba_basic.numba_njit
1076
+ def gges(
1077
+ JOBVSL,
1078
+ JOBVSR,
1079
+ SORT,
1080
+ SELECT,
1081
+ N,
1082
+ A,
1083
+ LDA,
1084
+ B,
1085
+ LDB,
1086
+ SDIM,
1087
+ ALPHAR,
1088
+ ALPHAI,
1089
+ BETA,
1090
+ VSL,
1091
+ LDVSL,
1092
+ VSR,
1093
+ LDVSR,
1094
+ WORK,
1095
+ LWORK,
1096
+ BWORK,
1097
+ INFO,
1098
+ ):
1099
+ fn = _call_cached_ptr(
1100
+ get_ptr_func=get_gges_pointer,
1101
+ func_type_ref=gges_function_type,
1102
+ unique_func_name_lit=unique_func_name,
1103
+ )
1104
+ fn(
1105
+ JOBVSL,
1106
+ JOBVSR,
1107
+ SORT,
1108
+ SELECT,
1109
+ N,
1110
+ A,
1111
+ LDA,
1112
+ B,
1113
+ LDB,
1114
+ SDIM,
1115
+ ALPHAR,
1116
+ ALPHAI,
1117
+ BETA,
1118
+ VSL,
1119
+ LDVSL,
1120
+ VSR,
1121
+ LDVSR,
1122
+ WORK,
1123
+ LWORK,
1124
+ BWORK,
1125
+ INFO,
1126
+ )
1127
+
1128
+ return gges
1129
+
1130
+ @classmethod
1131
+ def numba_tgsen(cls, dtype):
1132
+ """
1133
+ Reorders the generalized Schur decomposition of a matrix pair (A, B) by their eigenvalues.
1134
+
1135
+ Output is sorted so that a selected cluster of eigenvalues appears in the leading diagonal blocks of the pair
1136
+ (A,B). The leading columns of Q and Z form unitary bases of the corresponding left and right eigenspaces
1137
+ (deflating subspaces). (A, B) must be in generalized Schur canonical form, that is, A and B are both upper
1138
+ triangular.
1139
+
1140
+ Used by scipy.linalg.ordqz.
1141
+ """
1142
+ kind = get_blas_kind(dtype)
1143
+ float_pointer = _get_nb_float_from_dtype(kind)
1144
+ unique_func_name = f"scipy.lapack.{kind}tgsen"
1145
+
1146
+ @numba_basic.numba_njit
1147
+ def get_tgsen_pointer():
1148
+ with numba.objmode(ptr=types.intp):
1149
+ ptr = get_lapack_ptr(dtype, "tgsen")
1150
+ return ptr
1151
+
1152
+ if isinstance(dtype, Complex):
1153
+ real_pointer = nb_f64p if dtype is nb_c128 else nb_f32p
1154
+ tgsen_function_type = types.FunctionType(
1155
+ types.void(
1156
+ nb_i32p, # IJOB
1157
+ nb_i32p, # WANTQ
1158
+ nb_i32p, # WANTZ
1159
+ nb_i32p, # SELECT
1160
+ nb_i32p, # N
1161
+ float_pointer, # A
1162
+ nb_i32p, # LDA
1163
+ float_pointer, # B
1164
+ nb_i32p, # LDB
1165
+ float_pointer, # alpha
1166
+ float_pointer, # beta
1167
+ float_pointer, # Q
1168
+ nb_i32p, # LDQ
1169
+ float_pointer, # Z
1170
+ nb_i32p, # LDZ
1171
+ nb_i32p, # M
1172
+ real_pointer, # PL
1173
+ real_pointer, # PR
1174
+ real_pointer, # DIF
1175
+ float_pointer, # WORK
1176
+ nb_i32p, # LWORK
1177
+ nb_i32p, # IWORK
1178
+ nb_i32p, # LIWORK
1179
+ nb_i32p, # INFO
1180
+ )
1181
+ )
1182
+
1183
+ @numba_basic.numba_njit
1184
+ def tgsen(
1185
+ IJOB,
1186
+ WANTQ,
1187
+ WANTZ,
1188
+ SELECT,
1189
+ N,
1190
+ A,
1191
+ LDA,
1192
+ B,
1193
+ LDB,
1194
+ alpha,
1195
+ beta,
1196
+ Q,
1197
+ LDQ,
1198
+ Z,
1199
+ LDZ,
1200
+ M,
1201
+ PL,
1202
+ PR,
1203
+ DIF,
1204
+ WORK,
1205
+ LWORK,
1206
+ IWORK,
1207
+ LIWORK,
1208
+ INFO,
1209
+ ):
1210
+ fn = _call_cached_ptr(
1211
+ get_ptr_func=get_tgsen_pointer,
1212
+ func_type_ref=tgsen_function_type,
1213
+ unique_func_name_lit=unique_func_name,
1214
+ )
1215
+ fn(
1216
+ IJOB,
1217
+ WANTQ,
1218
+ WANTZ,
1219
+ SELECT,
1220
+ N,
1221
+ A,
1222
+ LDA,
1223
+ B,
1224
+ LDB,
1225
+ alpha,
1226
+ beta,
1227
+ Q,
1228
+ LDQ,
1229
+ Z,
1230
+ LDZ,
1231
+ M,
1232
+ PL,
1233
+ PR,
1234
+ DIF,
1235
+ WORK,
1236
+ LWORK,
1237
+ IWORK,
1238
+ LIWORK,
1239
+ INFO,
1240
+ )
1241
+ else: # Real case
1242
+ tgsen_function_type = types.FunctionType(
1243
+ types.void(
1244
+ nb_i32p, # IJOB
1245
+ nb_i32p, # WANTQ
1246
+ nb_i32p, # WANTZ
1247
+ nb_i32p, # SELECT
1248
+ nb_i32p, # N
1249
+ float_pointer, # A
1250
+ nb_i32p, # LDA
1251
+ float_pointer, # B
1252
+ nb_i32p, # LDB
1253
+ float_pointer, # ALPHAR
1254
+ float_pointer, # ALPHAI
1255
+ float_pointer, # BETA
1256
+ float_pointer, # Q
1257
+ nb_i32p, # LDQ
1258
+ float_pointer, # Z
1259
+ nb_i32p, # LDZ
1260
+ nb_i32p, # M
1261
+ float_pointer, # PL
1262
+ float_pointer, # PR
1263
+ float_pointer, # DIF
1264
+ float_pointer, # WORK
1265
+ nb_i32p, # LWORK
1266
+ nb_i32p, # IWORK
1267
+ nb_i32p, # LIWORK
1268
+ nb_i32p, # INFO
1269
+ )
1270
+ )
1271
+
1272
+ @numba_basic.numba_njit
1273
+ def tgsen(
1274
+ IJOB,
1275
+ WANTQ,
1276
+ WANTZ,
1277
+ SELECT,
1278
+ N,
1279
+ A,
1280
+ LDA,
1281
+ B,
1282
+ LDB,
1283
+ ALPHAR,
1284
+ ALPHAI,
1285
+ BETA,
1286
+ Q,
1287
+ LDQ,
1288
+ Z,
1289
+ LDZ,
1290
+ M,
1291
+ PL,
1292
+ PR,
1293
+ DIF,
1294
+ WORK,
1295
+ LWORK,
1296
+ IWORK,
1297
+ LIWORK,
1298
+ INFO,
1299
+ ):
1300
+ fn = _call_cached_ptr(
1301
+ get_ptr_func=get_tgsen_pointer,
1302
+ func_type_ref=tgsen_function_type,
1303
+ unique_func_name_lit=unique_func_name,
1304
+ )
1305
+ fn(
1306
+ IJOB,
1307
+ WANTQ,
1308
+ WANTZ,
1309
+ SELECT,
1310
+ N,
1311
+ A,
1312
+ LDA,
1313
+ B,
1314
+ LDB,
1315
+ ALPHAR,
1316
+ ALPHAI,
1317
+ BETA,
1318
+ Q,
1319
+ LDQ,
1320
+ Z,
1321
+ LDZ,
1322
+ M,
1323
+ PL,
1324
+ PR,
1325
+ DIF,
1326
+ WORK,
1327
+ LWORK,
1328
+ IWORK,
1329
+ LIWORK,
1330
+ INFO,
1331
+ )
1332
+
1333
+ return tgsen